DynamoDBグローバルテーブルを作成して異なるリージョン間での同期を確認してみた

2021.05.19

こんにちは、yagiです。

本日はDynamoDBグローバルテーブルを作成してみたので記載します。

本内容は以下のAWS公式チュートリアルからの実施です。

チュートリアル: グローバルテーブルの作成

Amazon DynamoDB グローバルテーブル とは?

Amazon DynamoDB グローバルテーブルは、マルチリージョンにマルチアクティブデータベースをデプロイするための完全マネージド型のソリューションです。独自のレプリケーションソリューションを構築および管理する必要はありません。グローバルテーブルを使用すると、そのテーブルの利用を許可する AWS リージョンを指定できます。DynamoDB はこれらのリージョンに同一のテーブルを作成し、進行中のデータ変更をすべてのリージョンに伝達するために必要なすべてのタスクを実行します。

DynamoDB グローバルテーブルは、グローバルに分散したユーザーがいる場合など、大規模にスケールされたアプリケーションを使用する場合に最適です。このような環境では、ユーザーは、非常に高速なアプリケーションパフォーマンスを期待します。グローバルテーブルでは、マルチアクティブレプリケーションを世界中の AWS リージョンに自動的に提供できます。ユーザーがどこにいても、低レイテンシーでデータを提供することができます。

(AWS公式ドキュメントからの引用)

Amazon DynamoDB グローバルテーブルを作成する

ここでは、us-east-2 (米国東部オハイオ) リージョンにDynamoDBを作成し、レプリカテーブルを持つグローバルテーブルを、us-west-2 (米国西部オレゴン) および eu-central-1 (ヨーロッパ:フランクフルト) に作成します。

まずは、us-east-2 (米国東部オハイオ) リージョンに移動してDynamoDBのAWSコンソールから、「テーブルを作成」を押下します。

テーブルの作成画面で、テーブル名、プライマリキーを入力します。ソートキーの追加を選択し、入力します。いずれも「文字列」を指定し、「作成」を押下してテーブルを作成します。

グローバルテーブルを作成するには、DynamoDB Streams を有効にする必要があるので、「グローバルテーブル」タブへ移動し、「ストリームの有効化」を押下します。

「表示タイプ」は、デフォルトのまま「新旧イメージ - 項目の新しいイメージと古いイメージの両方。」として「有効化」を押下します。

次に、「リージョンの追加」を押下します。

「グローバルテーブルへのレプリカの追加」小画面が表示されるので、「リージョン」に、us-west (オレゴン)を選択します。 選択すると、AWSコンソール側で、選択したリージョンに同一名のテーブルが存在しないことを確認してくれます。 画面に緑枠で、「リージョンは準備ができています。[Create replica] をクリックして次に進んでください。」表示がされたら、「レプリカの作成」を押下します。

レプリカの作成が開始されたことを確認して「閉じる」を押下して小画面を閉じます。作成が完了するまで待って、完了してから作業再開します。

グローバルテーブルのリージョンに、「US East (Ohio)」、「US West (Oregon)」が追加されていることを確認します。「リージョンの追加」を押下して、同様の操作で、eu-central-1 (ヨーロッパ:フランクフルト) を追加していきます。

リージョンに「EU (Frankfurt)」が追加されたことを確認します。

これで、作成が完了です。

動作確認

us-east-2 (米国東部オハイオ) リージョンのDynamoDBのAWSコンソール上で、テーブルの「項目」タブを選択します。 「項目の作成」を押下して、今回は手動で追加していきます。

「Artist」に「item_1」、「SongTitle」に「Song Value 1」と入力します。「保存」を押下して、項目に値を手動で書き込みます。

次に、グローバルテーブルのタブから、「EU(Frankfurt)」を選択して、eu-central-1 (ヨーロッパ:フランクフルト) のDynamoDBテーブルへ移動します。

eu-central-1 (ヨーロッパ:フランクフルト) のDynamoDBテーブルに、us-east-2 (米国東部オハイオ) リージョンのDynamoDBのAWSコンソール上で追加した項目(「Artist」に「item_1」、「SongTitle」に「Song Value 1」)が反映されていることが確認できます。

次に、eu-central-1 (ヨーロッパ:フランクフルト) のDynamoDBテーブルのAWSコンソール上から項目へ値を追加します。(「Artist」に「item_2」、「SongTitle」に「Song Value 2」)

次に、グローバルテーブルのタブから、「US West (Oregon)」のリージョンを選択して、us-west-2 (米国西部オレゴン) リージョンのDynamoDBへ移動します。

us-east-2 (米国東部オハイオ) リージョン及び、eu-central-1 (ヨーロッパ:フランクフルト) リージョンにてDynamoDBテーブルに追加した値(「Artist」に「item_1」と「item_2」、「SongTitle」に「Song Value 1」、「Song Value 2」) が反映されていることが確認できます。

結論

Amazon DynamoDB グローバルテーブルを利用して、異なるリージョン間での動作確認を行いました。 操作が簡単で国を跨いでいるとは思えないほどでした。かつ国を跨いでいると思えないほど低レイテンシーとのことで、大変有効なソリューションの一つと認識しました。

参考

グローバルテーブル: DynamoDB を使用した複数リージョンレプリケーション

DynamoDB Global Tableを試す #reinvent