はじめに
概要
本資料は、AWSのコマンドラインツールである「aws s3 sync」コマンドについて分かりやすく解説します。ローカルディレクトリとS3バケット間、あるいはS3バケット同士で効率よくファイルを同期する方法を中心に、基本的な使い方、よく使うオプション、高度な設定、実装時の注意点までを網羅します。
読者対象
- CLIでファイル同期を自動化したい方
- バックアップやデプロイでS3を使う開発者・運用者
- 初めてaws s3 syncを触る方にも理解できるよう配慮しています。
前提条件
- AWS CLIがインストール済みであること
- 適切な認証情報(アクセスキーやプロファイル)が設定されていること
本資料の目的と構成
本資料は実践的なコマンド例を多く示し、日常的な同期作業を安全かつ効率的に行えるように導きます。次章から順に、基本説明、利点、構文、よく使われるオプション、高度な設定、実装上の注意点へと進みます。
AWS S3 Syncとは
概要
aws s3 syncはAWS CLIが提供するコマンドで、ソースと宛先のファイルを差分だけ同期するために使います。ローカルディレクトリとS3バケット、S3間、S3からローカルへの同期に対応します。大きなファイルや多数のファイルがある場面で効率よく動作します。
代表的な用途
- バックアップや定期的なデータコピー
- ウェブサイトや静的コンテンツのデプロイ
- 別リージョンや別アカウント間のデータ移行
同期の基本動作
コマンドはソースと宛先の一覧を比較し、新規または更新されたファイルだけを転送します。比較は主にファイルサイズと最終更新時刻で行います。既に同一と判定されたファイルは再転送しないため、時間と帯域を節約できます。
簡単な例
- ローカル→S3:
aws s3 sync ./localdir s3://my-bucket - S3→ローカル:
aws s3 sync s3://my-bucket ./backupdir
実行前にAWS認証情報とリージョン設定を整えておくとスムーズです。
補足
オプションで削除やフィルタリングが可能ですが、本章は基本概念の理解に焦点を当てています。詳しいオプションは後の章で扱います。
主な利点
AWS S3 syncは、日常的なファイル同期作業を簡単で効率的にしてくれます。ここでは主な利点を分かりやすく説明します。
帯域幅とコストの削減
変更のないファイルをスキップして転送を行います。たとえば大量の画像やログを更新する際、差分だけアップロードするので通信量と時間を抑えられます。
再帰的な自動同期
指定したフォルダ配下のサブディレクトリも自動で同期します。手作業で個々のフォルダを扱う必要がありません。
柔軟なフィルタリング
–include/–excludeで細かく対象を指定できます。例: –exclude “.tmp” –include “.jpg” のように一時ファイルを除外し、画像だけ同期できます。
安全なテスト環境(–dryrun)
実際の変更を加えず、どのファイルが追加・更新・削除されるかを確認できます。初めての同期設定時はまずdryrunで挙動を確かめると安心です。
削除の鏡像化(–delete)
ソースに存在しないファイルを宛先から削除してミラーリングできます。不要ファイルを残さず同期したいときに便利です。
これらの機能を組み合わせることで、運用コストを下げつつ安全にデータ同期を行えます。
基本的な構文と使用方法
構文
基本の書式は次の通りです。
aws s3 sync <source> <destination> [options]
とにはローカルのパス(例: ./myfolder)か、S3バケットのURL(例: s3://my-bucket/path)を指定できます。
source と destination の指定
- ローカル → S3: ローカルフォルダをS3にアップロードします。
- S3 → ローカル: S3の内容をローカルにダウンロードします。
実践例
ローカルフォルダをS3に同期する例:
aws s3 sync ./site s3://example-bucket/site
S3バケットをローカルに同期する例:
aws s3 sync s3://example-bucket/site ./site
これらのコマンドは、差分のみを転送して効率的に同期します。
実行前の確認
- AWS CLIが設定済みであること(認証情報とリージョン)。
- 同名ファイルは上書きされるため、重要なデータは事前にバックアップしてください。
- まずは
--dryrunオプションで動作を確認すると安全です。
よく使用されるオプション
以下では、AWS CLI の s3 sync コマンドで頻繁に使うオプションを分かりやすく説明します。具体例を交えて、使い方と注意点も併せて記します。
–delete
ソースに存在しないファイルを宛先から削除します。バックアップを同期先として使う場合や、ミラーリングする際に便利です。
例: aws s3 sync ./local/ s3://my-bucket/ –delete
注意: 誤って必要なファイルを消さないよう、–dryrunで事前確認してください。
–dryrun
実際の操作を行わず、どのファイルが転送・削除されるかを表示します。安全に確認するために必ず使うことをおすすめします。
例: aws s3 sync ./local/ s3://my-bucket/ –dryrun
–exclude / –include
ファイルをパターンで絞り込みます。除外が先に評価され、次に包含ルールが評価されます。順序に注意してください。
例: aws s3 sync ./local/ s3://my-bucket/ –exclude “*.tmp” –include “important.tmp”
用途: 一時ファイルを除外したり、特定拡張子だけ同期したりできます。
–exact-timestamps
デフォルトはファイルサイズでの差分判定も行いますが、こちらを付けると変更時刻も厳密に比較します。タイムスタンプが重要な場合に有効です。
例: aws s3 sync ./local/ s3://my-bucket/ –exact-timestamps
組み合わせのコツ
- –delete と –dryrun を組み合わせて事前確認してください。
- 複雑なフィルタは小さなテストフォルダで試して動作を確かめると安心です。
- 大量ファイルの同期では、オプションの検討がパフォーマンスに影響します。
高度な同期オプション
ミリ秒単位のタイムスタンプ比較
デフォルトではファイルのサイズと最終変更時刻で差分を判定します。–exact-timestamps を付けると、ミリ秒単位でタイムスタンプも比較します。例えば、編集ツールがミリ秒を変える場合や高速に小さな変更を繰り返す環境で有効です。
–exclude と –include の基本
–exclude は指定したパターンを同期対象から外します。–include は逆に含めます。両方を組み合わせると細かく制御できます。
パターン評価の順序に注意
評価は指定した順に行われます。つまり先に書いたパターンが後の評価に影響します。一般的な作法は、まず –include で必要なファイルを列挙し、最後に –exclude “*” で残りを除外する方法です。
具体例
- Pythonファイルを除外する:
aws s3 sync . s3://bucket –exclude “*.py” - Pythonファイルだけ同期する:
aws s3 sync . s3://bucket –exclude “” –include “.py”
実務上のポイント
複数パターンを使う場合は想定通りに動くかテストしてください。ワイルドカードの扱いやディレクトリ区切りに注意すると失敗を防げます。
実装における注意点
権限と安全設定
- 最小権限の原則でIAMロール/ユーザーを設定してください。読み書きのみ必要な場合は書き込み権限を付与します。キーの管理は慎重に行い、可能なら一時的な認証(IAMロールやSTS)を使ってください。
テストとdry-run
- 本番実行前に–dryrunオプションで動作を確認します。削除を伴う同期は影響が大きいので、まず小さなフォルダで試してください。
削除とバージョニング
- –deleteオプションは注意して使います。誤ってファイルを消さないようにバケットでバージョニングを有効にすることを推奨します。
大きなファイルと並列性
- 大きなファイルはマルチパートアップロードで効率化します。多数の小ファイルはオーバーヘッドが増すため、まとめて圧縮したうえで転送する方法も検討してください。並列数はネットワークやCPUに合わせて調整します。
検出基準とETagの注意
- syncは通常、サイズと更新日時で差分を判定します。マルチパートアップロード時のETagはMD5と異なる場合があります。整合性が重要ならアップロード後にハッシュ確認を行ってください。
ネットワークとコスト管理
- 帯域を占有しないようにスケジュール化や帯域制限を検討します。転送量は費用に直結するので、不要ファイルは–excludeで除外してください。
ログと監視
- 実行ログを残し、失敗時に通知する仕組みを用意してください。定期ジョブは再試行とバックオフの設定を組み合わせます。
暗号化とメタデータ
- 保管時の暗号化(SSE)や転送時のTLSを有効にします。Content-Typeやキャッシュ制御といったメタデータを適切に設定してください。
運用のベストプラクティス
- 小さなテスト→部分運用→全体展開の段階を踏みます。想定外の削除や上書きを避けるため、運用ドキュメントとロールを明確にしてください。












