[アップデート] Amazon DynamoDBグローバルテーブルがマルチアカウントのレプリケーションをサポートしました

[アップデート] Amazon DynamoDBグローバルテーブルがマルチアカウントのレプリケーションをサポートしました

Amazon DynamoDBグローバルテーブルが、複数リージョンかつ複数アカウント間で設定可能になりました。
2026.02.04

Amazon DynamoDBグローバルテーブルがマルチアカウントで利用可能に!

おのやんです。

この度のアップデートにより、Amazon DynamoDB(以下、DynamoDB)グローバルテーブルがマルチアカウントのレプリケーションをサポートしました。

https://aws.amazon.com/jp/about-aws/whats-new/2026/02/dynamodb-gt-multi-account/

今までのDynamoDBグローバルテーブルは、ひとつのAWSアカウントの中で複数リージョンにテーブルをレプリケートし、ユーザーと位置情報的に近いテーブルに対してデータを読み書きしたり、DynamoDBテーブルをグローバル単位でレプリケートして可用性を高めたり、みたいなメリットがありました。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/GlobalTables.html

こちらに追加で、DynamoDBグローバルテーブルが複数のAWSアカウント間でもレプリケートできるようになりました。これにより、例えばDynamoDBグローバルテーブルを作成して、複数のAWSアカウントと複数のリージョンにまたがってデータを同期するような構成が可能になりましたDynamoDBテーブルのアカウント間データ同期って確か今まではできなかったはず(参考:DynamoDBのGlobal tablesを利用して異なるアカウントへデータを同期できますでしょうか | AWS re:Post)なので、潜在的な需要もありそうで、なかなかデカいアップデートですね。

ただし、後述しますが「同一リージョン」の「別アカウント」にグローバルテーブルを作成することはできません。ここは注意が必要ですね。

こちらの機能は全AWSリージョンで対応しています。

やってみた

ということで実際に検証してみます。今回はアカウント1(アカウントID: 111122223333)の東京リージョン(ap-northeast-1)と、アカウント2(アカウントID: 444455556666)の大阪リージョン(ap-northeast-3)で、グローバルテーブルを構成したいと思います。

AWSドキュメントに、マルチアカウントのDynamoDBグローバルテーブル作成手順が記載されていましたので、今回はこちらに沿って作業します。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/V2globaltables_MA.tutorial.html

AWS CLIは最新版にアップデートする必要がありますので、AWSドキュメントからダウンロード・インストールします。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

まずは、東京リージョンに作成するアカウント1用のDynamoDB許可ポリシーを作成します。

cat > /tmp/source-resource-policy.json << 'EOF'
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:ap-northeast-3:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable"
                    ]
                }
            }
        },
        {
            "Sid": "AllowTrustedAccountsToJoinThisGlobalTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:AssociateTableReplica"
            ],
            "Resource": "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable",
            "Principal": {"AWS": ["444455556666"]}
        }
    ]
}
EOF

アカウント1のプロファイルに切り替えた上で、AWS CLIで東京リージョンのDynamoDBグローバルテーブルを作成します。

aws dynamodb create-table \
    --table-name MusicTable \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode PAY_PER_REQUEST \
    --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
    --global-table-settings-replication-mode ENABLED \
    --resource-policy file:///tmp/source-resource-policy.json \
    --region ap-northeast-1

AWSマネジメントコンソールの、アカウント1の東京リージョンで、作成したテーブルが確認できます。

アカウント1の東京リージョンに作成されたMusicTable

アクセス許可のタブからも、先ほど作成した許可ポリシーが適用できていますね。

アカウント1のMusicTableに適用されたリソースポリシー

続いて、大阪リージョンに作成するアカウント2用のDynamoDB許可ポリシーを作成します

cat > /tmp/dest-resource-policy.json << 'EOF'
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:ap-northeast-3:444455556666:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:ap-northeast-3:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable"
                    ]
                }
            }
        }
    ]
}
EOF

アカウント2のプロファイルに切り替えて、大阪リージョンでDynamoDBのレプリカを作成します。

aws dynamodb create-table \
    --table-name MusicTable \
    --global-table-source-arn "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable" \
    --resource-policy file:///tmp/dest-resource-policy.json \
    --global-table-settings-replication-mode ENABLED \
    --region ap-northeast-3

AWSマネジメントコンソールの、アカウント2の大阪リージョンで、作成したレプリカが確認できます。

アカウント2の大阪リージョンに作成されたMusicTableレプリカ

先ほど作成した許可ポリシーも適用できていますね。

アカウント2のMusicTableに適用されたリソースポリシー

グローバルテーブルのタブからも確認してみます。セキュリティ上アカウントIDはともにマスクしていますが、下のアカウントIDはアカウント1の、上のアカウントIDはアカウント2のものになっています。

マルチアカウントグローバルテーブルのレプリカ一覧(アカウント列が追加されている)

過去のブログを見てみると、AWSマネジメントコンソール上のグローバルテーブルの表示が変わっているのがわかります。「レプリケーションリージョン」が「リージョン」に、また「新しくアカウント」のカラムが追加されています。

以前のグローバルテーブル画面(レプリケーションリージョン列のみでアカウント列がない)

(参考:[アップデート] マルチリージョン強整合性のAmazon DynamoDBグローバルテーブルがAWS FISに対応したのでやってみた | DevelopersIO

東京リージョンのDynamoDBテーブルに、データを書き込んでみます。

aws dynamodb put-item \
    --table-name MusicTable \
    --item '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region ap-northeast-1

アカウント1の東京リージョンのDynamoDBテーブルにデータが書き込まれました。

アカウント1の東京リージョンのMusicTableに書き込まれたデータ

レプリケーションにより、アカウント2の大阪リージョンのDynamoDBテーブルにもデータが書き込まれていました。

アカウント2の大阪リージョンのMusicTableにレプリケーションされたデータ

「同一リージョン」の「別アカウント」にグローバルテーブルを作成することはできない

アカウント間でグローバルテーブルを作成できるという内容でしたが、グローバルテーブル本来の制約はそのままです。グローバルテーブルはもともと同一リージョンには作成できませんので、今回のケースだと、例えば東京リージョンのままで別アカウントにグローバルテーブルを作成することはできません。

グローバルテーブルのレプリカを作成できるリージョンとアカウントの組み合わせ表

試しに、アカウント2の東京リージョンに、アカウント1の東京リージョンのDynamoDBグローバルテーブルレプリカを作ろうとしても、エラーになります。

$ cat > /tmp/dest-resource-policy-cannot.json << 'EOF'
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:ap-northeast-1:444455556666:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:ap-northeast-1:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable"
                    ]
                }
            }
        }
    ]
}
EOF

$ aws dynamodb create-table \
    --table-name MusicTable \
    --global-table-source-arn "arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable" \
    --resource-policy file:///tmp/dest-resource-policy-cannot.json \
    --global-table-settings-replication-mode ENABLED \
    --region ap-northeast-1

An error occurred (ValidationException) when calling the CreateTable operation: A replica cannot be created in region 'ap-northeast-1' for a global table with source 'arn:aws:dynamodb:ap-northeast-1:111122223333:table/MusicTable' because a global table cannot have more than one replica in the same region.

グローバルテーブルが、より広範囲にレプリケート可能に

複数のアカウントと異なるリージョンにまたがって、DynamoDBのデータを同期する設定が可能です。別アカウントにもレプリケーションの範囲を広げることで、より可用性に優れたDynamoDBテーブルが構成できるのではないでしょうか。

この記事をシェアする

FacebookHatena blogX

関連記事