7
7

More than 3 years have passed since last update.

s3 sync コマンドを使ってS3バケット間を同期する

Posted at

AWS CLI にはS3 のファイルコマンドが用意されています。ありがたい!
s3 sync コマンドを使ってS3バケット間を同期するコマンドをご紹介します。

やりたいこと

  • テスト用バケットのオブジェクトを本番用バケットにすべて同期したい
  • テスト用バケットに存在せず、本番用バケットに存在するオブジェクトは削除したい

aws-s3copy.png

AWS CLI ってなに

AWS CLI = AWS Command Line Interface
コマンドを使ってAWSサービスと対話できるオープンソースツールです。

もっとくわしく知りたい方には、AWS CLI のBlackBelt がおすすめです。

利用可能なOS

  • Windows
  • Mac
  • Linux
  • Amazon Linux ※

※ EC2インスタンス作成時に Amazon Linux のAMI を選択すれば、
 あらかじめプレインストールされています

CLI はこちらからインストールできます。

AWS CLI を使うと何がうれしいのか

AWSコンソールから画面をポチポチやる作業をコマンド一発で自動化できたら楽ですよね。そういうことや!

sync コマンド

aws s3 sync s3://[同期元のバケット名] s3://[同期先のバケット名]

※ 指定するのはバケット名です。
 私は最初誤ってARN(リソース名)を指定してしまい、ちょっと時間をロスしました。。

▼ 今回使ったコマンド

aws s3 sync s3://[同期元のバケット名] s3://[同期先のバケット名] --exact-timestamps --delete

今回使ったオプションの詳細については以下の通りです。

オプション 詳細
--exact-timestamps S3からローカルに同期するとき、同じサイズのアイテムは、タイムスタンプが正確に一致したときだけ無視されます。デフォルトの動作は、ローカルのバージョンがS3のバージョンよりも新しいものでない限り、同じサイズのアイテムを無視します。
--delete コピー先には存在するが、コピー元には存在しないファイルは同期中に削除されます。

sync をdryrun したいとき

aws s3 sync s3://[同期元のバケット名] s3://[同期先のバケット名] --dryrun
オプション 詳細
--dryrun 指定したコマンドを実際に実行せずに、指定したコマンドを使って実行されるであろう操作を表示します。

オプションの詳細はリファレンスをDeepLで翻訳して載せました。
他にもさまざまなオプションがあるので、一読してみるといいかもです!

参考

AWS コマンドラインインターフェイス(CLI: AWSサービスを管理する統合ツール)| AWS
S3 sync で s3からファイルを同期させる時の注意点 | Developers.IO
sync — AWS CLI 1.18.61 Command Reference

7
7
0

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
7
7