aws s3 sync でAmazon S3のバケット内のデータをローカルに同期する

More than 1 year has passed since last update.

AWSコマンドラインインターフェイスを使うと簡単にAmazon S3のバケットにファイルをアップロードしたり、逆にバケットのデータをローカルにまるごとバックアップしたりすることができます。

事前準備

  1. 上記サイトの指示にしたがってインストールしておく。
  2. IAMのアクセスキーを準備しておく。
  3. aws configコマンドを実行してアクセスキーなど設定しておく。

詳しくは【初心者向け】MacユーザがAWS CLIを最速で試す方法とかドキュメントとかを参照。

コマンドの使い方

  1. aws s3 sync <ローカルパス> <S3パス> [options]
  2. aws s3 sync <S3パス> <ローカルパス> [options]
  3. aws s3 sync <S3パス> <S3パス> [options]

の3種類パターンがあります。左に書いた方から右に書いた方へデータをコピーします。
オプションについてはドキュメント参照

次のコマンドはローカルからS3へのアップロードを行います。

aws s3 sync . s3://mybucket

ローカルに test.txt, test2.txt があるとしたら、test.txt が s3://mybucket/test.txt へ、test2.txt が s3://mybucket/test2.txt へ、それぞれアップロードされます。
ローカルファイルのサイズとS3上のオブジェクトのサイズが異なる場合、ローカルファイルの最終更新日がS3上のオブジェクトより新しい場合、S3上のオブジェクトが存在しない場合にアップロードが行われます。


次のコマンドはS3からローカルへのダウンロードを行います。

aws s3 sync s3://mybucket .

S3上に test.txt, test2.txt があるとしたら、s3://mybucket/test.txt が test.txt へ、s3://mybucket/test2.txt が test2.txt へ、それぞれダウンロードされます。
ローカルファイルのサイズとS3上のオブジェクトのサイズが異なる場合、S3上のオブジェクトの最終更新日がローカルファイルより新しい場合、ローカルファイルが存在しない場合にダウンロードが行われます。


次のコマンドはS3バケット間でオブジェクトをコピーします。

aws s3 sync s3://mybucket s3://mybucket2

この結果、s3://mybucket/test.txt が s3://mybucket2/test.txt へ、s3://mybucket/test2.txt が s3://mybucket2/test2.txt へ、それぞれコピーされます。


ここまでのそれぞれのコマンドは、ファイルを削除することはできません。
--delete オプションを付けると、コピー元からいなくなった宛先にのみ存在するファイル・オブジェクトを削除します。

aws s3 sync . s3://mybucket --delete

--exclude オプションを付けると、該当するパスをsync処理の対象外とします。
例えばJPEG画像はコピーしたくない場合は次のようにします。

aws s3 sync . s3://mybucket --exclude "*.jpg"

例えば次のようにすると、another/ を含むパスはコピーしません。

aws s3 sync s3://mybucket/ . --exclude "*another/*"

詳しくはドキュメントを読んでね。