Amazon Web Services ブログ

Amazon DynamoDB グローバルテーブルが AWS アカウント間のレプリケーションをサポート

本記事は 2026 年 02 月 03 日 に公開された “Amazon DynamoDB global tables now support replication across AWS accounts” を翻訳したものです。

原文: https://aws.amazon.com/blogs/database/amazon-dynamodb-global-tables-now-support-replication-across-aws-accounts/


Amazon DynamoDB グローバルテーブルは、フルマネージド、マルチリージョン、マルチアクティブなデータベース機能であり、グローバルにスケールするアプリケーションに対してシームレスなデータレプリケーションと高速なローカル読み取り・書き込みパフォーマンスを提供します。

本日、Amazon DynamoDB のマルチアカウントグローバルテーブルを発表します。これにより、複数の AWS アカウントと AWS リージョン間で DynamoDB テーブルデータをレプリケートできるようになります。この機能はグローバルテーブルにアカウントレベルの分離を追加し、より強力な分離と回復性のために、複数の AWS アカウントとリージョン間で DynamoDB テーブルデータをレプリケートできるようになります。

この機能により、DynamoDB は現在、それぞれ異なるアーキテクチャパターン向けに設計された 2 つのグローバルテーブルモデルをサポートしています。

  • 同一アカウントグローバルテーブル – レプリカは単一の AWS アカウント内で作成および管理されます
  • マルチアカウントグローバルテーブル – レプリカは複数の AWS アカウントにデプロイされながら、共有レプリケーショングループに参加します

両方のモデルは、高速なローカル書き込み、非同期レプリケーション、および最終書き込み者優先 (last-writer-wins) の競合解決をサポートしています。ただし、アカウント、権限、暗号化、テーブルガバナンスの管理方法が異なります。マルチアカウントグローバルテーブルは現在、マルチリージョン結果整合性 (MREC) のみをサポートしています。

この記事では、マルチアカウントグローバルテーブルの作成と設定方法を示し、この機能を使用する価値を強調するユースケースを紹介します。

強化されたディザスタリカバリアーキテクチャ

マルチアカウントグローバルテーブルは、ディザスタリカバリソリューションのアーキテクチャ設計方法を変革します。複数の AWS アカウントにデータを分散することで、設定ミス、セキュリティインシデント、またはアカウントレベルの問題の影響を制限するための追加の分離レイヤーを持つことができます。

プライマリアプリケーションが Account1 (us-east-1) で実行され、ディザスタリカバリ環境が Account2 (us-west-2) で動作するシナリオを考えてみましょう。マルチアカウントグローバルテーブルを使用すると、両方のアカウントが重要なデータの同期されたコピーを維持し、複雑なデータ移行手順なしで迅速なフェイルオーバーを可能にします。

組織のコンプライアンスとコスト配分

多くの企業は、組織、セキュリティ、またはコンプライアンス上の理由から、複数の AWS アカウントで運用しています。マルチアカウントグローバルテーブルは、これらの組織が既存のコンプライアンス境界、ガードレール、ガバナンスモデルを尊重しながら、分散インフラストラクチャ全体でデータの整合性を維持するのに役立ちます。

たとえば、金融サービス企業は、異なる事業単位や規制環境に対して個別のアカウントを維持する場合があります。マルチアカウントグローバルテーブルにより、これらの単位は、コンプライアンスフレームワークで要求される分離を維持しながら、重要な参照データを共有できます。さらに、各リージョナルレプリカのコストは、別々の事業単位によって管理される可能性のある AWS アカウントに対応しています。

マルチアカウント戦略の詳細については、AWS アカウント管理と分離および複数の AWS アカウントを使用する利点を参照してください。

DynamoDB マルチアカウントグローバルテーブルの仕組み

マルチアカウントグローバルテーブルは、リソースベースのポリシーで定義された権限を使用して、他のどのアカウントがレプリケーショングループに参加できるか、およびデータのレプリケーションを許可するかを示します。

各レプリカは、別々の AWS アカウントと別々のリージョンに存在する必要があります。N 個のレプリカを持つマルチアカウントグローバルテーブルの場合、N 個の別々のリージョンに N 個のアカウントが必要です。

既存の空でない単一リージョンテーブルから始めて、別のリージョンとアカウントにレプリカテーブルを追加できます。システムは既存のアイテムを新しいテーブルにコピーします。両方のテーブルが同期されると、各テーブルのステータスが ACTIVE と表示されます。

マルチアカウントグローバルテーブルは、ReplicationLatency メトリクスを Amazon CloudWatch に公開します。このメトリクスは、アイテムがレプリカテーブルに書き込まれてから、そのアイテムがグローバルテーブル内の別のレプリカに表示されるまでの経過時間を追跡します。このメトリクスを監視して、アイテムがリモートリージョンにどれだけ迅速にレプリケートされるかを理解できます。

マルチアカウントグローバルテーブル: 設定のレプリケーション動作

マルチアカウントグローバルテーブルを作成する際、各リージョナルレプリカに対して GlobalTableSettingsReplication を ENABLED に設定する必要があります。これは、1 つのリージョンで行われた設定変更が、グローバルテーブルに参加する他のリージョンに自動的に伝播されることを意味します。

ソーステーブルの場合、テーブル作成後に設定のレプリケーションを有効にできます。これは、テーブルが最初にリージョナルテーブルとして作成され、後でマルチアカウントグローバルテーブルにアップグレードされるシナリオをサポートします。

同期される設定と同期されない設定のリストについては、設定の同期を参照してください。

ソリューション概要

この記事では、マルチアカウントグローバルテーブルを使用するために必要な手順の概要を示します。詳細なチュートリアルについては、チュートリアル: グローバルテーブルの作成を参照してください。

この例では、REGION1 の ACCOUNT1 と REGION2 の ACCOUNT2 の 2 つのアカウントを使用します。

新しいテーブルが myTable と呼ばれると仮定して、各テーブルレプリカの Amazon リソースネーム (ARN) を事前に次のように作成できます。

  • ACCOUNT1_TABLE_ARN: “arn:aws:dynamodb:REGION1:ACCOUNT1:table/myTable”
  • ACCOUNT2_TABLE_ARN: “arn:aws:dynamodb:REGION2:ACCOUNT2:table/myTable”
  1. REGION1 に DynamoDB テーブルを作成します。テーブルにアイテムを追加するか、アイテムを持つ既存の単一リージョンテーブルを使用できます。この記事では、テーブルに myTable という名前を付けます。
  2. テーブルの GlobalTableSettingsReplication: ENABLED を設定します。

次のスクリーンショットは、DynamoDB コンソールでのこの設定を示しています。

AWS コマンドラインインターフェイス (AWS CLI) を使用している場合は、create-table コマンド内で –global-table-settings-replication ENABLED を追加することでこれを示すこともできます。

  1. 次の 2 つのステートメントを含むリソースポリシーをテーブルに追加します。
{
    "Version": "2012-10-17",
    "Statement": [
       {
         "Sid": " AllowTrustedAccountsToJoinThisGlobalTable",
         "Effect": "Allow",
         "Principal": {
             "AWS": [<ACCOUNT2>]
         },
         "Action": "dynamodb:AssociateTableReplica",
         "Resource": <ACCOUNT1_TABLE_ARN>
       },
       {
         "Sid": "AllowReplication",
         "Effect": "Allow",
         "Principal": {
             "Service": "replication.dynamodb.amazonaws.com"
         },
         "Action": [
                      "dynamodb: ReadDataForReplication",
                      "dynamodb: WriteDataForReplication",
                      "dynamodb: ReplicateSettings"
                    ],
         "Resource": <ACCOUNT1_TABLE_ARN>,
         "Condition": {
            "StringEquals": {
               "aws:SourceAccount": [<ACCOUNT1>, <ACCOUNT2>],
               "aws:SourceArn": [<ACCOUNT1_TABLE_ARN>,
                                 <ACCOUNT2_TABLE_ARN>]
            }
         }
       }
    ]
}

これらのポリシーの Condition セクションは、DynamoDB サービスリンクロールが指定したテーブル間でデータをレプリケートする権限を持つために必要です。グローバルテーブルを追加のアカウントとリージョンに拡張する必要がある場合は、リソースベースのポリシーに追加のアカウントと ARN を追加できます。

  1. ACCOUNT2 と REGION2 に次の設定で DynamoDB テーブルを作成します。
    • GlobalTableSettingsReplication: ENABLED
    • 次の形式のリソースポリシーを含めます。
{
    "Version": "2012-10-17",
    "Statement": [
       {
         "Sid": "AllowReplication",
         "Effect": "Allow",
         "Principal": {
             "Service": "replication.dynamodb.amazonaws.com"
         },
         "Action": [
                      "dynamodb: ReadDataForReplication",
                      "dynamodb: WriteDataForReplication",
                      "dynamodb: ReplicateSettings"
         ],
         "Resource": <ACCOUNT2_TABLE_ARN>,
         "Condition": {
            "StringEquals": {
               "aws:SourceAccount": [<ACCOUNT1>, <ACCOUNT2>],
               "aws:SourceArn": [<ACCOUNT1_TABLE_ARN>, <ACCOUNT2_TABLE_ARN>]
            }
         }
       }
    ]
}

DynamoDB コンソールでもこの手順を実行できます。Create table ドロップダウンメニューを選択し、Create cross-account global table replica を選択します。

次のスクリーンショットは、必要な設定の詳細を示しています。

ユースケース

ディザスタプランニングの 1 つのタイプは、悪意のある攻撃者が Account1 の完全な制御を獲得するシナリオです。これが発生した場合、Account2 の所有者は、テーブルのリソースポリシーを更新してレプリケーションアクションを拒否することで、レプリケーションを停止できます。テーブルでポイントインタイムリカバリが有効になっている場合、増分エクスポートAmazon Simple Storage Service (Amazon S3) に実行して、過去 24 時間のすべての書き込みのスナップショットを JSON 形式で取得できます。その後、変更されたアイテムの新しいイメージと古いイメージを確認して、悪意を持って変更された可能性のあるアイテムの元の状態を確認できます。これはグローバルテーブルの異常な状態としてフラグが立てられるため、AWS サポートがレプリケーションが停止した理由を確認するために連絡する場合があります。

別のユースケースは、AWS アカウント間でテーブルを移動したい場合です。執筆時点では、マルチアカウントグローバルテーブルは同一リージョンレプリケーションをサポートしていないため、一時的に別のリージョンを含む一連の手順を実行する必要があります。概要レベルの手順は次のとおりです。

  1. DynamoDB への認証に使用する AWS アカウントとリージョンを切り替えられるようにアプリケーションを設定します。
  2. この記事で説明した手順を使用して、次を実行します。
    1. Account1、Region1 のテーブルにリソースポリシーを追加します。
    2. Account2、Region2 にリンクされたレプリカテーブルを作成します。
  3. Account2、Region2 の DynamoDB テーブルを使用するようにアプリケーションを調整します。
  4. Account1、Region1 のテーブルレプリカを削除します。
  5. Account2 を使用して、update-table を呼び出し、Region1 に新しい同一アカウントレプリカを追加するようリクエストします。
  6. テーブルのステータスを確認します。ACTIVE に戻ると、Account2、Region1 のテーブルレプリカの準備が整います。
  7. Account2、Region1 を使用するようにアプリケーションを切り替えます。
  8. (オプション) Account2、Region2 のテーブルレプリカを削除します。

まとめ

DynamoDB グローバルテーブルは、複数の AWS アカウント間のレプリケーションをサポートするようになりました。これにより、アカウントレベルの分離による回復性が向上し、カスタマイズされたセキュリティとデータ境界制御がサポートされ、事業単位または環境ごとのワークロードの調整が可能になり、ガバナンス要件が簡素化されます。詳細については、グローバルテーブル – マルチアクティブ、マルチリージョンレプリケーションおよびAmazon DynamoDB の回復性とディザスタリカバリを参照してください。コメントセクションでフィードバックをお知らせください。


著者について

Robert McCauley

Robert McCauley

Robert は、ボストンを拠点とする Amazon DynamoDB スペシャリストソリューションアーキテクトです。2012 年に Amazon Robotics の SQL 開発者として Amazon でのキャリアを開始し、その後 Alexa Skills ソリューションアーキテクトを経て、AWS に参加しました。