Spring Cloud Azure リソースの処理
この記事の対象: ✔️ バージョン 4.14.0 ✔️ バージョン 5.8.0
Spring プロジェクトでは、いくつかの低レベルのリソースにアクセスするための Spring Resources 抽象化が提供されます。 このプロジェクトでは、Resource
、ResourceLoader
、および ResourcePatternResolver
などのインターフェイスが提供されます。 Spring Cloud Azure では、Azure Storage サービス用にこれらのインターフェイスが実装されています。このため、Spring プログラミング モデルを使用して Azure Storage BLOB とファイル共有を操作することができます。 Spring Cloud Azure では、Azure Storage Blob と Azure Storage ファイル共有を自動構成する spring-cloud-azure-starter-storage-blob
および spring-cloud-azure-starter-storage-file-share
が提供されます。
次の表に、Azure Storage に関連するライブラリの一覧を示します。
スターター | サービス | 説明 |
---|---|---|
spring-cloud-azure-starter-storage-blob | Azure Storage Blob | 非構造化データを大規模にブロック BLOB に格納してアクセスできるようにします。 |
spring-cloud-azure-starter-storage-file-share | Azure Storage ファイル共有 | 業界標準のサーバー メッセージ ブロック (SMB) プロトコル経由でどこからでもアクセスできるフル マネージドのクラウド ファイル共有を提供します。 |
依存関係のセットアップ
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-storage-file-share</artifactId>
</dependency>
</dependencies>
spring-cloud-azure-starter-storage-blob
依存関係は、Azure Storage Blob を使用している場合にのみ必要です。
spring-cloud-azure-starter-storage-file-share
依存関係は、Azure Storage ファイル共有を使用している場合にのみ必要です。
ヒント
Storage のすべての機能をサポートするために spring-cloud-azure-starter-storage
も用意されています。 これを使用する場合は、構成するプロパティは spring.cloud.azure.storage.enable
であり、既定値は true です。 その後、spring.cloud.azure.storage.<storage-service>.enable
を使用して不要なサービスを無効にできます。
構成
Note
セキュリティ プリンシパルを使用して、Azure リソースにアクセスするための Microsoft Entra ID による認証と承認を行う場合は、セキュリティ プリンシパルに Azure リソースにアクセスするための十分なアクセス許可が付与されていることを確認してください。 詳細については、「Microsoft Entra ID を使用してアクセスを承認する」を参照してください。
次の表では、構成可能な spring-cloud-azure-starter-storage-blob
のプロパティの一覧を示します。
プロパティ | Default | 説明 |
---|---|---|
spring.cloud.azure.storage.blob.enabled | true | Azure Blob Storage サービスが有効かどうかを示す値。 |
spring.cloud.azure.storage.blob.endpoint | Azure Blob Storage に接続する URI。 | |
spring.cloud.azure.storage.blob.account-key | Azure Blob Storage に接続する秘密キー。 | |
spring.cloud.azure.storage.blob.account-name | Azure Storage Blob アカウント名。 |
次の表では、構成可能な spring-cloud-azure-starter-storage-file-share
のプロパティの一覧を示します。
プロパティ | Default | 説明 |
---|---|---|
spring.cloud.azure.storage.fileshare.enabled | true | Azure File Storage サービスが有効になっているかどうかを示す値。 |
spring.cloud.azure.storage.fileshare.endpoint | Azure File Storage に接続する URI。 | |
spring.cloud.azure.storage.fileshare.account-key | Azure File Storage に接続する秘密キー。 | |
spring.cloud.azure.storage.fileshare.account-name | Azure Storage ファイル共有のアカウント名。 |
基本的な使用方法
application.yml ファイルに次のプロパティを追加します。
spring:
cloud:
azure:
storage:
blob:
account-name: ${STORAGE_ACCOUNT_NAME}
account-key: ${STORAGE_ACCOUNT_KEY}
endpoint: ${STORAGE_BLOB_ENDPOINT}
fileshare:
account-name: ${STORAGE_ACCOUNT_NAME}
account-key: ${STORAGE_ACCOUNT_KEY}
endpoint: ${STORAGE_FILESHARE_ENDPOINT}
リソースを取得する
@Value でリソース グループを取得します。
次の例に示すように、@Value("azure-blob://[your-container-name]/[your-blob-name]")
の注釈を使用して BLOB リソースを自動ワイヤ化できます。
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
次の例に示すように、@Value("azure-file://[your-fileshare-name]/[your-file-name]")
の注釈を使用してファイル リソースを自動ワイヤ化できます。
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
ResourceLoader でリソースを取得する
@Autowired
private ResourceLoader resourceLoader;
...
// Get a BlobResource.
Resource storageBlobResource = resourceLoader.getResource("azure-blob://[your-container-name]/[your-blob-name]");
// Get a FileResource.
Resource storageFileResource = resourceLoader.getResource("azure-file://[your-fileshare-name]/[your-file-name]");
パターンを検索してリソースを取得する
実装クラス ResourcePatternResolver
を使用してリソースを検索できます。 blob
リソースを検索するには AzureStorageBlobProtocolResolver
を使用し、file
リソースを検索するには AzureStorageFileProtocolResolver
を使用します。
パターン検索の場合、
searchPattern
はazure-blob://
かazure-file://
で始まる必要があります。 たとえば、azure-blob://**/**
はすべてのコンテナー内のすべての BLOB を一覧表示し、azure-blob://demo-container/**
はdemo-container
コンテナー内 (サブフォルダーを含む) のすべての BLOB を一覧表示します。場所検索の場合、
searchLocation
はazure-blob://
かazure-file://
で始まり、残りのファイル パスが存在する必要があります。そうでない場合には例外がスローされます。
@Autowired
private AzureStorageBlobProtocolResolver azureStorageBlobProtocolResolver;
@Autowired
private AzureStorageFileProtocolResolver azureStorageFileProtocolResolver;
// Get all text blobs.
Resource[] blobTextResources = azureStorageBlobProtocolResolver.getResources("azure-blob://[container-pattern]/*.txt");
// Get all text files.
Resource[] fileTextResources = azureStorageFileProtocolResolver.getResources("azure-file://[fileshare-pattern]/*.txt");
リソースでの処理
特定のリソースからデータをダウンロードする
Resource
の getInputStream()
メソッドを使用して、Azure Storage Blob またはファイル共有からリソースをダウンロードできます。
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
//...
// Download data as a stream from a blob resource.
InputStream inputblobStream = storageBlobResource.getInputStream();
// Download data as a stream from a file resource.
InputStream inputfileStream = storageFileResource.getInputStream();
特定のリソースにデータをアップロードする
次の例に示すように、Spring Resource
を WritableResource
にキャストして、リソースを Azure BLOB またはファイル ストレージにアップロードできます。
@Value("azure-blob://[your-container-name]/[your-blob-name]")
private Resource storageBlobResource;
@Value("azure-file://[your-fileshare-name]/[your-file-name]")
private Resource storageFileResource;
String data = "sampledata";
// Upload string data to a blob.
try (OutputStream blobos = ((WritableResource) this.storageBlobResource).getOutputStream()) {
blobos.write(data.getBytes());
}
// Upload string data to a file.
try (OutputStream fileos = ((WritableResource) this.storageFileResource).getOutputStream()) {
fileos.write(data.getBytes());
}
マルチパート アップロード
4 MiB を超えるファイルは、並行して Azure Storage にアップロードされます。
サンプル
GitHub の storage-blob-sample リポジトリと storage-file-sample リポジトリを参照してください。