Storage Transfer Service は、Amazon S3 API と互換性のあるクラウドまたはオンプレミスのオブジェクト ストレージ システムからの転送をサポートします。
Storage Transfer Service は、データソースに近い VM にデプロイされた転送エージェントを使用して、S3 互換のソースのデータにアクセスします。これらのエージェントは、Docker コンテナで実行され、エージェント プールに属します。エージェント プールは、同じ構成を使用し、データをまとめて並列に移動するエージェントの集合です。
この機能を使用すると、オンプレミスまたはクラウドのオブジェクト ストレージから Cloud Storage に移行できます。データをアーカイブしてオンプレミスのストレージ容量を解放したり、ビジネスの継続性を目的として Google Cloud にデータを複製できます。また、分析と処理を行うために Google Cloud にデータを転送することもできます。AWS S3 から Cloud Storage に移行する場合、この機能を使用すると、Google Cloud へのネットワーク ルートを制御できます。これにより、送信データ転送の費用が大幅に削減されます。
準備
転送を構成する前に、次の手順を行います。
- ユーザー アカウントに Storage Transfer 管理者のロールを付与します。
- gcloud CLI をインストールします。
- 転送エージェント マシンに Docker をインストールするなど、ファイル システム転送の要件を満たします。
エージェント ID 接頭辞、エージェント プール名、転送ジョブ名に、個人を特定できる情報(PII)やセキュリティ データなどの機密情報を含めないでください。リソース名は、他の Google Cloud リソースの名前に伝達され、プロジェクト外部の Google 内部システムに公開される場合があります。
ソースの認証情報を取得する
S3 互換ソースからの転送には、アクセスキー ID とシークレット アクセスキーが必要です。
この手順は、ストレージ プロバイダによって異なります。
ID とキーが生成されるアカウントには、次のいずれかの権限が必要です。
- ソース オブジェクトに対する読み取り専用権限(ソースのオブジェクトを削除しない場合)。
- ソース オブジェクトに対する完全アクセス権(転送中にソース側のオブジェクトを削除することを選択した場合)。
アカウントを作成して権限を追加し、アクセスキー ID とシークレット アクセスキーをダウンロードしたら、ID とキーを安全な場所に保管してください。
宛先バケットへのアクセスを構成する
シンクへのアクセスを構成する: Cloud Storage の手順に沿って、宛先バケットへのアクセスを構成します。
エージェント プールの作成
エージェント プール名に、個人を特定できる情報(PII)やセキュリティ データなどの機密情報を含めないでください。リソース名は、他の Google Cloud リソースの名前に伝達され、プロジェクト外部の Google 内部システムに公開される場合があります。エージェント プールを作成するには:
Google Cloud コンソール
Google Cloud コンソールで、[エージェント プール] ページに移動します。
[エージェント プール] ページが開き、既存のエージェント プールが一覧表示されます。
[別のプールを作成] をクリックします。
プールに名前を付け、必要に応じて説明を入力します。
プール全体に適用される帯域幅上限を設定できます。指定された帯域幅(MB/秒)は、プール内のすべてのエージェント間で分割されます。詳細については、ネットワーク帯域幅の管理をご覧ください。
[作成] をクリックします。
REST API
projects.agentPools.create を使用します。
POST https://storagetransfer.googleapis.com/v1/projects/PROJECT_ID/agentPools?agent_pool_id=AGENT_POOL_ID
ここで
PROJECT_ID
: エージェント プールを作成するプロジェクト ID。AGENT_POOL_ID
: 作成するエージェント プール ID。
エージェント プールが Creating
状態で 30 分以上停止している場合は、エージェント プールを削除して再作成することをおすすめします。
エージェント プールが Creating
状態にあるときに、プロジェクトから必要な Storage Transfer Service の権限を取り消すと、サービスで誤った動作が発生します。
gcloud CLI
gcloud
コマンドライン ツールでエージェント プールを作成するには、[gcloud transfer agent-pools create
][agent-pools-create] を実行します。
gcloud transfer agent-pools create AGENT_POOL
次のオプションがあります。
AGENT_POOL は、このプールの一意の永続的な識別子です。
--no-async
を使用すると、プールが作成されるまでターミナル内の他のタスクがブロックされます。指定しない場合は、プールの作成が非同期で実行されます。--bandwidth-limit
には、このプールのエージェントが利用できる帯域幅の量を MB/秒単位で定義します。帯域幅の上限はプール内のすべてのエージェントに適用されます。この上限により、プールの転送ワークロードによって、帯域幅を共有するほかのオペレーションが中断される事態を防ぐことができます。たとえば、「50」と入力すると、帯域幅の上限が 50 MB/秒に設定されます。このフラグを指定しないと、このプールのエージェントは使用可能なすべての帯域幅を使用します。--display-name
は、このプールを識別するための名前です。この名前は変更可能です。プールの一意の完全なリソース名に一致しない詳細情報を含めることもできます。
転送エージェントをインストールする
転送エージェントは、Storage Transfer Service を介してソースからの転送アクティビティを調整するソフトウェア エージェントです。これらは、ソースデータにアクセスできるシステムにインストールする必要があります。
gcloud CLI
gcloud
CLI を使用して S3 互換のソースで使用するエージェントをインストールするには、transfer agents install
コマンドを使用します。
アクセス認証情報は、AWS_ACCESS_KEY_ID
および AWS_SECRET_ACCESS_KEY
の値として環境変数に指定するか、システムの構成ファイルにデフォルトの認証情報として保存する必要があります。
export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME
サービス アカウント キーを使用してエージェントを実行するには、--creds-file
オプションを使用します。
gcloud transfer agents install --pool=POOL_NAME \
--creds-file=/relative/path/to/service-account-key.json
転送エージェントの実行に使用するユーザーまたはサービス アカウントに、次の IAM ロールを付与する必要があります。
- プロジェクトに対する Storage Transfer エージェント(
roles/storagetransfer.transferAgent
)。手順については、IAM ドキュメントの単一のロールを付与するをご覧ください。 - プロジェクトまたは宛先バケット、あるいはエージェント ベースの転送権限に記載の権限を含むカスタムロールに対するストレージ オブジェクト管理者(
roles/storage.objectAdmin
)。手順については、バケットレベルのポリシーにプリンシパルを追加するをご覧ください。
転送ジョブを作成する
Google Cloud コンソール
S3 互換ソースから Cloud Storage バケットへの転送を作成するには、次の手順を行います。
Google Cloud コンソールの [Storage Transfer Service] ページに移動します。
[転送ジョブを作成] をクリックします。[転送ジョブの作成] ページが表示されます。
[ソースタイプ] に [S3-compatible object storage] を選択します。宛先は Google Cloud Storage にする必要があります。
[次のステップ] をクリックします。
ソースを構成する
この転送に必要な情報を指定します。
この転送に構成したエージェント プールを選択します。
エンドポイントに対応するバケット名を入力します。たとえば、データが次の場所に存在するとします。
https://example.com/bucket_a
「
bucket_a
」と入力します。エンドポイントを入力します。プロトコル(
http://
またはhttps://
)は含めないでください。次に例を示します。example.com
この転送の任意の属性を指定します。
リクエストの署名に使用する署名のリージョンを入力します。
このリクエストの署名プロセスを選択します。
アドレス指定スタイルを選択します。これにより、バケット名がパススタイル(
https://example.com/bucket-name/key-name
など)で提供されるのか、仮想ホストタイプ(https://bucket-name.example.com/key-name
)で提供されるのかが決まります。詳しくは、Amazon のドキュメントのバケットの仮想ホスティングをご覧ください。ネットワーク プロトコルを選択します。
使用する Listing API のバージョンを選択します。詳細については、ListObjectsV2 と ListObjects のドキュメントをご覧ください。
[次のステップ] をクリックします。
シンクを構成する
[バケットまたはフォルダ] フィールドに、ソースバケットと(必要に応じて)フォルダ名を入力するか、[参照] をクリックして、現在のプロジェクトにある既存のバケットリストからバケットを選択します。新しいバケットを作成するには、[新しいバケットを作成] をクリックします。
[次のステップ] をクリックします。
転送の設定を選択する
[説明] フィールドに、転送の説明を入力します。ジョブを区別できるように、意味のある一意の説明を入力することをおすすめします。
[メタデータのオプション] で、デフォルトのオプションを使用するか、[オプションを表示して選択する] をクリックして、サポートされているすべてのメタデータの値を指定します。詳細については、メタデータの保持をご覧ください。
[上書きの条件] で、次のいずれかを選択します。
異なる場合: ソースファイルの名前が同じで ETag またはチェックサムの値が異なる場合、宛先ファイルを上書きします。
常に: ソースファイルが同じ名前の場合、同一であっても常に宛先ファイルを上書きします。
[削除のタイミング] で、次のいずれかを選択します。
なし: ソースと宛先のどちらからもファイルを削除しません。
転送後にソースからファイルを削除する: 転送先に移行した後、ソースからファイルを削除します。
転送元にもないファイルを転送先から削除する: 転送先の Cloud Storage バケット内のファイルが転送元にもない場合は、Cloud Storage バケットからファイルを削除します。
このオプションにより、宛先の Cloud Storage バケットが移行元と完全に一致することが保証されます。
[通知オプション] で、Pub/Sub トピックと通知するイベントを選択します。詳細については、Pub/Sub 通知をご覧ください。
[次のステップ] をクリックします。
転送のスケジュールを設定する
転送は 1 回だけ実行するようにスケジュールすることも、定期的な転送を構成することもできます。
[作成] をクリックして転送を作成します。
gcloud CLI
gcloud
CLI を使用して転送を作成する前に、Cloud Storage シンクへのアクセスを構成するの手順を行ってください。
gcloud
CLI を使用して、S3 互換ソースから Cloud Storage バケットへの転送を作成するには、次のコマンドを使用します。
gcloud transfer jobs create s3://SOURCE_BUCKET_NAME gs://SINK_BUCKET_NAME \
--source-agent-pool=POOL_NAME \
--source-endpoint=ENDPOINT \
--source-signing-region=REGION \
--source-auth-method=AWS_SIGNATURE_V2 | AWS_SIGNATURE_V4 \
--source-request-model=PATH_STYLE | VIRTUAL_HOSTED_STYLE \
--source-network-protocol=HTTP | HTTPS \
--source-list-api=LIST_OBJECTS | LIST_OBJECTS_V2
次のフラグは必須です。
--source-agent-pool
は、この転送に使用するエージェント プールの名前です。--source-endpoint
には、ストレージ システムのエンドポイントを指定します。例:s3.us-east.example.com
。正しい形式についてはプロバイダにお問い合わせください。
残りのフラグは省略可能です。
--source-signing-region
には、リクエストに署名するリージョンを指定します。ストレージ プロバイダが署名のリージョンを必要としない場合は、このフラグを省略します。--source-auth-method
には、使用する認証方法を指定します。有効な値はAWS_SIGNATURE_V2
またはAWS_SIGNATURE_V4
です。詳しくは、Amazon の SigV4 と SigV2 のドキュメントをご覧ください。--source-request-model
には、使用するアドレス指定スタイルを指定します。有効な値はPATH_STYLE
またはVIRTUAL_HOSTED_STYLE
です。パススタイルにはhttps://s3.REGION.example.com/BUCKET_NAME/KEY_NAME
の形式を使用します。仮想ホストスタイルでは、https://BUCKET_NAME.s3.REGION.example.com/KEY_NAME の形式を使用します。--source-network-protocol
には、エージェントがこのジョブに使用するネットワーク プロトコルを指定します。有効な値はHTTP
またはHTTPS
です。--source-list-api
には、バケットからオブジェクトを返すための S3 Listing API のバージョンを指定します。有効な値はLIST_OBJECTS
またはLIST_OBJECTS_V2
です。詳しくは、Amazon の ListObjectsV2 と ListObjects のドキュメントをご覧ください。
その他の転送ジョブ オプションについては、gcloud transfer jobs create --help
を実行するか、gcloud
リファレンス ドキュメントをご覧ください。
REST API
REST API を使用して転送を作成する前に、Cloud Storage シンクへのアクセスを構成するの手順を行ってください。
REST API を使用して S3 互換ソースから転送を作成するには、次のような JSON オブジェクトを作成します。
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
...
"transferSpec": {
"source_agent_pool_name":"POOL_NAME",
"awsS3CompatibleData": {
"region":"us-east-1",
"s3Metadata":{
"protocol": "NETWORK_PROTOCOL_HTTPS",
"requestModel": "REQUEST_MODEL_VIRTUAL_HOSTED_STYLE",
"authMethod": "AUTH_METHOD_AWS_SIGNATURE_V4"
},
"endpoint": "example.com",
"bucketName": "BUCKET_NAME",
"path": "PATH",
},
"gcsDataSink": {
"bucketName": "SINK_NAME",
"path": "SINK_PATH"
},
"transferOptions": {
"deleteObjectsFromSourceAfterTransfer": false
}
}
}
フィールドの説明については、AwsS3CompatibleData
API リファレンスをご覧ください。
クライアント ライブラリ
クライアント ライブラリを使用して転送を作成する前に、Cloud Storage シンクへのアクセスを構成するの手順を行ってください。
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 の認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
よくある質問
S3 互換ストレージからの移行には費用がかかりますか?
S3 互換ストレージからの転送の場合、エージェントを必要とする Storage Transfer Service の転送の料金は発生しません。その他の料金については、料金をご覧ください。転送元のクラウド プロバイダからの送信データ転送料金とオペレーションの料金が発生することもあります。
Cloud Logging は S3 互換ストレージ転送をサポートしていますか?
はい。Storage Transfer Service の Cloud Logging の手順に沿って、転送で Cloud Logging を有効にできます。
マニフェストを使用した転送はサポートされていますか?
はい。マニフェスト ファイルは S3 互換転送でサポートされています。
ジョブの開始後にオブジェクトをソースバケットに追加した場合、そのオブジェクトは転送されますか?
Storage Transfer Service は、ソースバケットでリスト オペレーションを実行し、宛先との差分を計算します。新しいオブジェクトが追加されたときにリスト オペレーションがすでに完了している場合、そのオブジェクトは次の転送までスキップされます。
Storage Transfer Service は、S3 互換のソースでチェックサム マッチングを行いますか?
Storage Transfer Service は、ソースから返されるチェックサム データを使用します。S3 互換ストレージの場合、Storage Transfer Service はオブジェクトの Etag がオブジェクトの MD5 ハッシュであると想定します。
ただし、S3 マルチパート アップロードを使用して S3 互換ストレージに転送されたオブジェクトには、MD5 ETag がありません。この場合、Storage Transfer Service はファイルサイズを使用して、転送されたオブジェクトを検証します。
S3 互換ストレージからの転送では、どのようなスループットを達成できますか?
転送エージェントを増やすことで、転送スループットをスケーリングできます。フォールト トレランスと 10 Gbps 未満のパイプを使用する際は、3 つのエージェントを使用することをおすすめします。さらにスケーリングするには、エージェントを追加します。転送の進行中に、エージェントを追加または削除できます。
Amazon S3 から Cloud Storage にデータを転送するには、転送エージェントをどこにデプロイすればよいですか?
Amazon EC2 または EKS のエージェントをバケットと同じリージョン内にインストールできます。最も近いリージョンの Google Cloud でエージェントを実行することもできます。