エンジニアはこわくない

好きなように書く

aws-cliを使ってs3のバケット間同期をしてみる


スポンサーリンク

f:id:tsujitaku50:20170121194543p:plain

みなさんのプロジェクトではs3を使用していますか?

画像や音声などをs3で管理しているプロジェクトも多いと思います。

僕がいま所属しているプロジェクトでもs3を使用していて

そのときにバケット間同期をする必要があり、aws-cliを使って同期しています。

メモがてらブログに書いておこうと思います。

github

余談ですがaws-cliOSSなので気が向いたら見ておいてもいいかもしれません。

(pytonで書かれてるんですね。。。golangだったらプルリクでも送ろうかと思ったのですが)

インストール方法などはREADMEに書いてあります。

github.com

差分反映

実際にバケット間の同期を行うにはsyncコマンドを使用すれば実行できます。

以下のような感じです。

aws s3 sync s3://同期元のバケット名 s3://同期先のバケット名

差分確認

バケット間の差分確認は--dryrunオプションを使用します。

差分反映ではないので、実際に同期されないので安心して使えます。

aws s3 sync --dryrun sync s3://同期元のバケット名 s3://同期先のバケット名

個別反映

バケット間の同期ではなく、ファイル1つだけ差分反映したい場合にはcpコマンドを使用します。

aws s3 cp s3://同期元バケット名/同期元ファイル名 s3://同期先バケット名/同期先ファイル名

deleteオプション

aws-cliには様々なオプションがあります。

僕がオプションの中で1つだけ実際に使っているのがあります。

それが--deleteです。

このオプションは「同期元のファイルで削除したファイルを同期先でも削除したい」ときに設定します。

つまりバケット間を完全同期したいときに使用するコマンドですね。

僕がいるプロジェクトではバケット間で完全同期したいので常に--deleteオプションを付けています。

まとめ

aws-cliをjenkinsなどで定期実行するような設定にしておけば、より便利になるんじゃないかと思います。

おわり!!