Amazon Web Services ブログ

Amazon DynamoDB グローバルテーブルのマルチリージョン強整合性を活用することで、最高水準の耐障害性を備えたアプリケーションを安心して構築いただけます

数万人の顧客が Amazon DynamoDBグローバルテーブルを最終的整合性で正常に使用していますが、さらに強力なレジリエンスに対する新たなニーズが出てきています。多くの組織は、DynamoDB の複数アベイラビリティゾーンアーキテクチャと最終的整合性のグローバルテーブルが要件を満たすことを見出していますが、決済処理システムや金融サービスのような重要なアプリケーションには、さらに高い要求があります。

これらのアプリケーションでは、顧客は稀なリージョン全体のイベント時にゼロ目標復旧時点 (RPO) を要求します。つまり、アプリケーションが任意のリージョンから最新のデータを読み取れるようにする必要があります。マルチリージョンアプリケーションは、場所に関係なく常に同じデータにアクセスする必要があります。

6 月 30 日より、Amazon DynamoDB グローバルテーブルの新機能として、マルチリージョン強整合性 (MRSC) がご利用いただけるようになりました。これにより、ゼロ RPO (目標復旧時点) を実現できます。この機能は、2024 年の AWS re:Invent でプレビューとして初めて発表され、グローバル規模で高い耐障害性を備えたアプリケーションの構築を簡素化します。

以下は、既存の空の DynamoDB テーブルから MRSC を有効にする方法です。

次の手順で、既存の空の DynamoDB テーブルに対して MRSC を有効にできます。あるリージョンでアプリケーションの処理が中断された場合でも、MRSC レプリカを保持する別のリージョンにトラフィックをリダイレクトすることで、最新のデータを用いて処理を継続できることが保証されます。

はじめに
この新しい機能の使い方を順を追ってご説明します。

MRSC を利用開始するには、データが含まれていない既存の DynamoDB テーブルからグローバルテーブルを作成する必要があります。既存のテーブルに移動し、グローバルテーブルタブを選択して、レプリカの作成を選択します。

MRSC の可用性アーキテクチャでは、3 つの AWS リージョンが必要です。MRSC は、3 つのフルレプリカを構成することも、2 つのレプリカとウィットネスで構成することもできます。ウィットネスには、必要な可用性を確保するための変更データのみが複製され、テーブルデータ全体のコピーは保持されません。

次のスクリーンショットは、2 つのレプリカとウィットネスで MRSC を構成する方法を示しています。代わりに 3 つのフルレプリカで MRSC を構成するには、リージョン 2 をウィットネスとして構成する のチェックを外すことで設定できます。

既存のテーブルをプログラムで更新する必要がある場合は、次のプロンプトを使用して、必要なコマンドを生成するために Amazon Q CLI を利用できます。

> ねえ Q! us-east-1 リージョンの 「demo-mrsc」という DynamoDB テーブル を、us-east-2 リージョンにまたがるマルチリージョン強整合性 (MRSC) 対応に更新し、us-west-2 リージョンにウィットネスを構成します

その後すぐに、Q CLI は次のコマンドを返してきます。

> マルチリージョン強整合性を有効にするには、適切なパラメータを指定して、update-table コマンドを使用して DynamoDB テーブルを更新する必要があります。以下のように実行します:

aws dynamodb update-table \ 
    --table-name demo-mrsc \ 
    --replica-updates '[{"Create": {"RegionName": "us-east-2"}}]' \ 
    --global-table-witness-updates '[{"Create": {"RegionName": "us-west-2"}}]' \ 
    --multi-region-consistency STRONG \ 
    --region us-east-1

処理が完了したら、MRSC グローバルテーブルのステータスを確認できます。DynamoDB グローバルテーブルにウィットネスが設定されていることを確認できます。ウィットネスは、マルチリージョン強整合性による高い耐障害性を維持しつつ、コストを削減します。

次に、アプリケーション内で ConsistentRead を使用することで、強整合性を持ってデータを読み取ることができます。以下は Python の例です:

import boto3

# 使用するリージョンに合わせて DynamoDB クライアントを設定する
dynamodb = boto3.resource('dynamodb', region_name='us-east-2')
table = dynamodb.Table('demo-mrsc')

pk_id = "demo#test123"

# リージョン間で強整合性を保った読む
response = table.get_item(
    Key={
        'PK': pk_id
    },
    ConsistentRead=True
)

print(response)

最も強力なレジリエンスを必要とするオペレーションには、ConsistentRead=True を使用できます。最終的な整合性で問題ないような重要度の低い処理では、このパラメータを省略することで、パフォーマンスの向上とコストの削減が期待できます。

知っておくべき追加情報
以下の点にご注意ください:

  • 可用性 — Amazon DynamoDB のマルチリージョン強整合性機能は、以下の AWS リージョンで利用できます: 米国東部 (オハイオ、バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (大阪、ソウル、東京)、ヨーロッパ (フランクフルト、アイルランド、ロンドン、パリ)
  • 価格設定 — マルチリージョン強整合性の料金は、既存のグローバルテーブルの料金体系に従います。DynamoDB は最近、グローバルテーブルの料金を最大 67% 削減し、これまで以上に高耐障害性のアーキテクチャを手頃な価格で利用できるようになりました。詳しくは、AWS Database Blog の Amazon DynamoDB がオンデマンドスループットとグローバルテーブルの料金を引き下げの記事をご覧ください。

アプリケーションの最高レベルの耐障害性を実現し、どのリージョンにおいても常に最新のデータを読み取れる、常時稼働のアプリケーションを構築する方法については、Amazon DynamoDB グローバルテーブル のページをご覧ください。

開発をお楽しみください!

Donnie

原文はこちらです。