継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

コンテナを使って gsutil で S3 のデータを GCS に同期してみる

タダです.

S3 から GCP のストレージサービスである GCS に対してオブジェクトを同期させたいことがあり,定期実行させるし Fargate に登録して処理させることにしたのでその設定をまとめていきます.

S3 から GCS への同期手法

S3 から GCS への同期手法としてgsutilを使ってみました.ZOZO Technologies さんのブログでも出ていたので自分もこの記事で初めて知り,AWS CLI の s3 コマンドのようにコマンドラインで GCS へアクセスできるツールだと感じました.データの同期だけをしたいだけなのでこのツールを使おうと思い,ZOZO Technologies さん同様にrsyncコマンドでやってます.

cloud.google.com

cloud.google.com

関連記事

techblog.zozo.com

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ファイルへの定義をスクリプト実行時のみで設定してタスクを実行するようにして同期ができるようになりました.

cloud.google.com

まとめ

S3 から GCS にデータ同期をする時にコンテナでやってみたのでその内容をまとめてみました.普段 AWS をよく触るのですが,GCP も触ってみて初めてばかりで新鮮な経験ができました.同期したデータを BigQuery にも使い始めてみたのですが,課題がでてきているので今度は BigQuery の記事をかけたらなと思います.