次の方法で共有


Spring Cloud Azure リソースの処理

この記事の対象: ✔️ バージョン 4.14.0 ✔️ バージョン 5.8.0

Spring プロジェクトでは、いくつかの低レベルのリソースにアクセスするための Spring Resources 抽象化が提供されます。 このプロジェクトでは、ResourceResourceLoader、および 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 を使用します。

  • パターン検索の場合、searchPatternazure-blob://azure-file:// で始まる必要があります。 たとえば、azure-blob://**/** はすべてのコンテナー内のすべての BLOB を一覧表示し、azure-blob://demo-container/**demo-container コンテナー内 (サブフォルダーを含む) のすべての BLOB を一覧表示します。

  • 場所検索の場合、searchLocationazure-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");

リソースでの処理

特定のリソースからデータをダウンロードする

ResourcegetInputStream() メソッドを使用して、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 ResourceWritableResource にキャストして、リソースを 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 リポジトリを参照してください。