Amazon DynamoDBのプロビジョンドキャパシティユニットをBoto3で更新してみた

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

はじめに

 こんにちは、オーバークックとオクトパストラベラーを楽しんでいる井手です。FIFA19とスマブラも楽しみです。
 Amazon DynamoDB(以下 DynamoDB)にはAutoScaling機能がありますが、負荷がかかる前から対策したいというケースもあるのではと思います。そこで今回はプロビジョンドキャパシティユニットをBoto3で更新し、おまけに変更される時間を計ってみたのでご紹介します。

環境

 ・リージョン: 東京
 ・変更前のプロビジョンドキャパシティユニット
  ・RCU: 5(デフォルト値)
  ・WCU: 5(デフォルト値)
 ・項目数: 0
 ・Boto3: 1.7.35
 ・Botocore: 1.10.35
 ・Python: 2.7.14

準備

 Boto3等の環境構築は済んでいることとします。今回テーブルの作成は本題ではないので以下のようにコンソールから作成しておきます。
 

やってみた

以下を実行

import boto3

dynamodb = boto3.client('dynamodb', region_name='ap-northeast-1')
table_name = 'test_table'

dynamodb.update_table(
    TableName=table_name,
    ProvisionedThroughput={
        'ReadCapacityUnits': 10,
        'WriteCapacityUnits': 10
    }
)

response = dynamodb.describe_table(
    TableName=table_name
)

print(response['Table']['ProvisionedThroughput']['ReadCapacityUnits'])
print(response['Table']['ProvisionedThroughput']['WriteCapacityUnits'])

CLIでも確認できますが、ここではコンソールで見てみます。

 ちゃんと変更されていますね!

おまけ

 変更が容易に出来るの良かったのですが、キャパシティユニット自体の切り替えに時間がかかってしまっては困ります。(例えばLambdaで利用した時のランタイム)そこで、気になったので切り替えの時間も計ってみました。
※今回の環境の場合なので、時間を保証するものではありません。

以下を実行

import boto3
import time

dynamodb = boto3.client('dynamodb', region_name='ap-northeast-1')
table_name = 'test_table'

dynamodb.update_table(
    TableName=table_name,
    ProvisionedThroughput={
        'ReadCapacityUnits': 100,
        'WriteCapacityUnits': 100
    }
)

for i in range(1000):
    response = dynamodb.describe_table(
        TableName=table_name
    )
    print(response['Table']['ProvisionedThroughput']['ReadCapacityUnits'])
    print(response['Table']['ProvisionedThroughput']['WriteCapacityUnits'])
    time.sleep(1)

すると以下の結果が出力されました。

だいたい4〜5秒くらいですね・・!

さいごに

 今回増加の幅を0->1000等にしてみる等、増減幅を変えて数パターン試しましたが、だいたい5秒前後でした。もちろんこちらケースによるとは思いますが思いの外 短く、使い勝手がいいなと思いました。
また、 色々試した後に気づいたのですが、時刻を計るだけであれば以下のようにコンソールにも表示されていますので、確認してみてはいかがでしょうか。