S3 Replication(S3レプリケーション)
あるS3バケットのオブジェクトを、別のS3バケットに自動的にコピーする機能
出典: Replicating objects within and across Regions
なぜ必要か
- 災害対策(別リージョンにバックアップ)
- レイテンシ削減(ユーザーに近いリージョンにコピー)
- コンプライアンス(データを特定リージョンに保持する法的要件)
- 本番/テスト環境間でのデータ同期
2種類のレプリケーション
| 種類 | 説明 | ユースケース |
|---|---|---|
| CRR(Cross-Region Replication) | 異なるリージョン間でコピー | 災害対策、レイテンシ削減 |
| SRR(Same-Region Replication) | 同一リージョン内でコピー | ログ集約、本番→テスト環境へのコピー |
具体例
設定: 東京リージョンのバケットA → 大阪リージョンのバケットB にCRR設定
動作:
1. ユーザーがバケットAに「report.pdf」をアップロード
2. S3が自動的にバケットBに「report.pdf」をコピー
3. 東京が災害で使えなくなっても大阪にデータが残っている
前提条件
- 送信元・送信先の両方でバージョニングを有効にする必要がある
出典: Requirements and considerations for replication
“Both source and destination buckets must have versioning enabled.”
S3 Replication Metrics(S3レプリケーションメトリクス)
S3レプリケーションの進捗状況を監視するためのCloudWatchメトリクス
出典: Using S3 Replication metrics
“S3 Replication metrics provide detailed information about the progress and status of replication rules in S3.”
提供されるメトリクス
| メトリクス | 意味 |
|---|---|
| Bytes pending replication | レプリケーション待ちのデータ量 |
| Operations pending replication | レプリケーション待ちのオブジェクト数 |
| Replication latency | レプリケーションにかかった時間 |
| Operations failed replication | レプリケーション失敗数 |
具体例
東京リージョン → 大阪リージョンにレプリケーション設定
メトリクスで確認できること:
- 「今、100GBがレプリケーション待ち」
- 「平均レプリケーション時間は30秒」
- 「過去1時間で5件失敗した」
有効化方法
- S3 Replication Time Control(S3 RTC)を有効にすると自動で有効化
- RTC無しでもメトリクス単独で有効化可能
料金
CloudWatchカスタムメトリクスと同じ料金
レプリケーションイベントの通知
通知先となるAWSサービス
S3イベント通知は以下のサービスに送信できる
出典: Amazon S3 Event Notifications
“Users can send event notifications to various destinations, such as Amazon Simple Notification Service (SNS) topics, Amazon Simple Queue Service (SQS) queues, AWS Lambda functions, and Amazon EventBridge.”
| サービス | 用途 |
|---|---|
| Amazon SQS | キューに溜めて後続処理(非同期処理向け) |
| Amazon SNS | メール/SMS通知、複数サービスへのファンアウト |
| AWS Lambda | カスタム処理を実行 |
| Amazon EventBridge | ルールベースで複数ターゲットに振り分け |
注意: SQS FIFOキューは非対応
レプリケーション関連のイベントタイプ
出典: Receiving replication failure events with Amazon S3 Event Notifications
| イベントタイプ | 意味 |
|---|---|
s3:Replication:OperationFailedReplication | レプリケーション失敗 |
s3:Replication:OperationMissedThreshold | 15分以内にレプリケーションされなかった(RTC有効時) |
s3:Replication:OperationReplicatedAfterThreshold | 15分超過後にレプリケーション完了(RTC有効時) |
s3:Replication:OperationNotTracked | メトリクスで追跡されなくなった |
レプリケーション失敗時の対応
1. 失敗の検知
# オブジェクトのレプリケーションステータスを確認
$ aws s3api head-object --bucket my-source-bucket --key myfile.txt
# x-amz-replication-status が FAILED なら失敗出典: Troubleshooting replication
“To check the replication status of an object, use the HeadObject API operation. The HeadObject API operation returns the PENDING, COMPLETED, or FAILED replication status of an object.”
2. 失敗原因の特定
イベント通知の failureReason を確認する
よくある失敗原因:
出典: Receiving replication failure events with Amazon S3 Event Notifications
| 原因 | 説明 | 対処 |
|---|---|---|
AssumeRoleNotPermitted | IAMロールを引き受けられない | IAMロールの信頼ポリシーを確認 |
DstBucketNotFound | 送信先バケットが見つからない | バケット名・ARNを確認 |
DstBucketUnversioned | 送信先でバージョニングが無効 | バージョニングを有効化 |
DstPutObjNotPermitted | 送信先への書き込み権限がない | IAMポリシーにs3:ReplicateObjectを追加 |
DstKmsKeyNotFound | KMSキーが見つからない | KMSキーの存在・権限を確認 |
3. 失敗したオブジェクトの再レプリケーション
方法1: S3 Batch Replicationを使う(推奨)
S3 Batch Replicationは「オンデマンドレプリケーション」機能で、失敗したオブジェクトの再処理に対応している
出典: Replicating objects within and across Regions
オンデマンドレプリケーションとは:
“On-demand replication – To replicate existing objects from the source bucket to one or more destination buckets on demand, use S3 Batch Replication.”
ライブレプリケーションとの違い:
“Live replication – To automatically replicate new and updated objects as they are written to the source bucket, use live replication. Live replication doesn’t replicate any objects that existed in the bucket before you set up replication.”
つまり:
- ライブレプリケーション: レプリケーション設定を有効にした後にアップロードされたオブジェクトだけを自動コピーする
- 設定前から存在していたオブジェクトはコピーされない
- オンデマンドレプリケーション(Batch Replication): 手動でジョブを実行して、指定したオブジェクトをコピーする
- 設定前から存在していたオブジェクトや、失敗したオブジェクトを後からコピーしたい場合に使う
出典: Replicating existing objects with Batch Replication
“Batch Replication can be used to replicate objects that existed before a replication configuration was in place, objects that have previously been replicated, and objects that have failed replication.”
Batch Replicationジョブ作成時に ObjectReplicationStatuses フィルタで FAILED を指定すると、失敗したオブジェクトだけを対象にできる。これにより、問題を修正した後に失敗分だけを効率的に再処理できる
方法2: オブジェクトを再アップロード
出典: Troubleshooting replication
“If objects have a FAILED replication status, they can be replicated using S3 Batch Replication or by re-uploading them to the source bucket.”
送信元バケットに同じオブジェクトを再アップロードすると、新しいバージョンとしてレプリケーションが再開される
対応フロー図
レプリケーション失敗を検知
(イベント通知 or メトリクス)
│
▼
failureReason を確認
│
▼
┌────────┴────────┐
│ 権限系エラー? │
│ (AssumeRole, │
│ NotPermitted) │
└────────┬────────┘
Yes │ No
│ │
▼ ▼
IAMポリシー バケット設定確認
修正 (バージョニング等)
│ │
└────┴────┐
▼
S3 Batch Replication で
失敗オブジェクトを再処理
S3 Batch Operations(S3バッチオペレーション)
大量のS3オブジェクトに対して一括で操作を実行するマネージドサービス
出典: Performing object operations in bulk with Batch Operations
“S3 Batch Operations performs large-scale batch operations on Amazon S3 objects”
対象
バケット内の「オブジェクト」に対する操作
- 例:
- 100個のオブジェクトのタグを一括で変更したい」
- S3 Glacierにアーカイブした10万ファイルを一括で復元したい
- 全オブジェクトの暗号化方式をSSE-KMSに変更したい
サポートされている操作
- オブジェクトのコピー
- タグの追加・削除・置換
- ACLの置換
- S3 Glacierからの復元
- 暗号化設定の変更
- Lambda関数の呼び出し
- チェックサムの計算
- 既存オブジェクトのレプリケーション
出典: Operations supported by S3 Batch Operations
対象オブジェクトの指定方法
「マニフェスト」というオブジェクト一覧を用意する
マニフェストの例(CSV形式):
my-bucket,folder/file1.txt
my-bucket,folder/file2.txt
my-bucket,folder/file3.txt
...
マニフェストの作成方法:
- 自分でCSVを作成してS3にアップロード
- S3 Inventoryレポートを使う(バケット内の全オブジェクト一覧を自動生成)
- コンソールでフィルタ条件を指定して自動生成
処理の流れ
┌─────────────────┐
│ マニフェスト │ ← 処理対象のオブジェクト一覧
│ (CSV/Inventory) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Batch Operations │ ← ジョブを作成
│ ジョブ │ - 操作内容(タグ追加、コピー等)
│ │ - IAMロール
└────────┬────────┘
│
▼
┌─────────────────┐
│ 各オブジェクトに │ ← S3が自動で並列実行
│ 操作を適用 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 完了レポート │ ← 成功/失敗の結果
└─────────────────┘