DynamoDB グローバルテーブルの仕組み - Amazon DynamoDB

DynamoDB グローバルテーブルの仕組み

以下のセクションでは、Amazon DynamoDB におけるグローバルテーブルの概念および動作について説明します。

概念

グローバルテーブルは、AWS リージョン間でテーブルデータをレプリケートする DynamoDB 機能です。

レプリカテーブル (または、レプリカ) は、グローバルテーブルの一環として機能する DynamoDB テーブルです。グローバルテーブルは、異なる AWS リージョンにまたがる 2 つ以上のレプリカテーブルで構成されます。各グローバルテーブルは、AWS リージョンごとに 1 つのレプリカのみを持つことができます。グローバルテーブル内のすべてのレプリカは、同じテーブル名、プライマリキースキーマ、および項目データを共有します。

アプリケーションが 1 つのリージョンのレプリカにデータを書き込むと、DynamoDB は自動的にその書き込みをグローバルテーブル内の他のすべてのレプリカにレプリケートします。グローバルテーブルの詳しい使用方法については、チュートリアル: グローバルテーブルの作成 を参照してください。

バージョン

DynamoDB グローバルテーブルには、バージョン 2019.11.21 (現行) とバージョン 2017.11.29 (レガシー) の 2 つのバージョンがあります。可能な限り、バージョン 2019.11.21 (現行) を使用する必要があります。このドキュメントセクションの情報は、バージョン 2019.11.21 (現行) 用です。詳細については、「グローバルテーブルのバージョンを確認する」を参照してください。

可用性

グローバルテーブルは、マルチリージョンの高可用性アーキテクチャの実装を容易にすることで、ビジネス継続性の向上に役立ちます。1 つの AWS リージョンのワークロードに障害が発生した場合、アプリケーショントラフィックを別のリージョンに移行し、同じグローバルテーブル内の別のレプリカテーブルに対して読み取りと書き込みを実行できます。

グローバルテーブル内の各レプリカテーブルは、単一リージョンの DynamoDB テーブルと同じ耐久性と可用性を提供します。グローバルテーブルは 99.999% の可用性サービスレベルアグリーメント (SLA) を提供しますが、単一リージョンテーブルでは 99.99% です。

整合性モード

グローバルテーブルを作成するときに、その整合性モードを設定できます。グローバルテーブルは、マルチリージョンの結果整合性 (MREC) およびマルチリージョンの強力な整合性 (MRSC) の 2 つの整合性モードをサポートしています。

グローバルテーブルの作成時に整合性モードを指定しない場合、グローバルテーブルはデフォルトでマルチリージョンの結果整合性 (MREC) になります。グローバルテーブルには、異なる整合性モードで設定されたレプリカを含めることはできません。グローバルテーブルの整合性モードを作成後に変更することはできません。

マルチリージョンの結果整合性 (MREC)

マルチリージョンの結果整合性 (MREC) は、グローバルテーブルのデフォルトの整合性モードです。MREC グローバルテーブルレプリカの項目の変更は、通常は 1 秒以内で他のすべてのレプリカに非同期でレプリケートされます。万一、MREC グローバルテーブルのレプリカで分離または障害が発生した場合、他のリージョンにまだレプリケートされていないデータは、レプリカが正常になるとレプリケートされます。

同じ項目が複数のリージョンで同時に変更された場合、DynamoDB は項目ごとに最新の内部タイムスタンプを使用して競合を解決します。これは「最終書き込み者優先」競合解決方法と呼ばれます。最終的に、項目はすべてのレプリカで最後の書き込みによって作成されたバージョンに収束します。

強力な整合性のある読み込みオペレーションは、その項目が読み取りが発生したリージョンで最後に更新された場合は項目の最新バージョンを返しますが、項目が別のリージョンで最後に更新された場合は古いデータを返す可能性があります。条件付き書き込みは、リージョン内の項目のバージョンに対して条件式を評価します。

MREC グローバルテーブルを作成するには、既存の DynamoDB テーブルにレプリカを追加します。レプリカを追加しても、既存の単一リージョン DynamoDB テーブルまたはグローバルテーブルレプリカのパフォーマンスには影響しません。MREC グローバルテーブルにレプリカを追加して、データがレプリケートされるリージョンの数を拡張したり、不要になったレプリカを MREC グローバルテーブルから削除したりできます。MREC グローバルテーブルは、DynamoDB が利用可能な任意のリージョンにレプリカを持つことができ、AWS パーティション内のリージョンと同じ数のレプリカを持つことができます。

マルチリージョンの強力な整合性 (MRSC)

グローバルテーブルを作成する際に、マルチリージョンの強力な整合性 (MRSC) モードを設定できます。MRSC グローバルテーブルレプリカの項目の変更は、書き込み操作が正常なレスポンスを返す前に、少なくとも 1 つの他のリージョンに同期的にレプリケートされます。

MRSC レプリカに対する強力な整合性のある読み込み操作は、常に項目の最新バージョンを返します。条件付き書き込みは、常に条件式を項目の最新バージョンと照合して評価します。

別のリージョンで既に変更されている項目を変更しようとすると、書き込み操作は ReplicatedWriteConflictException で失敗します。ReplicatedWriteConflictException で失敗した書き込みは再試行でき、項目が別のリージョンで変更されなくなった場合に成功します。

MRSC グローバルテーブルは、3 つのレプリカ、または 2 つのレプリカと 1 つの監視で設定できます。監視は、グローバルテーブルレプリカに書き込まれたデータを含む MRSC グローバルテーブルのコンポーネントであり、MRSC の可用性アーキテクチャをサポートしながら、完全なレプリカに代わるオプションを提供します。監視に対して読み取りまたは書き込み操作を実行することはできません。監視は、2 つのレプリカとは異なるリージョンにあります。

MRSC グローバルテーブルを作成する際、MRSC テーブルの作成時にレプリカと監視デプロイの両方のリージョンを選択します。MRSC グローバルテーブルに監視が設定されているかどうか、どのリージョンに設定されているかは、DescribeTable API の出力から判断できます。監視は DynamoDB によって所有および管理され、設定されているリージョンの AWS アカウントには表示されません。

MRSC グローバルテーブルは、厳密に 3 つのリージョンにデプロイする必要があります。MRSC グローバルテーブルを作成するには、データを含まない既存の DynamoDB テーブルに 1 つのレプリカと監視または 2 つのレプリカを追加します。既存の MRSC グローバルテーブルに追加のレプリカを追加することはできません。MRSC グローバルテーブルから単一のレプリカまたは監視を削除することはできません。MRSC グローバルテーブルから 2 つのレプリカを削除するか、1 つのレプリカと監視を削除して、残りのレプリカを単一リージョンの DynamoDB テーブルに変換できます。

MRSC グローバルテーブルには、次の考慮事項が適用されます。

  • MRSC グローバルテーブルは、次のリージョンセットで使用できます。

    • US リージョンセット: 米国東部 (バージニア北部)、米国東部 (オハイオ)、米国西部 (オレゴン)

    • EU リージョンセット: 欧州 (アイルランド)、欧州 (ロンドン)、欧州 (パリ)、欧州 (フランクフルト)

    • AP リージョンセット: アジアパシフィック (東京)、アジアパシフィック (ソウル)、アジアパシフィック (大阪)。

  • MRSC グローバルテーブルはリージョンセットにまたがることはできません (例えば、MRSC グローバルテーブルに米国と欧州の両方のリージョンセットからのレプリカを含めることはできません)。

  • MRSC グローバルテーブルでは、有効期限 (TTL) はサポートされていません。

  • ローカルセカンダリインデックス (LSI) は、MRSC グローバルテーブルではサポートされていません。

  • CloudWatch Contributor Insights の情報は、オペレーションが発生したリージョンについてのみ報告されます。

整合性モードの選択

マルチリージョン整合性モードを選択するための重要な基準は、アプリケーションが低レイテンシーの書き込みと強力な整合性のある読み込みを優先するか、グローバルな強力な整合性を優先するかです。

MREC グローバルテーブルは、MRSC グローバルテーブルと比較して書き込みレイテンシーが低く、強力な整合性のある読み込みレイテンシーを持ちます。MREC グローバルテーブルは、レプリカ間のレプリケーション遅延と等しい目標復旧時点 (RPO) をサポートできます。通常、レプリカのリージョンに応じて数秒です。

次の場合は、MREC モードを使用する必要があります。

  • アプリケーションは、データが別のリージョンで更新された場合に、強力な整合性のある読み込みオペレーションから返される古いデータを許容できます。

  • マルチリージョンの読み取り整合性よりも、書き込みレイテンシーが低く、強力な整合性のある読み込みレイテンシーを優先します。

  • マルチリージョンの高可用性戦略では、0 を超える RPO を許容できます。

MRSC グローバルテーブルは、MREC グローバルテーブルと比較して書き込みレイテンシーが高く、強力な整合性のある読み込みレイテンシーを持ちます。MRSC グローバルテーブルは、目標復旧時点 (RPO) ゼロをサポートします。

MRSC モードは、次の場合に使用します。

  • 複数のリージョン間で強力な整合性のある読み込みが必要です。

  • グローバル読み取り整合性は、書き込みレイテンシーの短縮よりも優先されます。

  • マルチリージョンの高可用性戦略では、RPO を 0 にする必要があります。

グローバルテーブルのモニタリング

マルチリージョンの結果整合性 (MREC) 用に設定されたグローバルテーブルは ReplicationLatency メトリクスを CloudWatch に発行します。このメトリクスは、項目がレプリカテーブルに書き込まれてから、その項目がグローバルテーブルの別のレプリカに表示されるまでの経過時間を追跡します。ReplicationLatency はミリ秒単位で表し、グローバルテーブル内のすべての送信元と送信先のリージョンペアに対して出力されます。

一般的な ReplicationLatency 値は、選択した AWS リージョン間の距離と、ワークロードタイプやスループットなどの他の変数によって異なります。例えば、米国西部 (北カリフォルニア) (us-west-1) リージョンのソースレプリカは、アフリカ (ケープタウン) (af-south-1) リージョンと比較して、米国西部 (オレゴン) (us-west-2) リージョンへの ReplicationLatency が低くなります。

ReplicationLatency の値が上昇している場合、1 つのレプリカからの更新が他のレプリカテーブルにタイムリーに伝播されていないことを示している可能性があります。この場合、アプリケーションの読み込みおよび書き込みアクティビティを別の AWS リージョンに一時的にリダイレクトすることができます。

マルチリージョンの強力な整合性 (MRSC) 用に設定されたグローバルテーブルは、ReplicationLatency メトリクスを発行しません。

フォールトインジェクションテスト

MREC グローバルテーブルは AWS Fault Injection Service (AWS FIS) と統合し、グローバルテーブルワークロードでフォールトインジェクション実験を行います。これにより、選択したレプリカとの間のレプリケーションを一時停止することで、シミュレートされたリージョン分離に対するアプリケーションの応答をテストできます。詳細については、「グローバルテーブルレプリケーションの一時停止」を参照してください。

有効期限 (TTL)

MREC 用に設定されたグローバルテーブルは有効期限 (TTL) 削除の設定をサポートしています。TTL 設定は、グローバルテーブル内のすべてのレプリカに対して自動的に同期されます。TTL がリージョン内のレプリカから項目を削除すると、削除はグローバルテーブル内の他のすべてのレプリカにレプリケートされます。TTL は書き込み容量を消費しないため、削除が発生したリージョンでは TTL 削除に対して課金されません。ただし、グローバルテーブルのレプリカが存在する他のリージョンでレプリケートされた削除に対しては課金されます。

TTL 削除レプリケーションは、削除がレプリケートされるレプリカの書き込み容量を消費します。プロビジョンドキャパシティ用に設定されたレプリカは、書き込みスループットと TTL 削除スループットの組み合わせがプロビジョンド書き込みキャパシティを超える場合、リクエストをスロットリングすることがあります。

マルチリージョンの強力な整合性 (MRSC) 用に設定されたグローバルテーブルは、有効期限 (TTL) 削除の設定をサポートしていません。

Streams

マルチリージョンの結果整合性 (MREC) 用に設定されたグローバルテーブルは、レプリカテーブルの DynamoDB Stream からこれらの変更を読み取り、その変更を他のすべてのレプリカテーブルに適用することで、変更をレプリケートします。したがって、Streams は MREC グローバルテーブル内のすべてのレプリカでデフォルトで有効になっており、それらのレプリカで無効にすることはできません。MREC レプリケーションプロセスでは、短期間に複数の変更を 1 つのレプリケートされた書き込みに結合する場合があり、各レプリカの Stream にわずかに異なるレコードが含まれる場合があります。MREC レプリカの Streams レコードは常に項目ごとに順序付けられますが、項目間の順序はレプリカによって異なる場合があります。

マルチリージョンの強力な整合性 (MRSC) 用に設定されたグローバルテーブルは、レプリケーションに DynamoDB Streams を使用しないため、MRSC レプリカでは Streams はデフォルトで有効になっていません。MRSC レプリカで Streams を有効にできます。MRSC レプリカの Streams レコードは、Stream レコードの順序付けを含め、すべてのレプリカで同じです。

グローバルテーブル内の他のリージョンではなく、特定のリージョンで発生した変更について Streams レコードを処理するアプリケーションを作成する場合は、各項目にその項目の変更が発生したリージョンを定義する属性を追加できます。この属性を使用して、特定のリージョンの変更に対してのみ Lambda 関数を呼び出す Lambda イベントフィルターの使用など、他のリージョンで発生した変更について Streams レコードをフィルタリングできます。

トランザクション

MREC 用に設定されたグローバルテーブルでは、DynamoDB トランザクションオペレーション (TransactWriteItems および TransactGetItems) は、操作が呼び出されたリージョン内でのみアトミックです。トランザクション書き込みはリージョン間でユニットとしてレプリケートされません。つまり、特定の時点で、トランザクション内の書き込みの一部のみが、他のレプリカでの読み取り操作によって返される可能性があります。

例えば、米国東部 (オハイオ) リージョンと米国西部 (オレゴン) リージョンにレプリカを持つグローバルテーブルがある場合、米国東部 (オハイオ) リージョンで TransactWriteItems オペレーションを実行すると、変更がレプリケートされたときに米国西部 (オレゴン) では部分的に完了したトランザクションが観察されることがあります。変更は、ソースリージョンでコミットされた場合にのみ、他のリージョンにレプリケートされます。

マルチリージョンの強力な整合性 (MRSC) 用に設定されたグローバルテーブルはトランザクションオペレーションをサポートしておらず、これらのオペレーションが MRSC レプリカで呼び出されるとエラーが返されます。

読み取りおよび書き込みスループット

レプリケーションは書き込み容量を消費します。プロビジョンドキャパシティ用に設定されたレプリカは、書き込みスループットとレプリケーションスループットの組み合わせがプロビジョンド書き込みキャパシティよりも高い場合、リクエストをスロットリングすることがあります。オンデマンドモードでの書き込みキャパシティは、グローバルテーブル内のすべてのレプリカに対して同期されます。プロビジョンドキャパシティ用に設定されたグローバルテーブルは、レプリカ間で自動スケーリング設定を同期します。実際のプロビジョニングされた書き込みキャパシティ設定は、消費された書き込みスループットに応じてレプリカ間で異なる場合があります。

グローバルテーブル内の各レプリカの読み取り容量設定は個別に設定できます。グローバルテーブルにレプリカを追加する場合、オーバーライド値が指定されていない限り、ソーステーブルまたはレプリカの読み取り容量が初期値として使用されます。

設定の同期

DynamoDB グローバルテーブルの設定は、テーブルの動作とレプリケーションのさまざまな側面を制御する設定パラメータです。これらの設定は DynamoDB コントロールプレーン API を通じて管理され、グローバルテーブルを作成または変更するときに設定できます。グローバルテーブルは、すべてのレプリカで特定の設定を自動的に同期して一貫性を維持し、リージョン固有の最適化に柔軟性を持たせます。どの設定が同期され、どのように動作するかを理解することは、グローバルテーブルを効果的に設定するのに役立ちます。設定は、レプリカ間でどのように同期されるかに基づいて、3 つの主要なカテゴリに分類されます。

次の設定は常にグローバルテーブルのレプリカ間で同期されます。

  • キャパシティモード (プロビジョンドキャパシティまたはオンデマンド)

  • テーブルのプロビジョニングされた書き込み容量

  • テーブル書き込みの自動スケーリング

  • グローバルセカンダリインデックス (GSI) 定義

  • GSI のプロビジョニングされた書き込みキャパシティ

  • GSI の書き込み自動スケーリング

  • サーバー側の暗号化 (SSE)

  • MREC モードでの Streams 定義

  • 有効期限 (TTL)

  • ウォームスループット

  • オンデマンドの最大書き込みスループット

以下の設定はレプリカ間で同期されますが、レプリカごとに上書きできます。

  • テーブルのプロビジョニングされた読み込みキャパシティ

  • テーブル読み取りの自動スケーリング

  • GSI のプロビジョニングされた読み込み容量キャパシティ

  • GSI の読み取り自動スケーリング

  • テーブルクラス

  • オンデマンドの最大読み取りスループット

注記

上書き可能な設定値は、設定が他のレプリカで変更されると変更されます。例えば、米国東部 (バージニア北部) と米国西部 (オレゴン) にレプリカを持つ MREC グローバルテーブルがあるとします。米国東部 (バージニア北部) レプリカのプロビジョニングされた読み込みスループットは 200 RCU に設定されています。米国西部 (オレゴン) のレプリカでは、プロビジョニングされた読み込みスループットオーバーライドが 100 RCU に設定されています。米国東部 (バージニア北部) レプリカのプロビジョニングされた読み込みスループット設定を 200 RCU から 300 RCU に更新すると、新しいプロビジョニングされた読み込みスループット値が米国西部 (オレゴン) のレプリカにも適用されます。これにより、米国西部 (オレゴン) レプリカのプロビジョニングされた読み込みスループット設定が、オーバーライドされた値である 100 RCU から新しい値である 300 RCU に変更されます。

以下の設定はレプリカ間で同期されません。

  • 削除保護

  • ポイントインタイムリカバリ

  • [タグ]

  • テーブルの CloudWatch Contributor Insights の有効化

  • GSI の CloudWatch Contributor Insights の有効化

  • Kinesis Data Streams 定義

  • リソースポリシー

  • MRSC モードでの Streams 定義

他のすべての設定はレプリカ間で同期されません。

DynamoDB Accelerator (DAX)

グローバルテーブルレプリカへの書き込みは DynamoDB Accelerator (DAX) をバイパスし、DynamoDB を直接更新します。その結果、書き込みが DAX キャッシュを更新しないため、DAX キャッシュが古くなる可能性があります。グローバルテーブルレプリカ用に設定された DAX キャッシュは、キャッシュ TTL の有効期限が切れた場合にのみ更新されます。

グローバルテーブルの管理に関する考慮事項

新しいグローバルテーブルレプリカの追加に使用したテーブルは、新しいレプリカが作成されてから 24 時間が経過するまで削除できません。

グローバルテーブルレプリカを含む AWS リージョンを無効にすると、それらのレプリカは、リージョンが無効になってから 20 時間後に単一リージョンテーブルに永続的に変換されます。