S3 Tables レプリケーションの設定
レプリケーションを設定して、ソーステーブルから最大 5 つのレプリケート先テーブルバケットにテーブルレプリカを自動的に作成できます。レプリケーションは、バケットレベル (バケット内のすべてのテーブルに適用) またはテーブルレベル (特定のテーブル用) で設定できます。このトピックでは、Amazon S3 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用してレプリケーションを設定する方法について説明します。
レプリケーション設定の詳細については、以下のトピックを参照してください。
トピック
レプリケーションを設定するための前提条件
レプリケーションセットを設定する前に、次のものが準備されていることを確認してください。
必要なリソース
-
ソーステーブルバケット – レプリケートするテーブルを含むテーブルバケット (複数可)
-
宛先テーブルバケット (複数可) – テーブルをレプリケートする 1 つ以上のテーブルバケット (最大 5 つの宛先テーブルバケット)
-
ソーステーブル (複数可) – レプリケートするソーステーブルバケット内の既存のテーブル
-
IAM ロール (複数可) – ユーザーに代わってテーブルをレプリケートするアクセス許可を Amazon S3 に付与する IAM ロール
必要なアクセス許可
レプリケーションの設定に使用する IAM ID には、次のアクセス許可が必要です。
バケットレベルのレプリケーションの場合:
-
ソーステーブルバケットの
s3tables:PutTableBucketReplication -
ソーステーブルバケットの
s3tables:GetTableBucketReplication -
レプリケーション IAM ロールの
iam:PassRole
テーブルレベルのレプリケーションの場合:
-
ソーステーブルの
s3tables:PutTableReplication -
ソーステーブルの
s3tables:GetTableReplication -
レプリケーション IAM ロールの
iam:PassRole
クロスアカウントレプリケーションの場合:
-
送信先アカウントのバケットポリシーからのアクセス許可
クロスアカウントレプリケーションの追加要件
レプリケート元テーブルバケットとレプリケート先テーブルバケットが異なる AWS アカウントにある場合は、以下も必要です。
-
テーブルをレプリケートするアクセス許可をソースアカウントに付与するレプリケート先テーブルバケットのバケットポリシー
-
送信先アカウント ID とテーブルバケット Amazon リソースネーム (ARN)
暗号化されたテーブルの追加要件
AWS KMS でレプリカテーブルを暗号化する場合:
-
送信先リージョンの KMS キー
-
IAM レプリケーションロールで KMS キーを使用するアクセス許可
-
レプリケーションロールにデータの暗号化を許可する KMS キーポリシー
レプリケーション設定について
レプリケーション設定は、Amazon S3 がソーステーブルバケットからテーブルをレプリケートする方法を定義します。レプリケーションは次の 2 つのレベルで設定できます。
バケットレベルのレプリケーション
バケットレベルのレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。バケットレベルのレプリケーションを設定すると、Amazon S3 はバケット内に作成された既存のテーブルと新しいテーブルを自動的にレプリケートします。
バケットレベルのレプリケーションは次の場合に使用します。
-
バケット内のすべてのテーブルをレプリケートする
-
すべてのテーブルで一貫したレプリケーション動作が必要
-
1 つの設定で管理を簡素化したい場合
テーブルレベルのレプリケーション
テーブルレベルのレプリケーション設定は、特定のテーブルに適用されます。テーブルレベルの設定は、その特定のテーブルのバケットレベルの設定を上書きします。
次の場合は、テーブルレベルのレプリケーションを使用します。
-
特定のテーブルのみをレプリケートする
-
テーブルごとに異なるレプリケーション先が必要です
-
特定のテーブルのバケットレベルの設定を上書きする場合
レプリケーション設定要素
各レプリケーション設定には以下が含まれます。
-
IAM ロール – Amazon S3 がレプリケーションオペレーションを実行するために引き受けるロール
-
ルール – 1 つ以上のレプリケーションルール (起動時に 1 つのルールに制限されます)。各ルールには以下が含まれます。
-
送信先 – 送信先テーブルバケット ARN のリスト (最大 5 つの送信先)
-
ステータス – ルールが有効か無効か
-
-
バージョントークン – 設定の更新時に書き込みの競合を防ぐために使用されるトークン
バケットレベルとテーブルレベルのレプリケーションの選択
設定の優先順位
バケットレベルとテーブルレベルの両方の設定が存在する場合:
-
テーブルレベルの設定は、その特定のテーブルに対して優先されます。
-
他のテーブルはバケットレベルの設定に従います。
Amazon S3 コンソールを使用したレプリケーションの設定
この手順では、Amazon S3 コンソールを使用してレプリケーションを設定する方法を示します。
この手順では、Amazon S3 コンソールを使用してテーブルバケットレプリケーション設定を作成する方法を示します。テーブルバケットレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。
-
AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/
を開きます。 -
ナビゲーションペインで、[テーブルバケット] を選択します。
-
[テーブルバケット] リストで、レプリケーションを設定するバケットの名前を選択します。
-
[管理] タブを選択します。
-
[テーブルバケットレプリケーション設定] セクションで、[テーブルバケットレプリケーション設定の作成] を選択します。
-
[送信先] セクションで、レプリケーションの送信先を設定します。
-
[テーブルバケット ARN] フィールドに、レプリケート先テーブルバケットの ARN を入力します。形式は次のとおりです。
arn:aws:s3tables:region:account-id:bucket/table-bucket-nameまたは、[S3 を参照] を選択してアカウントからテーブルバケットを選択します。
-
(オプション) 送信先を追加するには、[送信先の追加] を選択します。合計 5 つの送信先に対して、最大 4 つのテーブルバケットを追加できます。
-
-
[IAM ロール] セクションで、レプリケーションロールを設定します。
-
[IAM ロールの選択方法] で、以下のいずれかのオプションを選択します。
-
[新しい IAM ロールの作成] – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。
-
[既存の IAM ロールから選択] – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。
-
[IAM ロールの ARN の入力] – 既存の IAM ロールの ARN を手動で入力します。
-
-
[既存の IAM ロールから選択] を選択した場合は、[IAM ロール] ドロップダウンリストからロールを選択します。
-
(オプション) [表示] を選択して、IAM コンソールで選択したロールのアクセス許可を確認します。
-
-
[複製設定を作成] を選択します。
レプリケーション設定を作成すると、Amazon S3 は最初のバックフィルプロセスを開始します。[テーブルレプリケーションのステータス] セクションでレプリケーションステータスをモニタリングできます。これにより、レプリケーションステータス、レプリケート先テーブル ARN、最後にレプリケートされたメタデータなど、各レプリケート先に関する情報が表示されます。
この手順では、Amazon S3 コンソールを使用してテーブルレベルのレプリケーション設定を作成する方法を示します。テーブルレプリケーション設定は、特定のテーブルに適用され、そのテーブルのバケットレベルのレプリケーション設定を上書きします。
-
AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/
を開きます。 -
ナビゲーションペインで、[テーブルバケット] を選択します。
-
[テーブルバケット] リストで、レプリケートするテーブルが含まれるテーブルバケットの名前を選択します。
-
[Tables] (テーブル) タブを選択します。
-
[テーブル] リストで、レプリケートするテーブルのリンクを選択します。
-
[管理] タブを選択します。
-
[テーブルレプリケーション設定] セクションで、[テーブルレプリケーション設定の作成] を選択します。
-
[送信先] セクションで、レプリケーションの送信先を設定します。
-
[テーブルバケット ARN] フィールドに、レプリケート先テーブルバケットの ARN を入力します。形式は次のとおりです。
arn:aws:s3tables:region:account-id:bucket/table-bucket-nameまたは、[S3 を参照] を選択してアカウントからテーブルバケットを選択します。
-
(オプション) 送信先を追加するには、[送信先の追加] を選択します。合計 5 つの送信先に対して、最大 4 つのテーブルバケットを追加できます。
-
-
[IAM ロール] セクションで、レプリケーションロールを設定します。
-
[IAM ロールの選択方法] で、以下のいずれかのオプションを選択します。
-
[新しい IAM ロールの作成] – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。
-
[既存の IAM ロールから選択] – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。
-
[IAM ロールの ARN の入力] – 既存の IAM ロールの ARN を手動で入力します。
-
-
[既存の IAM ロールから選択] を選択した場合は、[IAM ロール] リストからロールを選択します。
-
(オプション) [表示] を選択して、IAM コンソールで選択したロールのアクセス許可を確認します。
-
-
[複製設定を作成] を選択します。
次に起こること
レプリケーション設定の作成後:
-
Amazon S3 は最初のバックフィルプロセスを開始し、各レプリケート先バケットにレプリカテーブルを作成します
-
バックフィルが開始されるとレプリケーションステータスが [レプリケート中] に変わります
-
[管理] タブでレプリケーションの進行状況をモニタリングできます
-
初期レプリケーション時間は、ソーステーブルのサイズによって異なります
AWS CLI を使用してレプリケーションを設定する
この手順では、AWS CLI を使用してレプリケーションを設定する方法を示します。アカウント ID、リージョン、バケット名を実際の値に置き換えます。すべての送信先バケットをアクセス許可に追加します。
ステップ 1: レプリケーション用の IAM ロールを作成する
まず、Amazon S3 がテーブルをレプリケートするために引き受けることができる IAM ロールを作成します。
-
S3 Tables がロールを引き受けることを許可する信頼ポリシードキュメントを作成します。これを
trust-policy.jsonとして保存します。{ "Version": "2012-10-17" "Statement": [ { "Effect": "Allow", "Principal": { "Service": "replication.s3tables.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
IAM ロールの作成:
aws iam create-role \ --role-nameS3TablesReplicationRole\ --assume-role-policy-document file://trust-policy.json \ --description "Role for S3 Tables replication" -
レプリケーションアクセス許可を付与するアクセス許可ポリシーを作成します。これを
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/*" } ] } -
アクセス許可ポリシーをロールにアタッチします:
aws iam put-role-policy \ --role-nameS3TablesReplicationRole\ --policy-nameS3TablesReplicationPermissions\ --policy-document file://replication-permissions.json -
(オプション) 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: 送信先バケットポリシーを設定する
別の AWS アカウントにレプリケートする場合、レプリケート先アカウントはレプリケート元アカウントにアクセス許可を付与する必要があります。
-
送信先アカウントで、送信先テーブルバケットのバケットポリシーを作成します。これを
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" } ] } -
S3 Tables API を使用してポリシーを適用します。
aws s3tables put-table-bucket-policy \ --table-bucket-arn arn:aws:s3tables:us-west-2:444455556666:bucket/\ --policy file://amzn-s3-demo-table-bucket-cross-account-destinationdestination-bucket-policy.json\ --profiledestination-account -
ソース 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" } ] } -
同様に、送信先 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: レプリケーション設定を作成する
AWS CLI を使用して、テーブルバケットレベルまたはテーブルレベルでレプリケーション設定を作成できます。詳細については、次の手順を参照してください。
このアプローチを使用して、バケット内のすべてのテーブルをレプリケートします。
-
レプリケーション設定ファイルを作成します。これを
bucket-replication-config.jsonとして保存します。例: 同じアカウント内の単一の送信先
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr" } ] } ] }例: リージョン間で複数の送信先
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/" }, { "destinationTableBucketARN": "arn:aws:s3tables:amzn-s3-demo-table-bucket-dreu-west-1:111122223333:bucket/" }, { "destinationTableBucketARN": "arn:aws:s3tables:amzn-s3-demo-table-bucket-euap-south-1:111122223333:bucket/" } ] } ] }amzn-s3-demo-table-bucket-apac例: クロスアカウントレプリケーション
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/" } ] } ] }amzn-s3-demo-table-bucket-partner -
バケットレベルのレプリケーション設定を適用します。
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" }
このアプローチを使用して、特定のテーブルをレプリケートするか、バケットレベルのレプリケーションを上書きします。
-
レプリケーション設定ファイルを作成します。これを
table-replication-config.jsonとして保存します。例: シングルテーブルレプリケーション
{ "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例: 複数の送信先を持つテーブル
{ "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/" }, { "destinationTableBucketARN": "arn:aws:s3tables:amzn-s3-demo-table-bucket-dreu-west-1:111122223333:bucket/" } ] } ] }amzn-s3-demo-table-bucket-eu -
テーブルレベルのレプリケーション設定を適用します。
aws s3tables put-table-replication \ --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/\ --configuration file://amzn-s3-demo-table-bucket-sales-datatable-replication-config.json正常な出力:
{ "versionToken": "xT2LZkFZ0UuTC2h8XqtGLx2Ak6M", "status": "Success" }