既存のDynamoDBテーブルをグローバルテーブルに変換できるようになりました

こんにちは、森です。

AWS re:Invent 2019まで7日を切りました。毎年始まる前には大量のアップデートがあるので追うのが大変な今日この頃です。

さて、今回ご紹介するアップデート情報ですが、Amazon DynamoDBに関してです。

New – Convert Your Single-Region Amazon DynamoDB Tables to Global Tables

既存のDynamoDBテーブル をグローバルテーブルに変換することが可能となりました。

グローバルテーブル

グローバルテーブルは、

マルチリージョン、マルチマスターのデータベースを構築することが可能となり、そのレイテンシーを 10 ミリ秒未満に維持できるようになります。選択した AWS リージョンにテーブルの更新内容を自動的にレプリケーションすることができ、また、グローバルテーブルを使用して、DynamoDB テーブルデータを他の AWS リージョンにレプリケーションすることで可用性を高めることもできます。

マルチリージョンアーキテクチャを使用し、低レイテンシなアプリケーションの構築、災害復旧の容易にするためによく使用されると思います。

以前は、グローバルテーブルを作るには、空のテーブルを使用することが条件でした。今回のアップデートにより、いつでもグローバルに移行したり、既存のグローバルテーブルのリージョンを増やすことが可能となります。

やってみた

前提条件

  • Region: ap-northeast-1
  • テーブルを用意し、データを挿入しておく

こんな感じでサンプルのテーブルとデータを用意して行います。

1. DynamoDB Streams の有効化

DynamoDBのマネージメントコンソールで、 左ペインの[テーブル]をクリックし、グローバルテーブルにしたいテーブルを選択します。

グローバルテーブルのタブを選択肢、DynamoDB Streams の有効化 します

2. リージョンの追加

DynamoDB Streams の有効化が終わったら、すぐ下にある グローバルテーブルのリージョン の項目でリージョンの追加を行います。

追加中は、状態の項目が 作成中 となります。

なお、現在利用可能なリージョンは、

us-east-1(バージニア北部)、us-west-2(オレゴン)、us-east-2(オハイオ)、us-west-1(北カリフォルニア)、ap- northeast-2(ソウル)、ap-southeast-1(シンガポール)、ap-southeast-2(シドニー)、ap-northeast-1(東京)、eu-central-1(フランクフルト)、eu-west-1(アイルランド) )、eu-west-2(ロンドン)、GovCloud(米国東部)、およびGovCloud(米国西部) です。

リージョンを追加中でも、既存のリージョンに対してのアクセスは可能です。

$ aws dynamodb scan --region ap-northeast-1 --table-name golf-data
{
    "Items": [
        {
            "publish_date": {
                "S": "2019-11-11"
            },
            "videoid": {
                "S": "v1200"
            }
        },
        {
            "publish_date": {
                "S": "2019-11-23"
            },
            "videoid": {
                "S": "v1455"
            }
        }
    ],
    "Count": 2,
    "ScannedCount": 2,
    "ConsumedCapacity": null
}

3. 追加されたリージョンに対してクエリする

状態の項目が 有効 となれば利用可能ですので、クエリしてみます。

$ aws dynamodb scan --region us-east-1 --table-name golf-data
{
    "Items": [
        {
            "publish_date": {
                "S": "2019-11-11"
            },
            "videoid": {
                "S": "v1200"
            }
        },
        {
            "publish_date": {
                "S": "2019-11-23"
            },
            "videoid": {
                "S": "v1455"
            }
        }
    ],
    "Count": 2,
    "ScannedCount": 2,
    "ConsumedCapacity": null
}

無事結果が返って来ました。

追加していないリージョンに対してクエリすると

$ aws dynamodb scan --region us-east-2 --table-name golf-data

An error occurred (ResourceNotFoundException) when calling the Scan operation: Requested resource not found

とエラーになります。

最後に

既存のテーブルをグローバルテーブルに変換できるようになったため、テーブル作成時に地域的な使用状況を推測する必要がなくなると思います。複数の地域に対してアプリケーションを公開することになった時は是非利用すべき機能ですね。

また、価格に変更はなく、追加のリージョンで使用するリソースとリージョン間のデータ転送に対してのみ課金されるとのことです。

そして、

数週間以内に、既存のグローバルテーブルを更新してこの新しい機能を活用できるツールをリリースします

とアナウンスされていました、期待しましょう。

ではでは

参考