DynamoDBテーブルのキャパシティーモード一覧を取得するスクリプトを作ってみた(あなたのテーブルは、オンデマンド? プロビジョニング済み?)

DynamoDBには2つのキャパシティーモードがあり、それによって料金が変わります。

現在のプロジェクトには、DynamoDBのテーブルが数十あるのですが、「普段のアクセス数は少ないが、たまにスパイク的なアクセスがある」というテーブルが多くあります。

このような場合は、「プロビジョニング済みキャパシティーモード」よりも「オンデマンドキャパシティーモード」のほうが合っていると考え、「現状のキャパシティーモードを調べよう」となりました。

「数十のテーブル × n環境」を手作業で調べると大変なので、調べるためのスクリプトを作ってみました。今後も使えるので楽ができます。

環境

項目 バージョン
macOS Mojave 10.14.6
AWS CLI aws-cli/1.16.220 Python/3.7.2 Darwin/18.7.0 botocore/1.12.215
Python 3.7

作成したスクリプト

Pythonで作成しました。お好みにカスタマイズしてお使いください!

動作の様子

実行します。

$ python check_dynamodb.py

実行結果の例は、下記です。(DynamoDBのテーブルが2個あるとき)

{
    "table_name": "aaaaa",
    "table_size_bytes": 1234,
    "item_count": 56,
    "billing_mode": "PAY_PER_REQUEST",
    "rcu": 0,
    "wcu": 0,
    "global_secondary_indexes": []
}
{
    "table_name": "xxxxx",
    "table_size_bytes": 98765,
    "item_count": 432,
    "billing_mode": "PROVISIONED",
    "rcu": 40,
    "wcu": 5,
    "global_secondary_indexes": [
        {
            "index_name": "yyyyy-index",
            "rcu": 5,
            "wcu": 5
        },
        {
            "index_name": "zzzzz-index",
            "rcu": 70,
            "wcu": 2
        }
    ]
}

さいごに

常時アクセスが無い(少ない)場合は、オンデマンドのほうが便利&安くなる場合が多そうですが、「リクエスト回数(特に書き込み)」や「書き込みサイズ」には注意が必要です。 (料金はこの2つに大きく左右されるため)

また、カンマ区切りに出力して、Excelやスプレッドシートに貼り付け、「データをカンマで区切る」的な操作をすると、簡単に表ができたりします。