AWS CLI にはS3 のファイルコマンドが用意されています。ありがたい!
s3 sync コマンドを使ってS3バケット間を同期するコマンドをご紹介します。
やりたいこと
- テスト用バケットのオブジェクトを本番用バケットにすべて同期したい
- テスト用バケットに存在せず、本番用バケットに存在するオブジェクトは削除したい
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