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:OperationMissedThreshold15分以内にレプリケーションされなかった(RTC有効時)
s3:Replication:OperationReplicatedAfterThreshold15分超過後にレプリケーション完了(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

原因説明対処
AssumeRoleNotPermittedIAMロールを引き受けられないIAMロールの信頼ポリシーを確認
DstBucketNotFound送信先バケットが見つからないバケット名・ARNを確認
DstBucketUnversioned送信先でバージョニングが無効バージョニングを有効化
DstPutObjNotPermitted送信先への書き込み権限がないIAMポリシーにs3:ReplicateObjectを追加
DstKmsKeyNotFoundKMSキーが見つからない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
...

マニフェストの作成方法:

  1. 自分でCSVを作成してS3にアップロード
  2. S3 Inventoryレポートを使う(バケット内の全オブジェクト一覧を自動生成)
  3. コンソールでフィルタ条件を指定して自動生成

処理の流れ

┌─────────────────┐
│ マニフェスト     │  ← 処理対象のオブジェクト一覧
│ (CSV/Inventory) │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ Batch Operations │  ← ジョブを作成
│ ジョブ           │     - 操作内容(タグ追加、コピー等)
│                 │     - IAMロール
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 各オブジェクトに │  ← S3が自動で並列実行
│ 操作を適用       │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│ 完了レポート     │  ← 成功/失敗の結果
└─────────────────┘