タダです.
S3 から GCP のストレージサービスである GCS に対してオブジェクトを同期させたいことがあり,定期実行させるし Fargate に登録して処理させることにしたのでその設定をまとめていきます.
S3 から GCS への同期手法
S3 から GCS への同期手法としてgsutil
を使ってみました.ZOZO Technologies さんのブログでも出ていたので自分もこの記事で初めて知り,AWS CLI の s3 コマンドのようにコマンドラインで GCS へアクセスできるツールだと感じました.データの同期だけをしたいだけなのでこのツールを使おうと思い,ZOZO Technologies さん同様にrsync
コマンドでやってます.
関連記事
Fargate に登録する Dockerfile の作成
Fargate で使う Dockerfile を作っていきます.コンテナイメージは google/cloud-sdk を使いました.このコンテナイメージの中にgsutil
も入っていますし,BigQuery のコマンドのbq
も入っているので使っています.S3 から GCS への同期をするための関連処理をスクリプトにまとめて関連のパッケージをいれていきました.
FROM google/cloud-sdk:alpine RUN apk update && \ apk upgrade && \ apk add --no-cache bash python3 python3-dev py3-pip jq RUN yes|pip3 install awscli COPY xxx.sh xxx.sh RUN chmod +x xxx.sh ENTRYPOINT ["./xxx.sh"]
スクリプトでハマったこと
スクリプトではざっくりと S3 バケットと GCS バケットの情報に加え,プロジェクト名やサービスアカウントの JSON 情報を Secret Manager などに保存していたのを値を取得しつつ,次のようなコマンドを実行しています.
gsutil rsync -r -d s3://S3BUCKET/xxx gs://GCSBUCKET/
ただ gsutil
の実行してもエラーが出て実行ができずハマったのですが,.boto
ファイルが必要でアクセスキーやシークレットアクセスキーの情報を記載しなければいけませんでした..boto
ファイルへの定義をスクリプト実行時のみで設定してタスクを実行するようにして同期ができるようになりました.
まとめ
S3 から GCS にデータ同期をする時にコンテナでやってみたのでその内容をまとめてみました.普段 AWS をよく触るのですが,GCP も触ってみて初めてばかりで新鮮な経験ができました.同期したデータを BigQuery にも使い始めてみたのですが,課題がでてきているので今度は BigQuery の記事をかけたらなと思います.