このドキュメントでは、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 アカウントに移動します。
- 左側のナビゲーション メニューの [データ ストレージ] で、[キュー] を選択します。
- [+ キュー] をクリックして、新しいキューを作成します。
- キューの名前(
transfer-notificationsなど)を入力し、[OK] をクリックします。 - 作成したら、Azure キューのアドレスを取得します。通常、アドレスの形式は
AZURE_STORAGE_ACCOUNT_NAME.queue.core.windows.net/AZURE_QUEUE_NAMEです。
Azure キューの Azure Blob Storage イベント通知を有効にする
作成した Azure キューに blob ストレージ イベントの通知を送信するように Azure Event Grid を構成します。
- Azure portal で、モニタリングする blob ストレージ コンテナを含むストレージ アカウントに移動します。
- 左側のナビゲーション メニューの [Blob サービス] で、[イベント] を選択します。
- [+ イベント サブスクリプション] をクリックします。
イベント サブスクリプションを構成します。
- イベント サブスクリプションの詳細:
- イベント サブスクリプション名 (
blob-transfer-eventsなど)を入力します。 - システム トピック名 (
my-blob-events-topicなど)を入力します。
- イベント サブスクリプション名 (
- イベントタイプ:
- 次のイベントタイプを選択します。
- Blob の作成
- ディレクトリの作成
- Blob の名前変更
- ディレクトリの名前変更
- Blob 階層の変更
- 次のイベントタイプを選択します。
- エンドポイントの詳細:
- エンドポイントのタイプ: [Storage キュー] を選択します。
- [**エンドポイントを選択**] をクリックし、先ほど作成した Azure キューを選択します。
フィルタ:
- [件名フィルタリングを有効にする] をクリックします。
特定のコンテナに通知を制限するには、次のフィルタを [件名で始まる] として追加します。
/blobServices/default/containers/AZURE_CONTAINER_NAME/AZURE_CONTAINER_NAME は、blob ストレージ コンテナの名前に置き換えます。
(省略可)コンテナ内の特定の接頭辞を持つ blob のイベントをフィルタするには、次のようにします。
/blobServices/default/containers/AZURE_CONTAINER_NAME/blobs/BLOB_PREFIX
- イベント サブスクリプションの詳細:
[作成] をクリックします。
Azure キューへのアクセスを設定する
Storage Transfer Service には、Azure キューにアクセスしてメッセージを読み取る権限が必要です。認証には、Shared Access Signature(SAS)トークンまたはフェデレーション ID を使用できます。
SAS トークン
SAS トークンで認証する手順に沿って、次の項目を含めます。
- 許可されるサービス: Blob とキュー
- 許可される権限: 読み取り、リスト、処理
フェデレーション ID
フェデレーション ID で認証する手順に沿って操作します。アプリケーションに Azure Storage コンテナへのアクセス権を付与するだけでなく、Azure キューへのアクセス権も付与する必要があります。これを行うには、Azure キューのアプリケーションに Storage キュー データ メッセージ プロセッサ ロールを追加します。
イベント ストリームを使用して転送ジョブを作成する
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 を使用してイベント ドリブン転送ジョブを作成するには、gcloud transfer jobs create コマンドに --event-stream-name フラグを指定して使用します。
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形式)。指定しない場合、リスナーは転送ジョブが無効になるか削除されるまで続行されます。