DynamoDBのスループットをまとめてさげる

テーブル数が多くなると、Management Console 上からチマチマ変更するのは疲れるので、Java でプログラム書いた。
スループットを下げるように書いたので、上げたいときは修正が必要だけど、サンプルコードとして役に立つと思う。

jnst / dynamodb-tools

使い方

Main.java にアクセスキーとシークレットキー書いて、テーブル名とスループットを指定して、実行するだけ。
https://github.com/jnst/dynamodb-tools/blob/master/src/main/java/tool/Main.java

private static final String ACCESS_KEY = "xxxxx"; //アクセスキー
private static final String SECRET_KEY = "xxxxx"; //シークレットキー
private static Regions RESION = Regions.AP_NORTHEAST_1; //東京リージョン

String tablePrefix = "dev-"; //対象テーブルの接頭辞
long readCapacityUnits = 10L; //READのスループット
long writeCapacityUnits = 5L; //WRITEのスループット

DynamoDB のテーブル一覧取得の注意点

AWS のドキュメントには明確に書いてないけど、listTables メソッドはテーブルを辞書順に最大 100 件までしか取得できない。
AWS SDK for Java に限らず、Python や Node.js の AWS SDK でも同様。

https://github.com/jnst/dynamodb-tools/blob/master/src/main/java/tool/Service.java#L33

ListTablesResult result = dynamoDB.listTables(request);

なので、取得結果に含まれる LastEvaluatedTableName を ExclusiveStartTableName に格納して、LastEvaluatedTableName が返ってこなくなるまで再実行する必要がある。