Azure Storage アカウント内のすべてのコンテナを転送する

Storage Transfer Service は、単一の転送ジョブで、単一の Microsoft Azure Storage アカウント内のすべてのコンテナからデータを転送できます。これにより、複数のコンテナに分散されたログの取り込みなどのユースケースのワークフローが簡素化されます。

すべてのコンテナの転送を構成する

ストレージ アカウント内のすべてのコンテナを転送するには、AzureBlobStorageData 公開 API オブジェクトでソース コンテナを *(単一のアスタリスク)として指定するか、gcloud コマンドでソースを指定するときに https://AZURE_ACCOUNT_NAME.blob.core.windows.net/* として指定します。

マルチコンテナ転送では、ソースフォルダまたは path を指定することはできません。代わりに接頭辞を使用してパスを指定するには、転送するコンテナとオブジェクトをフィルタするをご覧ください。

転送ジョブが実行されると、Storage Transfer Service はまず Azure にクエリを実行して、指定されたストレージ アカウント内のすべてのコンテナの更新されたリストを取得します。次に、検出されたコンテナごとに、宛先に対応するフォルダを作成し、コンテナのデータをその新しいフォルダに転送します。

gcloud

次のコマンドは、指定された Azure Storage アカウントから Cloud Storage バケットにすべてのコンテナを転送する転送ジョブを作成します。

gcloud transfer jobs create \
  https://AZURE_ACCOUNT_NAME.blob.core.windows.net/* \
  gs://GCS_BUCKET_NAME \
  --source-creds-file="PATH_TO_AZURE_SAS_FILE" \
  --project="PROJECT_ID"

ここで

  • AZURE_ACCOUNT_NAME: Azure Storage アカウントの名前。
  • GCS_BUCKET_NAME: 転送先の Cloud Storage バケットの名前。
  • PATH_TO_AZURE_SAS_FILE: アカウント レベルの Azure SAS トークンを含むテキスト ファイルのローカルパス。例: ~/.azure/sas_token.txt SAS トークンは、[許可されているリソースタイプ] で [サービス]、[コンテナ]、[オブジェクト] が選択された状態で、ストレージ アカウント レベルで作成する必要があります。詳細については、ソースへのアクセスを構成する: Microsoft Azure Storage をご覧ください。
  • PROJECT_ID: 転送を所有する Google Cloud プロジェクト ID。

REST

REST API を使用してこの転送を作成するには、https://storagetransfer.googleapis.com/v1/transferJobs エンドポイントに POST リクエストを送信します。

リクエストの本文:

{
  "description": "Transfer all containers from my Azure account",
  "projectId": "PROJECT_ID",
  "status": "ENABLED",
  "transferSpec": {
    "azureBlobStorageDataSource": {
      "storageAccount": "AZURE_ACCOUNT_NAME",
      "container": "*",
      "azureCredentials": {
        "sasToken": "AZURE_SAS_TOKEN"
      }
    },
    "gcsDataSink": {
      "bucketName": "GCS_BUCKET_NAME"
    }
  }
}

ここで

  • PROJECT_ID: 転送を所有する Google Cloud プロジェクト ID。
  • AZURE_ACCOUNT_NAME: Azure Storage アカウントの名前。
  • AZURE_SAS_TOKEN: アカウント レベルの完全な SAS トークン文字列(?sv=2020-08-04&ss=bfqt&srt=sco&... など)。SAS トークンは、許可されているリソースタイプとして [サービス]、[コンテナ]、[オブジェクト] が選択された状態で、ストレージ アカウント レベルで作成する必要があります。詳細については、ソースへのアクセスを構成する: Microsoft Azure Storage をご覧ください。
  • GCS_BUCKET_NAME: 転送先の Cloud Storage バケットの名前。

クライアント ライブラリ

このサンプルでは、google-cloud-storage-transfer Python クライアント ライブラリを使用して転送を作成します。

from google.cloud import storage_transfer_v1

def create_transfer_all_azure_containers(
    project_id: str,
    description: str,
    azure_storage_account: str,
    azure_sas_token: str,
    gcs_sink_bucket: str,
):
    """Creates a transfer job from all containers in an Azure account to Cloud Storage."""

    client = storage_transfer_v1.StorageTransferServiceClient()

    transfer_job_request = storage_transfer_v1.CreateTransferJobRequest(
        {
            "transfer_job": {
                "project_id": project_id,
                "description": description,
                "status": storage_transfer_v1.TransferJob.Status.ENABLED,
                "transfer_spec": {
                    "azure_blob_storage_data_source": {
                        "storage_account": azure_storage_account,
                        "container": "*",  # Wildcard for all containers
                        "azure_credentials": {"sas_token": azure_sas_token},
                    },
                    "gcs_data_sink": {"bucket_name": gcs_sink_bucket},
                },
            }
        }
    )

    result = client.create_transfer_job(transfer_job_request)
    print(f"Created transfer job: {result.name}")

if __name__ == "__main__":
    create_transfer_all_azure_containers(
        project_id="PROJECT_ID",
        description="All-containers transfer from Azure",
        azure_storage_account="AZURE_ACCOUNT_NAME",
        azure_sas_token="AZURE_SAS_TOKEN",
        gcs_sink_bucket="GCS_BUCKET_NAME",
    )

ここで

  • PROJECT_ID: 転送を所有する Google Cloud プロジェクト ID。
  • AZURE_ACCOUNT_NAME: Azure Storage アカウントの名前。
  • AZURE_SAS_TOKEN: アカウント レベルの完全な SAS トークン文字列(?sv=2020-08-04&ss=bfqt&srt=sco&... など)。SAS トークンは、許可されているリソースタイプとして [サービス]、[コンテナ]、[オブジェクト] が選択された状態で、ストレージ アカウント レベルで作成する必要があります。詳細については、ソースへのアクセスを構成する: Microsoft Azure Storage をご覧ください。
  • GCS_BUCKET_NAME: 転送先の Cloud Storage バケットの名前。

転送の作成と使用可能なオプションの詳細については、転送を作成するをご覧ください。

転送するコンテナとオブジェクトをフィルタする

接頭辞またはマニフェスト ファイルを使用して、転送に含めるコンテナとオブジェクトを制御できます。

前方一致でフィルタする

コンテナ内の特定のコンテナまたは特定のパスを転送するには、includePrefixes または excludePrefixes のリストを指定します。コンテナ フィールドが * の場合、各プレフィックス パスの最初のセグメントはコンテナ名として扱われます。これにより、同じジョブ内の異なるコンテナに異なるパスを指定できます。ストレージ アカウント内のすべてのコンテナにプレフィックスを適用するには、最初のセグメントとして * を使用します(例: */PREFIX)。

たとえば、container-a のすべてのオブジェクトと、container-b の特定のパスの下にあるオブジェクトを転送するには、包含接頭辞を次のように設定します。

"transferSpec": {
  ...
  "azureBlobStorageDataSource": {
    "storageAccount": "my-azure-account",
    "container": "*"
  },
  "objectConditions": {
    "includePrefixes": [
      "container-a",
      "container-b/logs/2025/"
    ]
  },
  ...
}

この構成では、次の処理を行います。

  • container-a からすべてのオブジェクトを転送します。
  • container-b から logs/2025/ パスにあるすべてのオブジェクトを転送します。
  • ストレージ アカウント内の他のすべてのコンテナをスキップします。

ストレージ アカウント内のすべてのコンテナから logs/2025/ パスにあるすべてのオブジェクトを転送するには、includePrefixes で "*/logs/2025/" を指定します。

接頭辞の追加と除外について詳しくは、接頭辞でフィルタするをご覧ください。

マニフェストを使用してフィルタする

マルチコンテナ転送にマニフェスト ファイルを使用するには、マニフェスト CSV ファイルにリストされている各オブジェクトのパスがコンテナの名前で始まる必要があります。

次に例を示します。

container-a/photos/photo1.jpg
container-a/photos/photo2.jpg
container-c/archive.zip

マニフェスト ファイルの詳細については、マニフェストを使用して特定のファイルまたはオブジェクトを転送するをご覧ください。

イベント ドリブン転送

Azure からのイベント ドリブン転送は、マルチコンテナ構成でサポートされています。

パフォーマンスを最大限に高め、不要なイベント処理を回避するには、Azure でイベント フィルタを構成して、イベントをトリガーするコンテナを指定します。フィルタがない場合、ストレージ アカウント内のすべてのコンテナ更新に対してイベントが生成されます。

詳細については、Azure Blob Storage からのイベント ドリブン転送をご覧ください。

Azure API の割り当て

多数のコンテナから転送すると、Azure に対して行われる API リクエストの数が増加する可能性があります。Azure Storage アカウントにはリクエスト レートの上限があります。通常は 1 秒あたり約 20,000 件のリクエストです。コンテナの数が非常に多い場合、Storage Transfer Service はこれらの上限内に収まるようにリスト作成プロセスを調整することがあります。