

# S3 テーブルのレプリケーション
<a name="s3-tables-replication-tables"></a>

Amazon S3 Tables は、Amazon S3 テーブルバケットに保存されている Apache Iceberg テーブルの自動レプリケーションをサポートしています。レプリケーション先は、同じ AWS リージョン内、複数の AWS リージョン間、同じアカウント、または他の AWS アカウントとすることができます。テーブルのレプリケーションを設定することで、複数の場所でデータの読み取り専用レプリカを維持できます。レプリカを使用して、データの可用性を高め、コンプライアンス要件を満たし、分散アプリケーションのアクセスパフォーマンスを向上させることができます。

S3 Tables レプリケーションは、スナップショット、メタデータ、データファイルを含むすべてのテーブル更新を送信先テーブルにソーステーブルと同じ順序でコミットすることで、データ整合性を維持します。

## S3 Tables レプリケーションを使用する状況
<a name="s3-tables-replication-tables-when-to-use"></a>

S3 Tables レプリケーションは、次の目的で使用できます。
+ **レイテンシーを最小にする** — ユーザーが地理的に離れた 2 つの場所にいる場合、ユーザーにより近い AWS リージョンにリードレプリカを保持することで、テーブルにアクセスする際のレイテンシーを最小にすることができます。
+ **規制コンプライアンス** – 特定の地理的な場所または AWS アカウントでリードレプリカを維持できるため、特定の規制またはコンプライアンス要件を満たすのに役立ちます。レプリケーション先テーブルバケットを設定して、ソースとは異なる AWS KMS キーを持つテーブルを暗号化できます。
+ **一元化された分析** – データが複数の AWS リージョンに分散している場合は、リージョン固有のデータセットを一元化されたリージョンにレプリケートして、統合レポート、クロスリージョン分析、機械学習モデルトレーニングを行うことができます。これにより、リージョン間でクエリを実行したり、カスタムデータ集約パイプラインを構築したりする必要がなくなります。
+ **テストと開発環境** – 本番稼働用テーブルのリードレプリカを別々の AWS アカウントまたはテーブルバケットに作成して、開発チームと QA チームに現実的なテストデータを提供できます。これにより、テストワークロードが本番稼働システムから分離され、手動エクスポートやデータ同期プロセスなしで、テスト環境に最新の本番稼働用と同様のデータが保持されます。

## 機能
<a name="s3-tables-replication-tables-features"></a>

S3 Tables レプリケーションには以下の機能があります。

**S3 Tables の読み取り専用レプリカ**  
S3 Tables レプリケーションは、テーブルバケット間で Apache Iceberg テーブルの読み取り専用レプリカを作成します。Iceberg 互換エンジンを使用して、レプリカを個別にクエリできます。

**自動的に管理されるレプリカ**  
S3 Tables レプリケーションサービスは、レプリカテーブルを自動的に管理します。レプリケーションは通常、ソースの更新から数分以内にレプリカを更新します。S3 Tables は、整合性を維持するために、ソーステーブルと同じ順序ですべての更新をコミットします。

**複数の送信先へのレプリケーション**  
同じテーブルを複数の送信先テーブルバケットにレプリケートできます。レプリケーション先は、同じ AWS リージョン内、複数の AWS リージョン間、同じ AWS アカウント、または他の AWS アカウントとすることができます。

**独立したスナップショット保持**  
レプリカテーブルのスナップショットの有効期限はソーステーブルから独立しているため、必要に応じてレプリカテーブルに異なる保持期間を設定できます。例えば、レプリカテーブルの 90 日間の保持期間を設定しながら、スナップショットを 30 日間保持するようにソーステーブルを設定できます。レプリカの保持期間を長く設定した場合、ソースで期限切れになったスナップショットはレプリカで引き続き使用でき、クエリできます。この設定は、履歴分析のための拡張タイムトラベル機能を提供します。

**レプリカテーブルを低コストのストレージ階層に維持する**  
S3 Intelligent-Tiering ストレージクラスを使用するようにレプリケート先テーブルバケットを設定できます。これにより、パフォーマンスへの影響や運用上のオーバーヘッドなしに、アクセスパターンに基づいてストレージコストが自動的に最適化されます。S3 Intelligent-Tiering は、アクセス頻度が低いレプリカテーブルに適しています。

S3 Tables レプリケーションの詳細については、以下のトピックを参照してください。

**Topics**
+ [S3 Tables レプリケーションを使用する状況](#s3-tables-replication-tables-when-to-use)
+ [機能](#s3-tables-replication-tables-features)
+ [S3 Tables レプリケーションの仕組み](s3-tables-replication-how-replication-works.md)
+ [S3 Tables レプリケーションの設定](s3-tables-replication-setting-up.md)
+ [S3 Tables レプリケーションの管理](s3-tables-replication-managing.md)

# S3 Tables レプリケーションの仕組み
<a name="s3-tables-replication-how-replication-works"></a>

S3 Tables レプリケーションは、リージョンと AWS アカウント間で Apache Iceberg テーブルの読み取り専用レプリカを作成します。レプリカテーブルは S3 Tables サービスによって自動的に管理され、ソーステーブルからの完全なデータ、メタデータ、スナップショット履歴が含まれているため、分析およびタイムトラベルオペレーションに Iceberg 互換エンジンを使用してクエリを実行できます。

テーブルのレプリケーションを設定すると、S3 Tables は次のようになります。
+ ソーステーブルと同じ名前と名前空間を使用して、各送信先テーブルバケットに読み取り専用レプリカテーブルを作成します。
+ レプリカにソーステーブルの最新状態をバックフィルします
+ ソーステーブルの新しい更新をモニタリングします
+ 整合性を維持するために、ソースと同じ順序ですべての更新をレプリカにコミットします

詳細については、次のセクションを参照してください。

**Topics**
+ [レプリケーションの対象](#s3-tables-replication-what-is-replicated)
+ [データのレプリケート方法](#s3-tables-replication-how-data-replicated)
+ [スナップショットレプリケーション](#s3-tables-replication-snapshot-replication)
+ [考慮事項と制限事項](#s3-tables-replication-considerations-limitations)

## レプリケーションの対象
<a name="s3-tables-replication-what-is-replicated"></a>

次のテーブルコンポーネントがレプリケートされます。
+ **テーブルスナップショット** – 圧縮されたスナップショットを含むすべてのスナップショットは、ソーステーブルからの親子関係とシーケンス番号を維持しながら、時系列順にレプリケートされます。これにより、レプリカテーブルはソーステーブルと同じタイムトラベル機能を提供します。
+ **テーブルデータ** – テーブルスナップショットによって参照されるすべてのデータファイルは、コピー先のリージョンにレプリケートされます。これには、以下が含まれます。
  + **メタデータファイル** – テーブル metadata.json ファイル、マニフェスト、マニフェストリスト、パーティション統計、テーブル統計。
  + **ファイルの削除** – レプリカテーブルのデータ精度を維持するために、すべての削除ファイルがレプリケートされます。
  + **データファイル** – マニフェストによって参照されるすべてのデータファイルがレプリケートされます。
+ **テーブルメタデータ** – スキーマ情報 (現在と履歴)、パーティション仕様、ソート順序、テーブルプロパティを含む完全なメタデータのレプリケーション。
  + **スキーマ情報** – 現在のスキーマと履歴スキーマのバージョンを含むすべてのテーブルスキーマがレプリケートされます。これにより、レプリカテーブルに対するクエリが正しい列定義、データ型、フィールドマッピングを使用するようになります。レプリケーションプロセスはスキーマの進化履歴を維持し、タイムトラベルクエリをレプリカテーブルで正しく機能させることができます。
  + **パーティション仕様** – 現在および過去のパーティション仕様がレプリケートされるため、レプリカテーブルはソーステーブルと同じパーティショニング戦略を維持します。
  + **ソート順** – テーブルソート順は、クエリパフォーマンスの最適化を維持するためにレプリケートされます。

## データのレプリケート方法
<a name="s3-tables-replication-how-data-replicated"></a>

レプリケーションは、ソーステーブルとレプリカテーブル間で Apache Iceberg テーブルメタデータを比較することで、レプリカテーブルの有効な状態を決定します。レプリケーションは 3 つのカテゴリのメタデータを処理して、レプリカテーブルを更新します。

### テーブルメタデータの場合
<a name="s3-tables-replication-table-metadata"></a>

バージョン管理されたメタデータフィールドの場合、レプリケーションはソーステーブルの値を次のフィールドのレプリカテーブルの配列にマージします。
+ `snapshots` – snapshot-id により、ソーステーブルのすべてのスナップショットをレプリカテーブルのスナップショット配列にマージします。
+ `snapshot-log` – ソーステーブルのスナップショットログを、タイムスタンプと snapshot-id でソートされたレプリカテーブルの snapshot-log 配列にマージします。
+ `sort-orders` – ソーステーブルのソート順序定義を、レプリカテーブルの sort-orders 配列に order-id 順でマージします。
+ `partition-specs` – spec-id により、ソーステーブルのパーティション仕様をレプリカテーブルの partition-specs 配列にマージします。

### テーブル設定の場合
<a name="s3-tables-replication-table-configuration"></a>

テーブル設定を表すフィールドの場合、レプリケーションはソーステーブルから直接値をコピーします。
+ `properties`
+ `partition-statistics`
+ `statistics`

現在のテーブルの状態もソーステーブルから転送されます。
+ `current-snapshot-id`
+ `current-schema-id`
+ `last-column-id`
+ `last-partition-id`
+ `last-sequence-number`
+ `default-sort-order-id`
+ `next-row-id` (Iceberg V3)
+ `encryption-keys` (Iceberg V3)

### レプリカ固有の状態
<a name="s3-tables-replication-replica-specific-state"></a>

次のフィールドは、マージされたデータから計算され、レプリカテーブルに対して更新されます。
+ `location` はレプリカテーブルバケット内の正しいファイルの場所を指すようにレプリケーション中に更新され、すべてのファイル参照がレプリケート先環境で有効になります。
+ `metadata-log` にはすべての送信先メタデータファイル名が含まれており、現在のメタデータファイル名でレプリケーションが成功するたびに更新されます。
+ すべてのファイルパスは、レプリカテーブルの場所を指すように変更されます。

## スナップショットレプリケーション
<a name="s3-tables-replication-snapshot-replication"></a>

S3 Tables レプリケーションは、ソーステーブルと同じコミット順序ですべてのテーブルスナップショットをレプリケートすることで、リージョン間で完全なスナップショット履歴を維持します。ソーステーブルからの親子関係は、レプリカテーブルに保持されます。

### スナップショット保持期限
<a name="s3-tables-replication-snapshot-retention"></a>

レプリケートされたテーブルのカスタムスナップショット保持期間は、ソースの保持期間とは異なるように設定できます。つまり、スナップショットの有効期限が切れ、ソーステーブルで使用できなくなった場合でも、レプリカに保持できます。

例えば、ソーステーブルに 30 日間のスナップショット保持期間があり、レプリカテーブルに 90 日間の保持期間が設定されている場合、レプリカはソーステーブルで使用できなくなった過去 2 か月のスナップショットを維持します。

ソーステーブルで手動で期限切れになったスナップショットもレプリカテーブルに保持されます。例えば、Spark プロシージャを使用してソーステーブルで 2 月のスナップショットを有効期限が切れにした場合でも、レプリカテーブル内のスナップショットにタイムトラベルできます。

## 考慮事項と制限事項
<a name="s3-tables-replication-considerations-limitations"></a>

レプリケートされたテーブルには、次の考慮事項が適用されます。
+ S3 Tables は Iceberg V2 テーブルと V3 テーブルの両方をレプリケートします。ただし、アップグレードされたテーブル (V2 → V3) のレプリケーションはサポートされていません。
+ 500MB を超えるメタデータファイルはサポートされていません。
+ 通常、テーブルの更新は数分以内にレプリケートされますが、レプリケーションがバックフィルを開始する場合など、レプリケートするテーブルの更新のサイズによっては、レプリケーションに時間がかかることがあります。
+ タグまたはブランチを含むテーブルはサポートされていません。
+ レプリケーションは、Amazon S3 メタデータテーブルやその他の AWS で生成されたシステムテーブルではサポートされていません。
+ 圧縮されたスナップショットを含むすべてのテーブルスナップショットは、ソーステーブルからレプリケートされます。そのため、レプリカテーブルでは圧縮はサポートされていません。

# S3 Tables レプリケーションの設定
<a name="s3-tables-replication-setting-up"></a>

レプリケーションを設定して、ソーステーブルから最大 5 つのレプリケート先テーブルバケットにテーブルレプリカを自動的に作成できます。レプリケーションは、バケットレベル (バケット内のすべてのテーブルに適用) またはテーブルレベル (特定のテーブル用) で設定できます。このトピックでは、Amazon S3 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用してレプリケーションを設定する方法について説明します。

レプリケーション設定の詳細については、以下のトピックを参照してください。

**Topics**
+ [レプリケーションを設定するための前提条件](#s3-tables-replication-prerequisites)
+ [レプリケーション設定について](#s3-tables-replication-understanding-configurations)
+ [バケットレベルとテーブルレベルのレプリケーションの選択](#s3-tables-replication-choosing-configuration)
+ [Amazon S3 コンソールを使用したレプリケーションの設定](#s3-tables-replication-console)
+ [AWS CLI を使用してレプリケーションを設定する](#s3-tables-replication-cli)

## レプリケーションを設定するための前提条件
<a name="s3-tables-replication-prerequisites"></a>

レプリケーションセットを設定する前に、次のものが準備されていることを確認してください。

### 必要なリソース
<a name="s3-tables-replication-required-resources"></a>
+ **ソーステーブルバケット** – レプリケートするテーブルを含むテーブルバケット (複数可)
+ **宛先テーブルバケット (複数可)** – テーブルをレプリケートする 1 つ以上のテーブルバケット (最大 5 つの宛先テーブルバケット)
+ **ソーステーブル (複数可)** – レプリケートするソーステーブルバケット内の既存のテーブル
+ **IAM ロール (複数可)** – ユーザーに代わってテーブルをレプリケートするアクセス許可を Amazon S3 に付与する IAM ロール

### 必要なアクセス許可
<a name="s3-tables-replication-required-permissions"></a>

レプリケーションの設定に使用する IAM ID には、次のアクセス許可が必要です。

**バケットレベルのレプリケーションの場合:**
+ ソーステーブルバケットの `s3tables:PutTableBucketReplication`
+ ソーステーブルバケットの `s3tables:GetTableBucketReplication`
+ レプリケーション IAM ロールの `iam:PassRole`

**テーブルレベルのレプリケーションの場合:**
+ ソーステーブルの `s3tables:PutTableReplication`
+ ソーステーブルの `s3tables:GetTableReplication`
+ レプリケーション IAM ロールの `iam:PassRole`

**クロスアカウントレプリケーションの場合:**
+ 送信先アカウントのバケットポリシーからのアクセス許可

### クロスアカウントレプリケーションの追加要件
<a name="s3-tables-replication-cross-account-requirements"></a>

レプリケート元テーブルバケットとレプリケート先テーブルバケットが異なる AWS アカウントにある場合は、以下も必要です。
+ テーブルをレプリケートするアクセス許可をソースアカウントに付与するレプリケート先テーブルバケットのバケットポリシー
+ 送信先アカウント ID とテーブルバケット Amazon リソースネーム (ARN)

### 暗号化されたテーブルの追加要件
<a name="s3-tables-replication-encrypted-requirements"></a>

AWS KMS でレプリカテーブルを暗号化する場合:
+ 送信先リージョンの KMS キー
+ IAM レプリケーションロールで KMS キーを使用するアクセス許可
+ レプリケーションロールにデータの暗号化を許可する KMS キーポリシー

## レプリケーション設定について
<a name="s3-tables-replication-understanding-configurations"></a>

レプリケーション設定は、Amazon S3 がソーステーブルバケットからテーブルをレプリケートする方法を定義します。レプリケーションは次の 2 つのレベルで設定できます。

### バケットレベルのレプリケーション
<a name="s3-tables-replication-bucket-level"></a>

バケットレベルのレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。バケットレベルのレプリケーションを設定すると、Amazon S3 はバケット内に作成された既存のテーブルと新しいテーブルを自動的にレプリケートします。

バケットレベルのレプリケーションは次の場合に使用します。
+ バケット内のすべてのテーブルをレプリケートする
+ すべてのテーブルで一貫したレプリケーション動作が必要
+ 1 つの設定で管理を簡素化したい場合

### テーブルレベルのレプリケーション
<a name="s3-tables-replication-table-level"></a>

テーブルレベルのレプリケーション設定は、特定のテーブルに適用されます。テーブルレベルの設定は、その特定のテーブルのバケットレベルの設定を上書きします。

次の場合は、テーブルレベルのレプリケーションを使用します。
+ 特定のテーブルのみをレプリケートする
+ テーブルごとに異なるレプリケーション先が必要です
+ 特定のテーブルのバケットレベルの設定を上書きする場合

### レプリケーション設定要素
<a name="s3-tables-replication-configuration-elements"></a>

各レプリケーション設定には以下が含まれます。
+ **IAM ロール** – Amazon S3 がレプリケーションオペレーションを実行するために引き受けるロール
+ **ルール** – 1 つ以上のレプリケーションルール (起動時に 1 つのルールに制限されます)。各ルールには以下が含まれます。
  + **送信先** – 送信先テーブルバケット ARN のリスト (最大 5 つの送信先)
  + **ステータス** – ルールが有効か無効か
+ **バージョントークン** – 設定の更新時に書き込みの競合を防ぐために使用されるトークン

## バケットレベルとテーブルレベルのレプリケーションの選択
<a name="s3-tables-replication-choosing-configuration"></a>

### 設定の優先順位
<a name="s3-tables-replication-configuration-precedence"></a>

バケットレベルとテーブルレベルの両方の設定が存在する場合:
+ テーブルレベルの設定は、その特定のテーブルに対して優先されます。
+ 他のテーブルはバケットレベルの設定に従います。

## Amazon S3 コンソールを使用したレプリケーションの設定
<a name="s3-tables-replication-console"></a>

この手順では、Amazon S3 コンソールを使用してレプリケーションを設定する方法を示します。

### バケットレベルのレプリケーションを設定するには
<a name="s3-tables-replication-bucket-level-console"></a>

この手順では、Amazon S3 コンソールを使用してテーブルバケットレプリケーション設定を作成する方法を示します。テーブルバケットレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ナビゲーションペインで、**[テーブルバケット]** を選択します。

1. **[テーブルバケット]** リストで、レプリケーションを設定するバケットの名前を選択します。

1. **[管理]** タブを選択します。

1. **[テーブルバケットレプリケーション設定]** セクションで、**[テーブルバケットレプリケーション設定の作成]** を選択します。

1. **[送信先]** セクションで、レプリケーションの送信先を設定します。

   1. **[テーブルバケット ARN]** フィールドに、レプリケート先テーブルバケットの ARN を入力します。形式は次のとおりです。`arn:aws:s3tables:region:account-id:bucket/table-bucket-name`

      または、**[S3 を参照]** を選択してアカウントからテーブルバケットを選択します。

   1. (オプション) 送信先を追加するには、**[送信先の追加]** を選択します。合計 5 つの送信先に対して、最大 4 つのテーブルバケットを追加できます。

1. **[IAM ロール]** セクションで、レプリケーションロールを設定します。

   1. **[IAM ロールの選択方法]** で、以下のいずれかのオプションを選択します。
      + **[新しい IAM ロールの作成]** – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。
      + **[既存の IAM ロールから選択]** – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。
      + **[IAM ロールの ARN の入力]** – 既存の IAM ロールの ARN を手動で入力します。

   1. **[既存の IAM ロールから選択]** を選択した場合は、**[IAM ロール]** ドロップダウンリストからロールを選択します。

   1. (オプション) **[表示]** を選択して、IAM コンソールで選択したロールのアクセス許可を確認します。

1. **[複製設定を作成]** を選択します。

   レプリケーション設定を作成すると、Amazon S3 は最初のバックフィルプロセスを開始します。**[テーブルレプリケーションのステータス]** セクションでレプリケーションステータスをモニタリングできます。これにより、レプリケーションステータス、レプリケート先テーブル ARN、最後にレプリケートされたメタデータなど、各レプリケート先に関する情報が表示されます。

### テーブルレベルのレプリケーションを設定するには
<a name="s3-tables-replication-table-level-console"></a>

この手順では、Amazon S3 コンソールを使用してテーブルレベルのレプリケーション設定を作成する方法を示します。テーブルレプリケーション設定は、特定のテーブルに適用され、そのテーブルのバケットレベルのレプリケーション設定を上書きします。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ナビゲーションペインで、**[テーブルバケット]** を選択します。

1. **[テーブルバケット]** リストで、レプリケートするテーブルが含まれるテーブルバケットの名前を選択します。

1. [**Tables**] (テーブル) タブを選択します。

1. **[テーブル]** リストで、レプリケートするテーブルのリンクを選択します。

1. **[管理]** タブを選択します。

1. **[テーブルレプリケーション設定]** セクションで、**[テーブルレプリケーション設定の作成]** を選択します。

1. **[送信先]** セクションで、レプリケーションの送信先を設定します。

   1. **[テーブルバケット ARN]** フィールドに、レプリケート先テーブルバケットの ARN を入力します。形式は次のとおりです。`arn:aws:s3tables:region:account-id:bucket/table-bucket-name`

      または、**[S3 を参照]** を選択してアカウントからテーブルバケットを選択します。

   1. (オプション) 送信先を追加するには、**[送信先の追加]** を選択します。合計 5 つの送信先に対して、最大 4 つのテーブルバケットを追加できます。

1. **[IAM ロール]** セクションで、レプリケーションロールを設定します。

   1. **[IAM ロールの選択方法]** で、以下のいずれかのオプションを選択します。
      + **[新しい IAM ロールの作成]** – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。
      + **[既存の IAM ロールから選択]** – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。
      + **[IAM ロールの ARN の入力]** – 既存の IAM ロールの ARN を手動で入力します。

   1. **[既存の IAM ロールから選択]** を選択した場合は、**[IAM ロール]** リストからロールを選択します。

   1. (オプション) **[表示]** を選択して、IAM コンソールで選択したロールのアクセス許可を確認します。

1. **[複製設定を作成]** を選択します。

### 次に起こること
<a name="s3-tables-replication-what-happens-next"></a>

レプリケーション設定の作成後:
+ Amazon S3 は最初のバックフィルプロセスを開始し、各レプリケート先バケットにレプリカテーブルを作成します
+ バックフィルが開始されるとレプリケーションステータスが **[レプリケート中]** に変わります
+ **[管理]** タブでレプリケーションの進行状況をモニタリングできます
+ 初期レプリケーション時間は、ソーステーブルのサイズによって異なります

## AWS CLI を使用してレプリケーションを設定する
<a name="s3-tables-replication-cli"></a>

この手順では、AWS CLI を使用してレプリケーションを設定する方法を示します。アカウント ID、リージョン、バケット名を実際の値に置き換えます。すべての送信先バケットをアクセス許可に追加します。

### ステップ 1: レプリケーション用の IAM ロールを作成する
<a name="s3-tables-replication-create-iam-role"></a>

まず、Amazon S3 がテーブルをレプリケートするために引き受けることができる IAM ロールを作成します。

1. S3 Tables がロールを引き受けることを許可する信頼ポリシードキュメントを作成します。これを `trust-policy.json` として保存します。

   ```
   {
     "Version": "2012-10-17"		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "replication.s3tables.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. IAM ロールの作成:

   ```
   aws iam create-role \
       --role-name S3TablesReplicationRole \
       --assume-role-policy-document file://trust-policy.json \
       --description "Role for S3 Tables replication"
   ```

1. レプリケーションアクセス許可を付与するアクセス許可ポリシーを作成します。これを `replication-permissions.json` として保存します。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:GetTable",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableMaintenanceConfiguration",
                   "s3tables:GetTableData"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source/table/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTables"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination/table/*"
           }
       ]
   }
   ```

1. アクセス許可ポリシーをロールにアタッチします:

   ```
   aws iam put-role-policy \
       --role-name S3TablesReplicationRole \
       --policy-name S3TablesReplicationPermissions \
       --policy-document file://replication-permissions.json
   ```

1. (オプション) KMS 暗号化を使用する場合は、ポリシーに KMS アクセス許可を追加します。

   ```
   {
     "Effect": "Allow",		 	 	 
     "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:Encrypt"
   
     ],
     "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
   },
   {
     "Effect": "Allow",
     "Action": [
       "kms:Decrypt",
       "kms:GenerateDataKey"
     ],
     "Resource": [
       "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
     ]
   }
   ```

### (クロスアカウントのみ) ステップ 2: 送信先バケットポリシーを設定する
<a name="s3-tables-replication-cross-account-policy"></a>

別の AWS アカウントにレプリケートする場合、レプリケート先アカウントはレプリケート元アカウントにアクセス許可を付与する必要があります。

1. 送信先アカウントで、送信先テーブルバケットのバケットポリシーを作成します。これを `destination-bucket-policy.json` として保存します。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::444455556666:role/cross-account-test"
               },
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination/table/*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::444455556666:role/cross-account-test"
               },
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination"
           }
       ]
   }
   ```

1. S3 Tables API を使用してポリシーを適用します。

   ```
   aws s3tables put-table-bucket-policy \
       --table-bucket-arn arn:aws:s3tables:us-west-2:444455556666:bucket/amzn-s3-demo-table-bucket-cross-account-destination \
       --policy file://destination-bucket-policy.json \
       --profile destination-account
   ```

1. ソース KMS キーを変更して、S3 Tables のレプリケーションとメンテナンスを許可します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Id": "key-consolepolicy-3",
     "Statement": [
           {
               "Sid": "allow replication to decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "replication_role_arn"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
           },
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
           }
     ]
   }
   ```

1. 同様に、送信先 KMS キーポリシーに許可を追加します

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Id": "key-policy-3",
       "Statement": [
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
           },
           {
               "Sid": "allow replication to encrypt/decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "replication_role_arn"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
           }
       ]
   ```

### ステップ 3: レプリケーション設定を作成する
<a name="s3-tabales-replication-cli"></a>

AWS CLI を使用して、テーブルバケットレベルまたはテーブルレベルでレプリケーション設定を作成できます。詳細については、次の手順を参照してください。

#### バケットレベルのレプリケーション設定を作成する
<a name="s3-tables-replication-bucket-level-cli"></a>

このアプローチを使用して、バケット内のすべてのテーブルをレプリケートします。

1. レプリケーション設定ファイルを作成します。これを `bucket-replication-config.json` として保存します。  
**Example : 同じアカウント内の単一の送信先**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           }
         ]
       }
     ]
   }
   ```  
**Example : リージョン間で複数の送信先**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:ap-south-1:111122223333:bucket/amzn-s3-demo-table-bucket-apac"
           }
         ]
       }
     ]
   }
   ```  
**Example : クロスアカウントレプリケーション**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/amzn-s3-demo-table-bucket-partner"
           }
         ]
       }
     ]
   }
   ```

1. バケットレベルのレプリケーション設定を適用します。

   ```
   aws s3tables put-table-bucket-replication \
       --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
       --configuration file://bucket-replication-config.json
   ```

   正常な出力:

   ```
   {
     "versionToken": "3HL4kqtJl40Nr8X8gdRQBpUMLUo",
     "status": "Success"
   }
   ```

#### テーブルレベルのレプリケーション設定を作成する
<a name="s3-tables-replication-table-level-cli"></a>

このアプローチを使用して、特定のテーブルをレプリケートするか、バケットレベルのレプリケーションを上書きします。

1. レプリケーション設定ファイルを作成します。これを `table-replication-config.json` として保存します。  
**Example : シングルテーブルレプリケーション**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-analytics-bucket"
           }
         ]
       }
     ]
   }
   ```  
**Example : 複数の送信先を持つテーブル**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu"
           }
         ]
       }
     ]
   }
   ```

1. テーブルレベルのレプリケーション設定を適用します。

   ```
   aws s3tables put-table-replication \
       --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/amzn-s3-demo-table-bucket-sales-data \
       --configuration file://table-replication-config.json
   ```

   正常な出力:

   ```
   {
     "versionToken": "xT2LZkFZ0UuTC2h8XqtGLx2Ak6M",
     "status": "Success"
   }
   ```

# S3 Tables レプリケーションの管理
<a name="s3-tables-replication-managing"></a>

S3 Tables レプリケーションを設定したら、レプリカのステータスをモニタリングして、レプリケートされた内容を確認できます。レプリケーションステータスは、ソーステーブルの **[管理]** タブの Amazon S3 コンソールで、または AWS CLI を使用して確認できます。詳細については、「[S3 Tables レプリケーションの設定](s3-tables-replication-setting-up.md)」を参照してください。このトピックでは、レプリケーションをモニタリングし、レプリケーションが完了、進行中、または失敗したかどうかを示すさまざまなステータス値を理解する方法について説明します。

## レプリケーションステータスのモニタリング
<a name="s3-tables-replication-monitoring-status"></a>

レプリケーションジョブは、レプリケートされたテーブルに対して継続的に実行されます。GetTableReplicationStatus API を使用してレプリケーションのステータスをクエリするか、Amazon S3 コンソールで表示できます。

### AWS CLI を使用してレプリケーションのステータスを取得するには
<a name="s3-tables-replication-status-cli"></a>

次の例では、GetTableReplicationStatus API を使用してレプリケーションステータスを取得します。

```
aws s3tables get-table-replication-status \
    --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/sales-data
```

正常な出力:

```
{
  "sourceTableARN": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/sales-data",
  "destinations": [
    {
      "replicationStatus": "COMPLETED",
      "destinationBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket",
      "destinationTableARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/table/sales-data",
      "lastSuccessfulReplicatedUpdate": {
        "metadataLocation": "latest_table_metadata.json",
        "timestamp": "2025-11-15T14:30:00Z"
      }
    },
    {
      "replicationStatus": "PENDING",
      "destinationBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu-bucket",
      "destinationTableARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu-bucket/table/sales-data",
      "lastSuccessfulReplicatedUpdate": {
        "metadataLocation": "latest_table_metadata.json",
        "timestamp": "2025-11-15T14:25:00Z"
      }
    }
  ]
}
```

詳細については、「*AWS CLI コマンドリファレンス*」の「[get-table-replication-status](https://docs.aws.amazon.com/cli/latest/reference/s3tables/get-table-replication-status.html)」を参照してください。

### レスポンスを理解する
<a name="s3-tables-replication-understanding-response"></a>

レスポンスには、次の要素が含まれます。
+ **sourceTableARN** – レプリケートされるソーステーブルの ARN。
+ **送信先** – 設定された各レプリケーション送信先に対応する送信先ステータスオブジェクトの配列。各送信先オブジェクトには以下が含まれます。
  + **replicationStatus** – この送信先の現在のレプリケーションステータス (COMPLETED、PENDING、または FAILED)。
  + **destinationBucketARN** – レプリケート先テーブルバケットの ARN。
  + **destinationTableARN** – レプリケート先バケット内のレプリカテーブルの ARN。
  + **lastSuccessfulReplicatedUpdate** – 最後に成功したレプリケーションに関する情報:
    + **metadataLocation** – 最後に正常にレプリケートされた Iceberg メタデータファイル名。これをソーステーブルの現在のメタデータの場所と比較して、レプリケーションが最新かどうかを判断します。
    + **timestamp** – このメタデータファイルが送信先にレプリケートされた時刻。
  + **failureMessage** (ステータスが FAILED の場合にのみ表示されます) – レプリケーションが失敗した理由を説明する詳細なエラーメッセージ。

### レプリケーションステータス値
<a name="s3-tables-replication-status-values"></a>

レプリケーションは、送信先ごとに 3 つのステータスが考えられます。
+ **COMPLETED** – すべてのソーステーブルスナップショットが送信先に正常にレプリケートされました。ソーステーブルの最新のメタデータの場所は、最後にレプリケートされたメタデータの場所と一致します。
+ **PENDING** – レプリケーションが進行中であるか、新しいコミットのレプリケートを待っています。ソーステーブルの最新のメタデータの場所は、最後にレプリケートされたメタデータの場所とは異なります。
+ **FAILED** – このテーブルの最後のレプリケーションジョブが失敗しました。新しい更新はレプリケートされません。