Amazon DynamoDBのグローバルテーブルを使ってみた

記事タイトルとURLをコピーする

こんにちは。 ディベロップメントサービス1課の山本です。

最近、AWS Certified Solutions Architect - Associate(以下、SAA)に合格しました。
問題文が長いものが多く、集中力との戦いでした。

AWS Certified Solutions Architect – Associate 認定

今回はSAAの問題集を解いていた中でよく出ていた
Amazon DynamoDBのグローバルテーブルを利用してみようと思います。

はじめに

Amazon DynamoDBのグローバルテーブルの説明をします。 大きな特徴は下記2点です。

  • 複数リージョンにレプリカテーブルを作成。あるレプリカテーブルに変更が発生した場合、1秒以内に他のレプリカテーブルにレプリケートされる。
  • あるレプリカテーブルで障害が発生した際に、別リージョンのレプリカテーブルへと自動リダイレクトされる。

キーワードは
・グローバルでの低レイテンシーの利用
・マルチリージョンでの可用性向上
ですね。

こちらの機能はZoomのバックエンドでも利用されており、世界規模で展開しているアプリケーションで有用な機能となっております。
公式のドキュメントにも記載されてますので、合わせてご確認ください。

aws.amazon.com

構成

東京リージョン(ap-northeast-1)とバージニア北部リージョン(us-east-1)にレプリカテーブルを持つグローバルテーブルを構築します。 その後、クライアントとなるPCからAWS CLIを利用してデータのレプリケートを確認します。

構成図

構築方法

1. テーブル作成

まずレプリケートさせるテーブルをマネジメントコンソールから構築します。

テーブル作成画面

2. グローバルテーブルの有効化

作成したテーブルをレプリケートする、レプリカテーブルを作成します。
テーブル詳細画面からグローバルテーブルのタブを開き、レプリカの作成を選択。

グローバルテーブルタブ画面

レプリカテーブルを構築するリージョンを設定し、レプリカの作成を選択。

レプリカテーブル作成画面

※DynamoDB Streamsでキャプチャした変更ログを利用してレプリケートされるので、自動で有効になります。この内容もSAAの問題集で何度か見ました。

作成には数分間かかります。
完了したらレプリカ一覧にレプリケートされているテーブルとして表示されます。

グローバルテーブルタブ画面

レプリケート先のテーブル画面

レプリケートの確認

テーブルのレプリケート設定が完了したので、実際にデータを送信して確認します。

1. サンプルデータ送信(東京リージョン)

東京リージョンのテーブルに対して、任意のデータを設定します。
以下のAWS CLIのコマンドを利用します。

【東京リージョンでデータ設定】

aws dynamodb put-item \
    --table-name sample-table \
    --item '{"sample-id": {"N" : "1"}, "sample-str": {"S" : "sample"}}' \
    --region ap-northeast-1 \
    --profile {利用プロファイル名}

2. データ取得(東京リージョン)

きちんと東京リージョンのテーブルに対してデータが設定できたかscanコマンドで確認します。
以下のAWS CLIのコマンドを利用します。

aws dynamodb scan \
    --table-name sample-table \
    --region ap-northeast-1 \
    --profile {利用プロファイル名}

結果は以下の通りで、きちんと保存されている事を確認できました。

東京リージョンでデータ取得

3. データ取得(バージニア北部リージョン)

今回の目的でもある、バージニア北部リージョンのテーブルに対してデータがレプリケートできたかscanコマンドで確認します。
以下のAWS CLIのコマンドを利用します。

aws dynamodb scan \
    --table-name sample-table \
    --region us-east-1 \
    --profile {利用プロファイル名}

同じデータが返却され、無事レプリケートが成功していることが確認できました。

バージニア北部リージョンでデータ取得

レイテンシーの確認

各リージョンのDynamoDBエンドポイントとのレイテンシーをpingコマンドを使って測定し、timeコマンドを使ってスキャン返却にかかる時間を測定しました。

項目 東京 バージニア北部
スキャン返却時間 0.32s 0.36s
ping 19ms 177ms

位置的に遠いリージョンのDynamoDBにアクセスする際は、レイテンシーによる遅延が発生していることがわかります。
グローバルテーブルを利用すれば、東京で利用されるアプリケーションの場合は東京リージョンへ、北米で利用されるアプリケーションの場合はバージニア北部リージョンへと通信させることで、低レイテンシーを実現できます。

さいごに

参考書やAWSのドキュメントを読むだけでは、中々イメージするのが難しい機能が多々あると思います。そういった機能をブログで紹介して、理解の手助けになればと思います。

本ブログがどなかたのお役に立てれば幸いです。

山本 真大(執筆記事の一覧)

アプリケーションサービス部 ディベロップメントサービス1課

2023年8月入社。カピバラさんが好き。