【AWS】s3 syncでdelete・exclude・profileの使い方を解説!初心者向け完全ガイド
生徒
「先生!AWS CLIのs3 syncコマンドって、cpとどう違うんですか?」
先生
「s3 syncは、ディレクトリ同士を丸ごと同期するのに便利なコマンドなんです。差分だけコピーしてくれる点も特徴ですよ。」
生徒
「じゃあ、--deleteとか--excludeとかは何に使うんですか?」
先生
「それぞれ重要な役割があります。今回はdelete、exclude、profileの3つの使い方を詳しく解説していきましょう。」
1. s3 syncとは?cpとの違いを理解しよう
aws s3 syncは、ローカルディレクトリとS3バケット、またはS3バケット同士を同期させるためのコマンドです。s3 cpは単なるコピー操作に対して、s3 syncは「差分を見て転送」するという特徴があります。
つまり、一度アップロードしたファイルを再度アップロードする必要がない場合や、更新されたファイルだけを反映したいときに、syncは非常に便利です。
2. --deleteオプションでS3を完全に同期
--deleteは、ローカルに存在しないファイルをS3側から削除するオプションです。つまり、ローカルの状態にS3を正確に揃えたいときに使います。
aws s3 sync ./local-dir s3://your-bucket-name/dir --delete
このように指定することで、S3側の不要なファイルも削除され、ローカルと同じ構成に保つことができます。ただし、削除は元に戻せないため、事前に--dryrunで確認することをおすすめします。
3. --excludeオプションで不要なファイルを除外
--excludeは、指定したパターンに一致するファイルを同期の対象から除外するためのオプションです。ワイルドカードも利用できます。
aws s3 sync ./project s3://your-bucket-name/project --exclude "*.log"
この例では、.log拡張子を持つファイルがすべて同期対象から除外されます。ビルド時の出力ファイルやキャッシュファイルを除外したいときに非常に便利です。
4. 複数の--excludeと--includeの組み合わせ
--excludeと--includeは組み合わせて使うことで、より柔軟に対象ファイルをコントロールできます。以下のように使用します。
aws s3 sync ./project s3://your-bucket-name/project --exclude "*" --include "*.html"
この場合、全てのファイルを除外(--exclude "*")した上で、HTMLファイルのみを含める(--include "*.html")という意味になります。
5. --profileで複数のAWSアカウントを使い分け
AWS CLIでは--profileオプションを使って、複数のAWSアカウントを簡単に切り替えることができます。事前にaws configure --profileで設定しておく必要があります。
aws s3 sync ./assets s3://my-bucket/assets --profile dev-account
この例では、dev-accountという名前で設定されたプロファイルの認証情報を使ってS3に同期します。開発用、検証用、本番用と複数アカウントを使い分ける際に必須の機能です。
6. S3からローカルに同期する場合
s3 syncは、ローカル→S3だけでなく、S3→ローカルへの同期も可能です。S3に保存されたバックアップをローカルに復元する場合などに役立ちます。
aws s3 sync s3://your-bucket-name/data ./local-data
このようにすることで、S3の内容がローカルのlocal-dataディレクトリに同期されます。--deleteを併用することで、ローカルの古いファイルも削除して正確に一致させることができます。
7. --dryrunで事前に確認しよう
同期操作はファイルの削除や上書きを伴うことがあるため、--dryrunを使って事前に動作を確認することが重要です。
aws s3 sync ./project s3://your-bucket-name/project --delete --dryrun
--dryrunを付けると、実際にはファイルの転送や削除をせずに、何が実行されるかを表示してくれます。安全に運用するための基本的なテクニックです。
8. 特定の拡張子だけ同期したい場合の実例
例えば、画像ファイルだけをS3にアップロードしたい場合、次のように--includeを活用します。
aws s3 sync ./media s3://your-bucket-name/media --exclude "*" --include "*.png" --include "*.jpg"
これで.pngと.jpgだけが同期され、他のファイルは無視されます。静的ファイルや特定のデータだけを対象にしたいときに最適です。
9. よくあるミスとその対処法
- プロファイル名のスペルミス →
aws configure list-profilesで確認 - 対象フォルダの
/の有無 → 末尾スラッシュで挙動が変わるので注意 - --deleteのつけ忘れ → 削除が反映されない
- Windows環境での
--excludeパスの違い → バックスラッシュ\に注意