Storage Transfer Service は、AWS または Google Cloud のイベント通知をリッスンし、ソースのロケーションで追加または更新されたデータを自動的に転送できます。AWS S3 または Cloud Storage から Cloud Storage へのイベント ドリブン転送がサポートされています。
イベント ドリブン転送は、Amazon SQS for AWS S3 ソースに送信された Amazon S3 イベント通知をリッスンします。Cloud Storage ソースは Pub/Sub サブスクリプションに通知を送信します。
イベント ドリブン転送のメリット
イベント ドリブン転送は、ソースバケットに対する変更をリッスンするため、更新がほぼリアルタイムで宛先にコピーされます。Storage Transfer Service はソースに対して list オペレーションを実行する必要がないため、時間とコストを節約できます。
次のような用途があります。
イベント ドリブン分析: AWS から Cloud Storage にデータを複製して、分析と処理を実行します。
Cloud Storage レプリケーション: Cloud Storage バケット間でオブジェクトの非同期の自動レプリケーションを有効にします。
Storage Transfer Service によるイベント ドリブン転送は、データのコピーを別のバケットに作成する通常の Cloud Storage レプリケーションとは異なります。
これには、次のような利点があります。
- 開発データと本番環境のデータを別々の Namespace に保存する。
- 元のバケットへのアクセス権を付与せずにデータを共有する。
- 別の大陸、またはデュアルリージョンとマルチリージョンのストレージでカバーされないエリアにバックアップする。
DR / HA 設定: オブジェクトを数分以内にソースからバックアップの宛先に複製します。
- クロスクラウド バックアップ: Cloud Storage に AWS S3 のバックアップのコピーを作成します。
- クロスリージョンまたはプロジェクト間のバックアップ: 別のリージョンまたはプロジェクトに Cloud Storage バケットのコピーを作成します。
ライブ マイグレーション: 1 回限りのバッチ移行のフォローアップとして、イベント ドリブン転送により、ダウンタイムの短い移行を実現できます(数分程度のダウンタイム)。
Cloud Storage からのイベント ドリブン転送を設定する
Cloud Storage からのイベント ドリブン転送では、Pub/Sub 通知を使用して、ソースバケット内のオブジェクトが変更または追加されたタイミングを確認します。オブジェクトの削除は検出されません。転送元でオブジェクトを削除しても、転送先バケット内の関連付けられているオブジェクトは削除されません。
権限を構成する
プロジェクトの Storage Transfer Service サービス エージェントの名前を確認します。
googleServiceAccounts.get
リファレンス ページに移動します。[Try this method] というインタラクティブ パネルが開きます。
パネルの [Request parameters] にプロジェクト ID を入力します。ここで指定するプロジェクトは Storage Transfer Service の管理に使用しているプロジェクトで、これは、ソースバケットのプロジェクトとは異なる場合があります。
[実行] をクリックします。
サービス エージェントのメールアドレスが
accountEmail
の値として返されます。この値をコピーします。サービス エージェントのメールアドレスは
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
の形式です。Pub/Sub Subscriber
ロールを Storage Transfer Service サービス エージェントに付与します。Cloud コンソール
Google Cloud コンソールによるアクセス制御の手順で、Storage Transfer Service サービスに
Pub/Sub Subscriber
ロールを付与します。このロールは、トピック、サブスクリプション、プロジェクト レベルで付与できます。gcloud
CLIポリシーの設定の手順で、次のバインディングを追加します。
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com" }
Pub/Sub を構成する
Cloud Storage で Pub/Sub の前提条件を満たしていることを確認します。
Cloud Storage の Pub/Sub 通知を構成します。
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME
トピックに pull サブスクリプションを作成します。
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME --ack-deadline=300
転送ジョブを作成する
REST API または Google Cloud コンソールを使用して、イベントベースの転送ジョブを作成できます。
転送ジョブ名に、個人を特定できる情報(PII)やセキュリティ データなどの機密情報を含めないでください。リソース名は、他の Google Cloud リソースの名前に伝達され、プロジェクト外部の Google 内部システムに公開される場合があります。
Cloud コンソール
Google Cloud コンソールで [転送ジョブを作成] ページに移動します。
転送元と転送先の両方で「Cloud Storage」を選択します。
[スケジュール モード] として [イベント ドリブン] を選択し、[次のステップ] をクリックします。
この転送の転送元バケットを選択します。
[イベント ストリーム] セクションで、サブスクリプション名を入力します。
projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
必要に応じてフィルタを定義し、[次のステップ] をクリックします。
この転送の転送先バケットを選択します。
必要に応じて、転送の開始時刻と終了時刻を入力します。時間を指定しない場合、転送はすぐに開始し、手動で停止するまで実行されます。
転送オプションを指定します。詳細については、転送の作成ページをご覧ください。
[作成] をクリックします。
作成されると、転送ジョブの実行が開始し、イベント リスナーが Pub/Sub サブスクリプションの通知を待機します。ジョブの詳細ページには、1 時間ごとにオペレーションが 1 つ表示されます。このページには、各ジョブで転送されたデータの詳細も表示されます。
REST
REST API を使用してイベント ドリブン転送を作成するには、次の JSON オブジェクトを transferJobs.create エンドポイントに送信します。
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "gcsDataSource" { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
eventStreamStartTime
と eventStreamExpirationTime
は省略可能です。開始時間を省略すると、転送がすぐに開始します。終了時間を省略すると、手動で停止するまで転送が続行されます。
クライアント ライブラリ
Go
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Go API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Java API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Node.js API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Python API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
AWS S3 からのイベント ドリブン転送を設定する
AWS S3 からのイベント ドリブン転送では、Amazon Simple Queue Service(SQS)からの通知を使用して、ソースバケットのオブジェクトが変更または追加されたタイミングを確認します。 オブジェクトの削除は検出されません。転送元でオブジェクトを削除しても、転送先バケット内の関連付けられているオブジェクトは削除されません。
SQS キューを作成する
AWS コンソールで [Simple Queue Service] ページに移動します。
[Create queue] をクリックします。
このキューの名前を入力します。
[Access policy] セクションで、[Advanced] を選択します。JSON オブジェクトが表示されます。
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Allow", "Principal": { "AWS": "01234567890" }, "Action": [ "SQS:*" ], "Resource": "arn:aws:sqs:us-west-2:01234567890:test" } ] }
AWS
とResource
の値はプロジェクトごとに一意です。表示された JSON から
AWS
とResource
の特定の値を次の JSON スニペットにコピーします。{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "RESOURCE", "Condition": { "StringEquals": { "aws:SourceAccount": "AWS" }, "ArnLike": { "aws:SourceArn": "S3_BUCKET_ARN" } } } ] }
上記の JSON 内のプレースホルダの値は次の形式です。
- AWS は、アマゾン ウェブ サービス プロジェクトを表す数値です。例:
"aws:SourceAccount": "1234567890"
- RESOURCE は、このキューを識別する Amazon Resource Number(ARN)です。例:
"Resource": "arn:aws:sqs:us-west-2:01234567890:test"
- S3_BUCKET_ARN は、ソースバケットを識別する ARN です。例:
"aws:SourceArn": "arn:aws:s3:::example-aws-bucket"
バケットの ARN は、AWS コンソールのバケットの詳細ページの [Properties] タブで確認できます。
- AWS は、アマゾン ウェブ サービス プロジェクトを表す数値です。例:
[Access policy] セクションに表示された JSON を上で更新した JSON に置き換えます。
[Create queue] をクリックします。
完了したら、キューの Amazon Resource Name(ARN)をメモします。ARN の形式は次のとおりです。
arn:aws:sqs:us-east-1:1234567890:event-queue"
S3 バケットで通知を有効にする
AWS コンソールで [S3] ページに移動します。
[Buckets] リストで、ソースバケットを選択します。
[Properties] タブをクリックします。
[Event notifications] で [Create event notification] をクリックします。
このイベントの名前を指定します。
[Event types] で、[All object create events] を選択します。
[Destination] で [SQS queue] を選択し、この転送用に作成したキューを選択します。
[Save changes] をクリックします。
権限を構成する
ソースへのアクセスを構成する: Amazon S3 の手順で、アクセスキー ID と秘密鍵を作成するか、フェデレーション ID ロールを作成します。
カスタム権限の JSON を次のように置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME", "arn:aws:s3:::AWS_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
作成したら、次の情報をメモします。
- ユーザーの場合は、アクセスキー ID と秘密鍵をメモします。
- フェデレーション ID ロールの場合は、
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
という形式の Amazon Resource Name(ARN)をメモします。
転送ジョブを作成する
REST API または Google Cloud コンソールを使用して、イベントベースの転送ジョブを作成できます。
Cloud コンソール
Google Cloud コンソールで [転送ジョブを作成] ページに移動します。
転送元のタイプとして Amazon S3、転送先として Cloud Storage を選択します。
[スケジュール モード] として [イベント ドリブン] を選択し、[次のステップ] をクリックします。
S3 のバケット名を入力します。このバケット名は、AWS Management Console に表示される名前です。例:
my-aws-bucket
認証方法を選択し、必要な情報を入力します。必要な情報は前のセクションで作成しました。
前の手順で作成した Amazon SQS のキューの ARN を入力します。これには次のフォーマットが使用されます。
arn:aws:sqs:us-east-1:1234567890:event-queue"
必要に応じてフィルタを定義し、[次のステップ] をクリックします。
転送先の Cloud Storage バケットとパス(省略可)を選択します。
必要に応じて、転送の開始時刻と終了時刻を入力します。時間を指定しない場合、転送はすぐに開始し、手動で停止するまで実行されます。
転送オプションを指定します。詳細については、転送の作成ページをご覧ください。
[作成] をクリックします。
作成されると、転送ジョブの実行が開始し、イベント リスナーが SQS キューで通知を待機します。ジョブの詳細ページには、1 時間ごとに 1 つのオペレーションが表示されます。このページには、各ジョブで転送されたデータの詳細も表示されます。
REST
REST API を使用してイベント ドリブン転送を作成するには、次の JSON オブジェクトを transferJobs.create エンドポイントに送信します。
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "awsS3DataSource" { "bucketName": "AWS_SOURCE_NAME", "roleArn": "arn:aws:iam::1234567891011:role/role_for_federated_auth" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "arn:aws:sqs:us-east-1:1234567891011:s3-notification-queue", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
eventStreamStartTime
と eventStreamExpirationTime
は省略可能です。開始時間を省略すると、転送がすぐに開始します。終了時間を省略すると、手動で停止するまで転送が続行されます。
クライアント ライブラリ
Go
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Go API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Java API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Node.js API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Storage Transfer Service 用のクライアント ライブラリをインストールして使用する方法については、Storage Transfer Service のクライアント ライブラリをご覧ください。詳細については、Storage Transfer Service Python API のリファレンス ドキュメントをご覧ください。
Storage Transfer Service の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。