概要
S3 Syncを使用する機会があったので、改めて理解を整理してみました。
S3 Syncとは
s3 sync コマンドはバケットとディレクトリの内容、または 2 つのバケットの内容を同期します。
通常、s3 sync は欠落しているか古くなったファイルやオブジェクトを、ソースとターゲットの間でコピーします。
cpとsyncの違いは?
- cpはファイルをコピーするコマンド
- syncはディレクトリの更新差分をコピーする(同期する) コマンド
やってみる
基本的なコマンド
$ aws s3 sync files/ s3://kurono-test-sync/
S3内ファイル確認コマンド
$ aws s3 ls --recursive s3://kurono-test-sync --summarize
ローカルファイルを削除して実行
宛先のファイル削除コマンド
$ aws s3 sync files/ s3://kurono-test-sync/ --delete
宛先からもファイルを削除するには--delete
オプションを付けて実行する必要がある。
--delete(ブール値)
宛先には存在するがソースには存在しないファイルは、同期中に削除されます
S3 Syncが更新されたとみなす条件
以下の様な、条件があるため注意が必要です。
- 指定されたバケットとプレフィックスの下にローカルファイルが存在しません。
- ローカルファイルのサイズは、s3オブジェクトのサイズとは異なります。
- ローカルファイルの最終変更時刻は、s3オブジェクトの最終変更時刻よりも新しいです。
上記をコントロールする方法
-
--size-only(ブール値)
各キーのサイズを、ソースから宛先に同期するかどうかを決定するために使用される唯一の基準にします。 -
--exact-timestamps(ブール値)
S3からローカルに同期する場合、タイムスタンプが完全に一致する場合にのみ、同じサイズのアイテムは無視されます。
まとめ
- 今回は、ローカル→S3で試しましたが、S3→S3も実行できるので機会があれば試してみたいです。
-
--dryrun
で実行前に確認を入れるとより良いかと思います。