LoginSignup
93

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-02-13

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/*"

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93