概要

S3 Syncを使用する機会があったので、改めて理解を整理してみました。

S3 Syncとは

s3 sync コマンドはバケットとディレクトリの内容、または 2 つのバケットの内容を同期します。
通常、s3 sync は欠落しているか古くなったファイルやオブジェクトを、ソースとターゲットの間でコピーします。

aws s3 名前空間で高レベルの Amazon S3 コマンドを使用して、AWS Command Line Interface (AWS CLI) でバケットとオブジェクトを管理します。

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で実行前に確認を入れるとより良いかと思います。

–>

全文はこちら

S3 Syncに入門してみる
著者:@kurono