AWSコマンドラインインターフェイスを使うと簡単にAmazon S3のバケットにファイルをアップロードしたり、逆にバケットのデータをローカルにまるごとバックアップしたりすることができます。
事前準備
- 上記サイトの指示にしたがってインストールしておく。
- IAMのアクセスキーを準備しておく。
-
aws config
コマンドを実行してアクセスキーなど設定しておく。
詳しくは【初心者向け】MacユーザがAWS CLIを最速で試す方法とかドキュメントとかを参照。
コマンドの使い方
aws s3 sync <ローカルパス> <S3パス> [options]
aws s3 sync <S3パス> <ローカルパス> [options]
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/*"
詳しくはドキュメントを読んでね。