このドキュメントでは、Storage Transfer Service を使用して、Azure Blob Storage または Data Lake Storage Gen2 から Cloud Storage へのイベント ドリブン データ転送を構成する方法について説明します。イベント ドリブン転送では、新しいオブジェクトと更新されたオブジェクトが Azure コンテナから Cloud Storage に自動的に転送されます。オブジェクトの削除は検出されません。転送元でオブジェクトを削除しても、転送先バケット内の関連オブジェクトは削除されません。
イベント ドリブン転送では、Azure Event Grid と Azure Storage キューを使用して、Azure コンテナの変更を Storage Transfer Service に通知します。ソース コンテナで新しい BLOB の作成などのイベントが発生すると、Azure Event Grid は構成された Azure Storage キューに通知を送信します。Storage Transfer Service は、このキューを継続的にモニタリングし、受信したイベントに基づいて転送を開始します。
始める前に
手順に沿って、宛先 Cloud Storage バケットに必要な権限を付与します。
Azure Storage キューを作成する
Azure Event Grid から通知を受信する Azure Storage キューを作成します。
- Azure Portal で、Azure Storage アカウントに移動します。
- 左側のナビゲーション メニューの [データ ストレージ] で、[キュー] を選択します。
- [+ Queue] をクリックして、新しいキューを作成します。
- キューの名前を入力します(例:
transfer-notifications)と入力して、[OK] をクリックします。 - 作成したら、Azure キューのアドレスを取得します。通常、アドレスは
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAMEの形式になります。
Azure Queue の Azure Blob Storage イベント通知を有効にする
作成した Azure キューに Blob Storage イベントの通知を送信するように Azure Event Grid を構成します。
- Azure ポータルで、モニタリングする blob ストレージ コンテナを含むストレージ アカウントに移動します。
- 左側のナビゲーション メニューの [Blob サービス] で、[イベント] を選択します。
- [+ イベント サブスクリプション] をクリックします。
イベント サブスクリプションを構成します。
- イベント サブスクリプションの詳細:
- イベント サブスクリプション名(例:
blob-transfer-events)。 - システム トピック名(例:
my-blob-events-topic)。
- イベント サブスクリプション名(例:
- イベントタイプ:
- 次のイベントタイプを選択します。
- Blob Created
- ディレクトリの作成
- Blob の名前変更
- ディレクトリの名前変更
- Blob Tier Changed
- 次のイベントタイプを選択します。
- エンドポイントの詳細:
- エンドポイントのタイプ: [ストレージ キュー] を選択します。
- [エンドポイントを選択] をクリックし、先ほど作成した Azure キューを選択します。
Filters:
- [件名フィルタリングを有効にする] をクリックします。
次のフィルタを [件名が次で始まる] として追加し、通知を特定のコンテナに制限します。
/blobServices/default/containers/AZURE_CONTAINER_NAME/AZURE_CONTAINER_NAME は、Blob Storage コンテナの名前に置き換えます。
(省略可)コンテナ内の特定の接頭辞を持つ BLOB のイベントをフィルタするには、次のようにします。
/blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX
- イベント サブスクリプションの詳細:
[作成] をクリックします。
Azure キューへのアクセスを設定する
Storage Transfer Service には、Azure キューにアクセスしてメッセージを読み取る権限が必要です。認証には、共有アクセス署名(SAS)トークンまたはフェデレーション ID を使用できます。
SAS トークン
SAS トークンで認証するの手順に沿って、次の項目を含めます。
- 許可されているサービス: Blob と Queue
- 許可される権限: 読み取り、リスト、処理
フェデレーション ID
連携 ID で認証するの手順に沿って操作します。Azure Storage コンテナへのアクセス権をアプリケーションに付与するだけでなく、Azure キューへのアクセス権も付与する必要があります。これを行うには、Azure キューのアプリケーションに Storage Queue データ メッセージ プロセッサ ロールを追加します。
イベント ストリームを使用して転送ジョブを作成する
Azure キューとイベント通知を構成したら、イベント ストリームを使用して Storage Transfer Service ジョブを作成します。
作成されると、転送ジョブの実行が開始し、イベント リスナーが Azure キューで通知を待機します。ジョブの詳細ページには、1 時間ごとに 1 つのオペレーションが表示されます。このページには、各ジョブで転送されたデータの詳細も表示されます。
Google Cloud コンソール
Google Cloud コンソールで [転送ジョブを作成] ページに移動します。
[ソースタイプ] で、[Azure Blob Storage または Data Lake Storage Gen2] を選択します。
[宛先の種類] で [Google Cloud Storage] を選択します。
[スケジュール モード] で [イベント ドリブン] を選択します。
[イベント ストリーム名] フィールドに、Azure キューのアドレスを入力します。
移行元と移行先の詳細や認証など、転送ジョブの作成に関する残りの手順を通常どおり完了します。
必要に応じて、転送の開始時刻と終了時刻を入力します。時間を指定しない場合、転送はすぐに開始し、手動で停止するまで実行されます。
Google Cloud CLI
gcloud CLI を使用してイベント ドリブン転送ジョブを作成するには、--event-stream-name フラグを指定して gcloud transfer jobs create コマンドを使用します。
gcloud transfer jobs create \
https://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/AZURE_CONTAINER_NAME \
gs://DESTINATION_BUCKET \
--source-creds-file=SOURCE_CREDS_FILE \
--event-stream-name=AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME \
--event-stream-starts=EVENT_STREAM_STARTS \
--event-stream-expires=EVENT_STREAM_EXPIRES
プレースホルダを実際の値に置き換えます。
- AZURE_STORAGE_ACCOUNT_NAME と AZURE_CONTAINER_NAME: Azure Blob Storage アカウント名とコンテナ名。
- DESTINATION_BUCKET: 転送先の Cloud Storage バケット。
- SOURCE_CREDS_FILE: SAS トークンまたはフェデレーション ID 構成を含むマシン上のローカルファイルへの相対パス。
- AZURE_QUEUE_NAME: Azure キューの名前。
- EVENT_STREAM_STARTS: %Y-%m-%dT%H:%M:%S%z 日付 / 時刻形式(例:
2020-04-12T06:42:12+04:00)。設定されていない場合、ジョブは作成ジョブ コマンドの送信が成功すると、実行を開始してイベントをリッスンします。 - EVENT_STREAM_EXPIRES: イベントのリスニングを停止するタイミング。設定されていない場合、ジョブは手動で停止されるまで続行されます。
サポートされているフィールドの一覧については、gcloud transfer jobs create リファレンスをご覧ください。
REST API
TransferJob proto を使用して、イベント ドリブン転送ジョブを定義します。
{
"description": "Test Azure to GCS transfer via event stream.",
"project_id": "PROJECT_ID",
"transfer_spec": {
"azure_blob_storage_data_source": {
"storage_account": "AZURE_STORAGE_ACCOUNT_NAME",
"container": "AZURE_CONTAINER_NAME",
"federated_identity_config": {
"client_id": "CLIENT_ID",
"tenant_id": "TENANT_ID"
}
},
"gcs_data_sink": {
"bucket_name": "DESTINATION_BUCKET"
},
"object_conditions": {
// optional object conditions (include_prefixes, etc)
},
"transfer_options": {}
},
"event_stream": {
"name": "AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAME",
"event_stream_start_time": EVENT_STREAM_START_TIME,
"event_stream_expiration_time": EVENT_STREAM_EXPIRATION_TIME
},
"status": "ENABLED"
}
開始時間フィールドと有効期限フィールドは省略可能です。
event_stream_start_time: イベントのリスニングを開始する時間(YYYY-MM-DDTHH:MM:SSZ形式)。指定しない場合、リスナーはすぐに開始されます。event_stream_expiration_time: イベント ストリーム リスナーの有効期限(YYYY-MM-DDTHH:MM:SSZ形式)。指定しない場合、リスナーは転送ジョブが無効になるか削除されるまで続行されます。