blog top

その s3 cp、s3 sync でいいかも

みなさんは普段AWS CLIを使っていますか?

私は日常的にこんなコマンドを使っていました。

aws s3 cp ./images s3://my-s3-bucket/images --recursive

これは、手元のimagesディレクトリを全てS3のimagesディレクトリにコピーするという手順です。

一回の実行なら良いのですが、

という課題がありました。

変更されたファイルだけ自動でアップロードされるコマンドがあったらいいのに…

それが今回ご紹介するs3 syncコマンド!使い方は簡単、

aws s3 sync ./images s3://my-s3-bucket/images

とするだけ、--recursiveフラグもいりません。勝手にディレクトリごと同期してくれます。

「同期ってことは、ファイルが勝手に消されたりしそうで怖いです」

安心してください。デフォルトでは勝手に削除されることはありません。

手元で消したファイルをS3側でも消したいときだけ、--deleteフラグをセットすることで実現できます。

「消えるファイルが事前にわからないと不安です」

--dryrunフラグを付けると、どんな変更がされるかを表示してくれます!削除されるファイルがある場合はこのように表示されます:

$ aws s3 sync ./images s3://my-s3-bucket/images --delete --dryrun

(dryrun) delete: s3://my-s3-bucket/images/delete-sample-image.png

感想

いつも時間がかかっていたファイルのアップロードが爆速になって大変快適です。

余談ですが、s3 syncを初めて調べたとき、思いのほかオプションが多くてびっくりしました。