S3 Tables レプリケーションの設定 - Amazon Simple Storage Service

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 コンソールを使用してテーブルバケットレプリケーション設定を作成する方法を示します。テーブルバケットレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。

  1. AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/ を開きます。

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

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

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

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

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

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

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

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

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

    1. [IAM ロールの選択方法] で、以下のいずれかのオプションを選択します。

      • [新しい IAM ロールの作成] – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。

      • [既存の IAM ロールから選択] – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。

      • [IAM ロールの ARN の入力] – 既存の IAM ロールの ARN を手動で入力します。

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

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

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

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

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

  1. AWS Management Console にサインインし、Amazon S3 コンソール https://console.aws.amazon.com/s3/ を開きます。

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

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

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

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

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

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

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

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

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

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

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

    1. [IAM ロールの選択方法] で、以下のいずれかのオプションを選択します。

      • [新しい IAM ロールの作成] – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。

      • [既存の IAM ロールから選択] – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。

      • [IAM ロールの ARN の入力] – 既存の IAM ロールの ARN を手動で入力します。

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

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

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

次に起こること

レプリケーション設定の作成後:

  • Amazon S3 は最初のバックフィルプロセスを開始し、各レプリケート先バケットにレプリカテーブルを作成します

  • バックフィルが開始されるとレプリケーションステータスが [レプリケート中] に変わります

  • [管理] タブでレプリケーションの進行状況をモニタリングできます

  • 初期レプリケーション時間は、ソーステーブルのサイズによって異なります

AWS CLI を使用してレプリケーションを設定する

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

ステップ 1: レプリケーション用の IAM ロールを作成する

まず、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" } ] }
  2. IAM ロールの作成:

    aws iam create-role \ --role-name S3TablesReplicationRole \ --assume-role-policy-document file://trust-policy.json \ --description "Role for S3 Tables replication"
  3. レプリケーションアクセス許可を付与するアクセス許可ポリシーを作成します。これを 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/*" } ] }
  4. アクセス許可ポリシーをロールにアタッチします:

    aws iam put-role-policy \ --role-name S3TablesReplicationRole \ --policy-name S3TablesReplicationPermissions \ --policy-document file://replication-permissions.json
  5. (オプション) 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 アカウントにレプリケートする場合、レプリケート先アカウントはレプリケート元アカウントにアクセス許可を付与する必要があります。

  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" } ] }
  2. 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
  3. ソース 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" } ] }
  4. 同様に、送信先 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 を使用して、テーブルバケットレベルまたはテーブルレベルでレプリケーション設定を作成できます。詳細については、次の手順を参照してください。

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

  1. レプリケーション設定ファイルを作成します。これを 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/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" } ] } ] }
    例: クロスアカウントレプリケーション
    { "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole", "rules": [ { "destinations": [ { "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/amzn-s3-demo-table-bucket-partner" } ] } ] }
  2. バケットレベルのレプリケーション設定を適用します。

    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" }

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

  1. レプリケーション設定ファイルを作成します。これを 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/amzn-s3-demo-table-bucket-dr" }, { "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu" } ] } ] }
  2. テーブルレベルのレプリケーション設定を適用します。

    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" }