AWS re:Invent 2018で、DynamoDBのOn-demandキャパシティモードが発表されました。
従来のスループット指定とは異なり、事前の設定なく数千リクエストを捌けるというモデルです。
定常的にスループットを使うのではなく、通常はアクセスがないけど突発的にアクセスがくるような使い方には非常に向いているものです。
うちにもいくつかこのようなテーブルがあるので早速変更してみましたが、その前にいくつか気になる点があったので、確認してみました。
モード変更中のアクセス
マネジメントコンソールから、現状のモードとOn-demandの切り替えタブがあり、変更できます。
試しに切り替えながらアクセスしてみましたが、特にエラーは発生しませんでした。
スループットの取得
APIを使うとread/writeのスループットを取れますが、On-demandモードの場合に取得をすると、0が返ってきました。
エクスポート用途などで、既存のスループットを元にキャパシティを増減させるようなプログラムを書いている場合はおかしなことになるので、注意が必要そうです。
スループットのセット
On-demandモードの場合にAPIを使ってスループットを指定するとどうなるかというと、以下のようなエラーが発生しました。
同時にモード変更できるテーブル数
On-demandモードへの変更は、同時に10テーブルまでのようです。10テーブル以上を同時に変更しようとすると、LimitExceededExceptionが発生します。
"One or more parameter values were invalid: Neither ReadCapacityUnits nor WriteCapacityUnits can be specified when BillingMode is PAY_PER_REQUES"
上記とも関連しますが、OnDemandの場合は、スループット系のAPIは使わないようにするのが良さそうです。
なおオンデマンドかどうかは、DescribeTable APIの戻り値のBillingModeSummaryをみるか、もしくは単純に取得したスループットが0かどうかをみれば良さそうです。