DynamoDBのスループット制限を取得するAPIが公開されました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。
DynamoDBのスループット制限を取得するAPI(DescribeLimits)が公開されたので検証してみました。

Announcement: Announcing the new DescribeLimits API for DynamoDB

DescribeLimits?

今回公開されたAPI(DescribeLimits)はDynamoDBでプロビジョニングできるスループット(Capacity Unit)の範囲を動的に取得できる機能となります。
ドキュメントには以下のように初期初期の制限が記載されています。

プロビジョニングされるスループットについては、いくつかの初期的な最大制限があります。

  • US East (N. Virginia) リージョン:
    • テーブル単位 – 読み込みキャパシティーユニット数 40,000 および書き込みキャパシティーユニット数 40,000
    • アカウント単位 – 読み込みキャパシティーユニット数 80,000 および書き込みキャパシティーユニット数 80,000
  • その他すべてのリージョン:
    • テーブル単位 – 読み込みキャパシティーユニット数 10,000 および書き込みキャパシティーユニット数 10,000
    • アカウント単位 – 読み込みキャパシティーユニット数 20,000 および書き込みキャパシティーユニット数 20,000

初期制限は記載されていますが、AWSサポートへ申請して上限緩和が可能です。上限を緩和した値を

AWS Documentation » Amazon DynamoDB » Developer Guide » DynamoDB での制限:キャパシティーユニットとプロビジョニングされるスループット

実行してみる

APIはAWS-CLIで確認して見ます。
まずAWS-CLIを最新バージョンへアップデートします。

$ pip install -U awscli

AWS-CLIが最新になったのでaws dynamodb describe-limitsを実行します。

$ aws dynamodb describe-limits --region us-east-1
{
    "TableMaxReadCapacityUnits": 40000, 
    "TableMaxWriteCapacityUnits": 40000, 
    "AccountMaxReadCapacityUnits": 80000, 
    "AccountMaxWriteCapacityUnits": 80000
}

各項目は、以下の意味になります。

  • TableMaxReadCapacityUnits:テーブル単位 – 読み込みキャパシティーユニット数
  • TableMaxWriteCapacityUnits:テーブル単位 – 書き込みキャパシティーユニット数
  • AccountMaxReadCapacityUnits:アカウント単位 – 読み込みキャパシティーユニット数
  • AccountMaxWriteCapacityUnits:アカウント単位 – 書き込みキャパシティーユニット数

全リージョンでaws dynamodb describe-limitsを実行した結果が、以下の表になります。

リージョン テーブルごとの最大WriteCapacityUnits テーブルごとの最大ReadCapacityUnits アカウントの最大WriteCapacityUnits アカウントの最大ReadCapacityUnits 備考
バージニア北部 40000 40000 80000 80000
北カリフォルニア 10000 10000 20000 20000
オレゴン 10000 10000 20000 20000
アイルランド 10000 10000 20000 20000
フランクフルト 10000 10000 20000 20000
東京 取得不可 取得不可 取得不可 取得不可 DescribeLimitsが未実装と思われる
ソウル 取得不可 取得不可 取得不可 取得不可 DescribeLimitsが未実装と思われる
シンガポール 10000 10000 20000 20000
シドニー 10000 10000 20000 20000
サンパウロ 10000 10000 20000 20000

上限緩和をしていないためドキュメント通りの内容となりましたが、東京(ap-northeast-1)とソウル(ap-northeast-2)は2016年3月8日9:00 JST時点でaws dynamodb describe-limitsは未実装のようです。使用するためには、少し時間が必要のようです。

$ aws dynamodb describe-limits --region ap-northeast-1

A client error (UnknownOperationException) occurred when calling the DescribeLimits operation:
$ aws dynamodb describe-limits --region ap-northeast-2

A client error (UnknownOperationException) occurred when calling the DescribeLimits operation:

さいごに

動的にスループットの上限が取得できるのでDynamic DynamoDBのように動的にCapacity Unitを変更するようなプロダクトを使用する場合に丁度良いのではないでしょうか?
初期制限を越えるスループットが必要になる事はほとんど無いと思われますが、大規模サービスでDynamoDBを使用する場合に使用できると思います。

GitHub - sebdah/dynamic-dynamodb: Dynamic DynamoDB provides auto scaling for AWS DynamoDB Dynamic DynamoDB — Dynamic DynamoDB 2.2.1 documentation