2014年にパプアニューギニア上空で、1つの隕石の爆散が観測されました。
それはこの隕石の極端な速度や軌道から見て、99%の確実性でこれが太陽系外から飛来した星間天体(星系間を渡る天体)だったというのです。
事実ならこれは観測史上初の星間天体の地球落下報告であり、驚くべき大発見です。
⇧ へぇ~!、へぇ~!、へぇ~!、トリビア~、じゃないですが、「星間天体」がよく分かりませんな...
⇧ う~ん...分からん
⇧ 我々の属する系とは異なる場所にあるってことなんですかね?
Azureのサービス全体概要図
まぁ、Microsoftさん、何故か公式でサービスの全体概要図の情報を出してくれてないのが残念なのですが、Microsoft Learnのほうで確認できますと。
AZ-900っていう資格試験に関する学習の情報が掲載されてるページにあるんだけど、何故、もっと検索されやすいようにしないのか甚だ疑問です...
何だろう、サービス使ってもらいたいって思ってないのかな?
⇧ Azureのサービスで主要なものが確認できますと。
最も一般的に使用されるカテゴリを詳しく見てみましょう。
- コンピューティング
- ネットワーク
- ストレージ
- モバイル
- データベース
- Web
- モノのインターネット(IoT)
- ビッグ データ
- AI
- DevOps
⇧ とあるのですが、今回は「ストレージ」サービスについてです。
Azure Storageというサービス
手前味噌で恐縮ですが、
⇧ 過去記事で少しまとめてます。
公式のドキュメントによりますと、Azure Storageのサービスは、
Azure Storage プラットフォームには、次のデータ サービスが含まれています。
- Azure BLOB:テキストおよびバイナリ データのための高度にスケーラブルなオブジェクト ストア。 また、Data Lake Storage Gen2 によるビッグ データ分析のサポートも含まれています。
- Azure Files:クラウドまたはオンプレミスのデプロイ用のマネージド ファイル共有。
- Azure キュー:アプリケーション コンポーネント間の信頼性の高いメッセージングのためのメッセージング ストア。
- Azure テーブル:構造化データのスキーマレス ストレージのための NoSQL ストア。
- Azure ディスク: Azure VM のためのブロック レベルのストレージ ボリューム。
⇧ 全部で5つ。
で、出端を挫かれるのが、
⇧ ストレージのサービス4つに分類されとったやん...数合わないやんけ...ってことだと思うのですが、おそらく、「Azure テーブル」って言ってるのは、
⇧ データのサービスの「Table Storage」のことを言ってるのかもしれないし、そうでないかもしれない、認識齟齬を招きかねないドキュメントの作り止めて欲しい...
で、肝心のAzureで提供されてるサービスを利用するには、
それぞれのサービスには、ストレージ アカウントを通じてアクセスします。 作業を開始するには、「ストレージ アカウントの作成」を参照してください。
⇧「ストレージアカウント」なるものを作成する必要がありますと。
詳しくは、
⇧ 上記に記載がありますと。
Azure Storageというサービスに限らずAzureのサービスを利用するには、「Azure アカウント」を作る必要があるらしいですと。
⇧ で、各Azureのサービスは「リソース」という形で提供されてますと。
で、この「リソース」については、
⇧ 上図のように、いろんな方法で利用することができるのですが、どの利用方法を選んだとしても「Azure Resource Manager」経由でのアクセスに集約されますと。
C#、Java、PHP、JavaScriptなどのプログラミングで「リソース」を利用する場合は、上図では「SDKs」というものを利用して「Azure Resource Manager」を経て「リソース」にアクセスすることになるんじゃないかと、図には書いてないから分からんけど。
Azure Blob Storageが分かり辛かったので備忘録
話が脱線してきましたが、ようやっと、本題。
Azure Blob Storageというサービスは、Azure Storageというサービスの中の1つであるのですが、
Azure Blob Storage は、Microsoft のクラウド用オブジェクト ストレージ ソリューションです。 Blob Storage は、大量の非構造化データを格納できるよう最適化されています。 非構造化データとは、特定のデータ モデルや定義に従っていないデータであり、テキスト データやバイナリ データなどがあります。
⇧ という説明にあるように、「非構造化データ」を格納するサービスとあり、
⇧ 総務省のデータ分析における説明では、あらゆるデータが「非構造化データ」に内包されると読めるので、語弊を恐れずに言うなら、すべてのデータを扱えるサービス、それがAzure Blob Storageというサービスになるかと。
Azure Blob Storageに話を戻すと、
Blob Storage には、3 種類のリソースがあります。
- ストレージ アカウント
- ストレージ アカウント内のコンテナー
- コンテナー内の BLOB
次の図に、これらのリソースの関係を示します。
⇧ とあって、説明がザックリ過ぎるというね(涙)。
ストレージアカウント
ストレージ アカウントは、データ用の一意の名前空間を Azure 内に用意します。 Azure Storage 内に格納されるすべてのオブジェクトには、一意のアカウント名を含むアドレスが割り当てられます。 アカウント名と Blob Storage エンドポイントの組み合わせによって、ストレージ アカウント内のオブジェクト用のベース アドレスが形成されます。
⇧ 説明がもうちょい欲しい...一意のアカウント名を含むとして、
のオブジェクトの名前が一意になるとは限らないってことなのか、オブジェクトの名前が重複するとしたら検索とかどうすりゃ良いですか、とかツッコミどころが満載なんですが...
で、そもそもとして、
- アカウント
- コンテナー
- BLOB
の3つのうち、「アカウント」「BLOB」はmustってことは分かるんだけど、「コンテナー」がmustなのかがハッキリしない...
Azure Blob StorageのSDKでJavaのドキュメント見ると、朧気に推測できるのですが、
URL format
Blobs are addressable using the following URL format: The following URL addresses a blob:
⇧ URL formatという説明から推測するに、
⇧ 上図のような関係になっていると思われますと。
で、URL formatというからには、必ずこの形にしてね、約束だよってことだと思うので、「コンテナー」もmustってことだとは思う。
で、もう1つ、公式のドキュメントに何故、載せないのかが解せないのが、「サブディレクトリ」の扱いというね。
単純に、ググり方が下手で、上位表示されてこないだけなのかもしらんけど...
⇧ stackoverflowの情報によると、「/(スラッシュ)」で区切れば「サブディレクトリ」を作ってくれるということらしい。
で、「サブディレクトリ」部分については、「BLOB」に含まれるということのようです。
つまり、Azure Blob Storage の「ストレージアカウント」を「hoge」で、「コンテナー」を「myhoge」でhoge.mp4ってファイルを、
みたいに保存した場合は、
のような形で保存され、保存したオブジェクトにアクセスするURLは、
https://hoge.blob.core.windows.net/myhoge/subdir01/subdir02/subdir03/subdir04/subdir05/hoge.mp4
みたいな形になるってことですかね。
何で、こんな確認をしたかと言うと、URLがAzure Blob Storage のものかどうかを確認する必要があって、どうも、Azure Blob Storage のSDKのJavaのAPIで良しなにやってくれる方法が見つけられなかったので、自力でURLの文字列を切り出して確認する方法になってしまったからなんですがね...
BlobClientBuilderってAPIのドキュメントの冒頭の説明を読む限りでは、
This class provides a fluent builder API to help aid the configuration and instantiation of BlobClient and BlobAsyncClient, call buildClient() and buildAsyncClient() respectively to construct an instance of the desired client.
The following information must be provided on this builder:
- the endpoint through
.endpoint()
, including the container name and blob name, in the format ofhttps://{accountName}.blob.core.windows.net/{containerName}/{blobName}
. - the credential through
.credential()
or.connectionString()
if the container is not publicly accessible.
⇧ なんか、いけそうかもと思ったんですが、
Sets the service endpoint, additionally parses it for information (SAS token, container name, blob name)
If the blob name contains special characters, pass in the url encoded version of the blob name.
If the endpoint is to a blob in the root container, this method will fail as it will interpret the blob name as the container name. With only one path element, it is impossible to distinguish between a container name and a blob in the root container, so it is assumed to be the container name as this is much more common. When working with blobs in the root container, it is best to set the endpoint to the account url and specify the blob name separately using the blobName(String blobName) method.
⇧ そもそも、「root container」が何のことを言ってるのかサッパリ分からん...
さらに、
Azure Storage では、コンテナーと BLOB へのオプションの匿名パブリック読み取りアクセスがサポートされています。 既定では、データへの匿名アクセスは許可されません。 匿名アクセスを明示的に有効にしない限り、コンテナーとその BLOB へのすべての要求には承認が必要です。 匿名アクセスを許可するようにコンテナーのパブリック アクセス レベル設定を構成すると、クライアントは要求の承認なしでそのコンテナー内のデータを読み取ることができます。
コンテナーと BLOB の匿名パブリック読み取りアクセスを構成する - Azure Storage | Microsoft Docs
⇧「パブリック アクセス レベル」ってものがあるらしいのですが、「パブリック アクセス レベル」が何なのか説明ない...
Specifies the level of public access that is allowed on the container.
The public access setting indicates whether the container and its blobs can be read via an anonymous request.
The BlobContainerPublicAccessType
enumeration provides three levels of anonymous read access:
OFF
, which prevents anonymous access.BLOB
, which permits anonymous read access to blob resources, but not to container metadata or to the list of blobs in the container.CONTAINER
, which permits anonymous read access to blob resources, container metadata, and the list of blobs in the container.
For more information on managing anonymous access to Blob service resources, see Setting Access Control for Containers.
BlobContainerPublicAccessType (Microsoft Azure Storage Client SDK 8.0.0 API)
⇧というか、Azure Blob StorageのSDKのJava APIの説明少しばかり説明されてたけども、APIのドキュメントのほうを確認しないといけないとか、情報の参照先が見つけ辛過ぎる...
stackoverflow経由でしか情報を得られない辛さ...
To elaborate more on the documentation, if the access level is:
- Private: You cannot access a resource by using the resource URL. For example, if your blob's URL is
https://account.blob.core.windows.net/container/blob.txt
and if you try to access this resource in a browser, you will receive a 404 error even though the blob is present. - Blob: You can download a blob or get its properties by using the URL. However you will not be able to access a container's properties if the access level is set as Blob.
- Public: It is similar to
Blob
public access level but if the ACL for a container is set as public, you can get a container's properties as well as list blobs in that container.
https://stackoverflow.com/questions/71845086/public-access-level-blob-vs-container
⇧ まぁ、何て言うか、Azure Blob StorageのSDKのJava APIとマッチしてない気がするんだけど、SDKのJava APIだと、Privateに該当する設定が無さそうだし...
もう、Microsoftのドキュメント読むの疲れたよ、パトラッシュ、僕はもう疲れたよ
というわけで、最終的に、結局、何も分からん状態に陥るという...
今回はこのへんで。