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
原文はこちらです。