gsutil で GCS から S3 にファイルを移動したい


準備

サービスアカウント用意

該当するGCSにアクセスできるサービスアカウントを用意する。

鍵ファイル(JSON)を作成しダウンロード。/tmp にでも置いとく。

cp ~/Downloads/test-gcs-to-s3-key.json /tmp

Botoファイル用意

gsutil コマンドに AWS のクレデンシャルを読ませる必要があるので Boto ファイルを用意。
これも /tmp にでも置いておく。

less /tmp/.boto
[Credentials]
aws_access_key_id = xxx
aws_secret_access_key = yyy

[s3]
use-signv4=True
host=s3.ap-northeast-1.amazonaws.com

言わずもがな上記のクレデンシャルは移動先のS3へアクセスできる権限が必要。
発行手順は割愛。

やってみる

GCPにログイン

サービスアカウントの鍵を使ってGCPにログイン。

gcloud auth activate-service-account --key-file /tmp/test-gcs-to-s3-key.json
gcloud config set project my-project

gsutil 実行

BOTO構成ファイルのパスを環境変数に設定して gsutil コマンドを打てばオケ。

export BOTO_CONFIG=/tmp/.boto

gsutil -m rsync -rdc \
  gs://my-gcs-bucket/subdir \
  s3://my-s3-bucket/subdir

おわり。