翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
グローバルテーブルの概要
重要な事実
-
グローバルテーブルには、バージョン 2017.11.29 (レガシー) (v1 と呼ばれることもあります) とバージョン 2019.11.21 (現行) (v2 と呼ばれることもあります) の 2 つのバージョンがあります。このガイドでは、現在のバージョンのみに焦点を当てています。
-
DynamoDB (グローバルテーブルなし) はリージョン別サービスです。つまり、可用性が高く、アベイラビリティーゾーン全体の障害など、インフラストラクチャの障害に対して本質的に回復力があります。単一リージョンの DynamoDB テーブルは、99.99% の可用性を実現するように設計されています。詳細については、DynamoDB サービスレベルアグリーメント (SLA)
を参照してください。 -
DynamoDB グローバルテーブルは、2 つ以上のリージョン間でデータをレプリケートします。マルチリージョン DynamoDB テーブルは、99.999% の可用性を実現するように設計されています。適切な計画を立てることで、グローバルテーブルはリージョンの障害に強いアーキテクチャを作成するのに役立ちます。
-
DynamoDB にはグローバルエンドポイントはありません。すべてのリクエストは、そのリージョンにローカルなグローバルテーブルインスタンスにアクセスするリージョンエンドポイントに対して行われます。
-
DynamoDB への呼び出しは、リージョン間で実行しないでください。ベストプラクティスは、1 つのリージョンに拠点を置くアプリケーションが、そのリージョンのローカル DynamoDB エンドポイントにのみ直接アクセスすることです。リージョン内 (DynamoDB レイヤー内または周囲のスタック内) で問題が検出された場合は、エンドユーザートラフィックを別のリージョンでホストされている別のアプリケーションエンドポイントにルーティングする必要があります。グローバルテーブルにより、すべてのリージョンにホームを置くアプリケーションが同じデータにアクセスできるようになります。
整合性モード
グローバルテーブルを作成するときは、その整合性モードを設定します。グローバルテーブルは、2025 年 6 月に導入されたマルチリージョン結果整合性 (MREC) とマルチリージョンの強力な整合性 (MRSC) の 2 つの整合性モードをサポートしています。
グローバルテーブルの作成時に整合性モードを指定しない場合、グローバルテーブルはデフォルトで MREC になります。グローバルテーブルに、異なる整合性モードで設定されたレプリカを含めることはできません。グローバルテーブルの作成後にグローバルテーブルの整合性モードを変更することはできません。
MREC に関する重要な事実
-
MREC を使用するグローバルテーブルは、アクティブ/アクティブレプリケーションモデルを使用します。DynamoDB の観点から見ると、各リージョンのテーブルは読み取りと書き込みのリクエストを同じように受け入れることができます。書き込みリクエストを受信すると、ローカルレプリカテーブルは書き込みオペレーションをバックグラウンドで他の参加リモートリージョンにレプリケートします。
-
項目は個別にレプリケートされます。1 つのトランザクション内で更新された項目は、一緒にレプリケートされない場合があります。
-
ソースリージョンの各テーブルパーティションは、書き込みオペレーションを他のすべてのパーティションと並行してレプリケートします。リモートリージョン内の書き込みオペレーションのシーケンスは、ソースリージョン内で発生した書き込みオペレーションのシーケンスと一致しない場合があります。テーブルパーティションの詳細については、ブログ記事「DynamoDB のスケーリング: パーティション、ホットキー、ヒートに応じた分割がパフォーマンスに与える影響
」を参照してください。 -
新しく書き込まれた項目は、通常、1 秒以内にすべてのレプリカテーブルに伝播されます。近くのリージョンにはより速く伝播される傾向があります。
-
Amazon CloudWatch は、リージョンのペアごとに
ReplicationLatency
メトリクスを提供します。これは、到着した項目を調べ、到着時間と最初の書き込み時間を比較し、平均を計算することで計算されます。タイミングはソースリージョンの CloudWatch 内に保存されます。平均タイミングと最大タイミングを表示すると、平均および最悪の場合のレプリケーションラグを判断するのに役立ちます。このレイテンシーには SLA はありません。 -
2 つの異なるリージョンで個々の項目がほぼ同じ時刻 (この
ReplicationLatency
ウィンドウ内) に更新され、2 番目の書き込みオペレーションが最初の書き込みオペレーションがレプリケートされる前に行われる場合、書き込みの競合が発生する可能性があります。MREC を使用するグローバルテーブルは、書き込みオペレーションのタイムスタンプに基づいて、最後のライターウィンメカニズムを使用してこのような競合を解決します。最初のオペレーションは 2 番目のオペレーションに「失われる」します。これらの競合は CloudWatch または には記録されません AWS CloudTrail。 -
各項目には、最終書き込みタイムスタンプがプライベートシステムプロパティとして保持されます。最後のライター獲得アプローチは、受信アイテムのタイムスタンプが既存のアイテムのタイムスタンプより大きいことを要求する条件付き書き込みオペレーションを使用して実装されます。
-
グローバルテーブルは、すべての項目をすべての参加リージョンにレプリケートします。レプリケーションスコープが異なる場合は、複数のグローバルテーブルを作成し、各テーブルに異なる参加リージョンを割り当てることができます。
-
ローカルリージョンは、レプリカリージョンがオフラインまたは
ReplicationLatency
増加しても書き込みオペレーションを受け入れます。ローカルテーブルは、各項目が成功するまで、リモートテーブルへの項目のレプリケーションを試行し続けます。 -
万一、リージョンが完全にオフラインになった場合、後でオンラインに戻ると、保留中のすべてのアウトバウンドレプリケーションとインバウンドレプリケーションが再試行されます。テーブルを同期状態に戻すために特別なアクションは必要ありません。最後のライターが勝つメカニズムにより、データが最終的に一貫性を持つようになります。
-
DynamoDB MREC テーブルに新しいリージョンをいつでも追加できます。DynamoDB は、初期同期と継続的なレプリケーションを処理します。リージョン (元のリージョンも含む) を削除することもできます。これにより、そのリージョンのローカルテーブルが削除されます。
MRSC に関する重要な事実
-
MRSC を使用するグローバルテーブルは、アクティブ/アクティブレプリケーションモデルも採用しています。DynamoDB の観点から見ると、各リージョンのテーブルは読み取りと書き込みのリクエストを同じように受け入れることができます。MRSC グローバルテーブルレプリカの項目の変更は、書き込みオペレーションが正常なレスポンスを返す前に、少なくとも 1 つの他のリージョンに同期的にレプリケートされます。
-
MRSC レプリカに対する強力な整合性のある読み込み操作は、常に項目の最新バージョンを返します。条件付き書き込みオペレーションは、常に条件式を項目の最新バージョンと照合して評価します。更新は、常に項目の最新バージョンに対して動作します。
-
MRSC レプリカに対する結果整合性のある読み取りオペレーションには、最近別のリージョンで発生した変更が含まれず、同じリージョンで最近発生した変更も含まれない場合があります。
-
書き込みオペレーションは、別のリージョンで既に変更されている項目を変更しようとすると、
ReplicatedWriteConflictException
例外で失敗します。ReplicatedWriteConflictException
例外で失敗した書き込みオペレーションは再試行でき、項目が別のリージョンで変更されなくなった場合に成功します。 -
MRSC では、書き込みオペレーションと強力な整合性のある読み取りオペレーションのレイテンシーが高くなります。これらのオペレーションには、リージョン間の通信が必要です。この通信は、アクセスされているリージョンとグローバルテーブルに参加している最も近いリージョンとの間のラウンドトリップレイテンシーに基づいて増加するレイテンシーを追加する傾向があります。(詳細については、 AWS 「re:Invent 2024 presentation, Multi-Region strong consistency with Amazon DynamoDB global tables
」を参照してください。) 結果整合性のある読み込みオペレーションでは、余分なレイテンシーは発生しません。リージョンでこれらのレイテンシーを実験的に計算できるオープンソースのテスターツール があります。 -
項目は個別にレプリケートされます。MRSC を使用するグローバルテーブルは、トランザクション APIsをサポートしていません。
-
MRSC グローバルテーブルは、厳密に 3 つのリージョンにデプロイする必要があります。MRSC グローバルテーブルは、3 つのレプリカ、または 2 つのレプリカと 1 つの監視で設定できます。監視は、グローバルテーブルレプリカに書き込まれた最近のデータを含む MRSC グローバルテーブルのコンポーネントです。監視は、MRSC の可用性アーキテクチャをサポートしながら、フルレプリカに代わるオプションを提供します。監視に対して読み取りまたは書き込み操作を実行することはできません。監視では、ストレージや書き込みのコストは発生しません。監視は、2 つのレプリカとは別のリージョンにあります。
-
MRSC グローバルテーブルを作成するには、1 つのレプリカと監視を追加するか、データを含まない既存の DynamoDB テーブルに 2 つのレプリカを追加します。既存の MRSC グローバルテーブルに追加のレプリカを追加することはできません。MRSC グローバルテーブルから単一のレプリカまたは監視を削除することはできません。MRSC グローバルテーブルから 2 つのレプリカを削除するか、1 つのレプリカと監視を削除できます。2 番目のシナリオでは、残りのレプリカを単一リージョンの DynamoDB テーブルに変換します。
-
MRSC グローバルテーブルに監視が設定されているかどうか、およびどのリージョンが設定されているかは、DescribeTable API の出力から判断できます。監視者は DynamoDB によって所有および管理されており、設定されているリージョンの AWS アカウント には表示されません。
-
MRSC グローバルテーブルは、次のリージョンセットで使用できます。
-
US リージョンセット: 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)
-
EU リージョンセット: 欧州 (アイルランド)、欧州 (ロンドン)、欧州 (パリ)、欧州 (フランクフルト)
-
AP リージョンセット: アジアパシフィック (東京)、アジアパシフィック (ソウル)、アジアパシフィック (大阪)
-
-
MRSC グローバルテーブルはリージョンセットにまたがることはできません。例えば、MRSC グローバルテーブルに、米国リージョンセットと欧州リージョンセットの両方のレプリカを含めることはできません。
-
MRSC グローバルテーブルでは、有効期限 (TTL) はサポートされていません。
-
ローカルセカンダリインデックス (LSI) は、MRSC グローバルテーブルではサポートされていません。
-
CloudWatch Contributor Insights の情報は、オペレーションが発生したリージョンについてのみ報告されます。
-
ローカルリージョンは、レプリカまたは監視をホストする 2 番目のリージョンがクォーラムの確立に使用できる限り、すべての読み取りおよび書き込みオペレーションを受け入れます。2 番目のリージョンが利用できない場合、ローカルリージョンは結果整合性のある読み込みのみを処理できます。
-
万一、リージョンが完全にオフラインになった場合、後でオンラインに戻ると、自動的に追いつきます。キャッチアップされるまで、書き込みオペレーションと強力な整合性のある読み取りオペレーションはエラーを返します。ただし、結果整合性のある読み取りオペレーションは、これまでリージョンに伝播されたデータを返し、リーダーノードとローカルレプリカ間の通常のローカル整合性動作を返します。テーブルを同期に戻すための特別なアクションは必要ありません。
ユースケース
MREC グローバルテーブルには以下の利点があります。
-
低レイテンシーの読み取りオペレーション。データのコピーをエンドユーザーの近くに配置して、読み取りオペレーション中のネットワークレイテンシーを減らすことができます。データは
ReplicationLatency
値と同じくらい最新に保たれます。 -
低レイテンシーの書き込みオペレーション。エンドユーザーは近くのリージョンに書き込むことで、ネットワークレイテンシーと書き込みオペレーションの完了時間を短縮できます。書き込みトラフィックは、競合がないことを確認するために慎重にルーティングする必要があります。ルーティングのテクニックについては、後のセクションで説明します。
-
シームレスなリージョンの移行。新しいリージョンを追加し、古いリージョンを削除して、データレイヤーでダウンタイムを発生させることなく、あるリージョンから別のリージョンにデプロイを移行できます。
MREC と MRSC グローバルテーブルの両方に次の利点があります。
-
回復力とディザスタリカバリの向上。リージョンのパフォーマンスが低下したり、完全な停止が発生した場合は、そのリージョンから退避できます (つまり、そのリージョンに送信されるリクエストの一部またはすべてを移動します)。グローバルテーブルを使用すると、月間稼働率の DynamoDB SLA
が 99.99% から 99.999% に増加します。MREC を使用すると、目標復旧時点 (RPO) と目標復旧時間 (RTO) を秒単位で測定できます。MRSC を使用すると、RPO はゼロになります。 例えば、re:Invent 2022 で、注文管理システムに DynamoDB グローバルテーブルを使用する方法について紹介
した Fidelity investments です。 DynamoDB 目標は、アベイラビリティーゾーンやリージョンの障害に対する耐障害性を維持しながら、オンプレミス処理では達成できなかった規模で確実に低レイテンシー処理を実現することでした。
回復力とディザスタリカバリを目標とする場合、MRSC テーブルの書き込みレイテンシーは高く、強力な整合性のある読み込みレイテンシーは高くなりますが、RPO はゼロです。MREC グローバルテーブルは、レプリカ間のレプリケーション遅延に等しい RPO をサポートします。通常はレプリカリージョンに応じて数秒です。詳細については、DynamoDB ドキュメントの「整合性モード」を参照してください。