メンチカツには醤油でしょ!!

ITエンジニア徒然 (AWS/Java/JavaScript/Google Spreadsheets/Jenkins/Mac/外部コミュニティ・勉強会レポ)

AWS CLI S3 syncで更新日時が競合した場合の挙動について

AWS CLI便利! S3 syncも便利

Dropboxのhttpホスティング無き今、S3を使っているわけです。

ryoichi0102.hatenablog.com

ちょっとした疑問から課題へ

基本的には、保存や変更のがある度にローカル⇒S3と必ず実行しているのですが
競合した場合どうなるのかななぁ、と。

Dropboxだと、競合したファイルという別名で保存されながら同期されますが
シンプルなコマンドラインでは当然そんなことはしていません。

と、調べていたらなんとこんな記事が。

dev.classmethod.jp

ファイルサイズが一緒の場合はsyncでは同期されないとのことで
--exact-timestamps を指定しないとダメなようです。

$ aws s3 sync --exact-timestamps ./ s3://my-bucket-1.sample.com/

こうですか。

競合の場合は?

タイムスタンプが違った場合に同期されるのはわかったのですが
よくよく試してみると、タイムスタンプが違った場合は
強制コピーする。という仕様のようです。

つまりたとえば、
ローカル⇒サーバーのsyncで、サーバーのタイムスタンプが新しい場合でも
サーバーのファイルは上書きされてしまうのです。

これは盲点。。

しかもメッセージとしても通知されないので気づきにくいです。
せめてタイムスタンプが新しい場合のみ同期するというオプションがあれば良いのですが、syncのリファレンスを参照した所そんな感じのオプションはなさそうです。

sync — AWS CLI 1.11.19 Command Reference

気をつけましょうー