読者です 読者をやめる 読者になる 読者になる

未踏作業日誌――余計なもの作るよ!

未踏の作業日誌的なものを書きましょうということで書くことにしました.余計なことばっかりしています.

AWS::DynamoDB::Client::V20120810::create_tableが動かない

AWSマネジメントコンソールで1個1個テーブル作るの手間だし,たぶんインデックスとか気になって頻繁にテーブルを削除→作り直しを繰り返すような気がするので,AWS-SDKを叩いてテーブルを自動的に作ってくれるスクリプトを組もうとしてた.

 

テーブルを作成するのには2種類あって,クライアントから作る方法と,TableCollectionクラスから作る方法がある.

TableCollectionから作る方法は一番簡単に作ることができる一方で,インデックスを張ることができない.DynamoDBは最初にインデックスを張らないと変更ができない仕様なので,インデックスを使っているテーブルには使うことができない.

一方で,クライアントから作る方法はオプションをたくさん指定できることもあり,インデックスを張るだけでなく,読み書きのユニット数まで指定することができる.

Class: AWS::DynamoDB::Client::V20120810 — Documentation for aws/aws-sdk-ruby (master)

 

以下のコードで最も簡単なテーブルを作成できるはず.

gist8799493

できるはずなんだけど,どうにもこうにもできない.

 b:588:in `block in validate': unexpected option attribute_definitions (ArgumentError)

 このようなエラーが表示されてしまってうんともすんとも言わない.一応,APIのサンプルを見つけてきてコピってはみたんだけれども,どうやらこれではダメらしい.

一番考えられる原因は,attribute_definitionsがそもそも定義されていないという問題.バリデーションやろうとしている時に,オプションにこんな種類のものは予期していないと言われてしまっているので,多分にあり得る話ではある.

別にこのAPIがなくても手動でひたすらテーブルを作り続ければいいわけなのだけれども,コマンド一発でできるものを時間かけてやるのはどう考えてもおかしい.おまけに,AWSマネジメントコンソールは重たくてレスポンスが悪い.

Issue投げたいし,原因を特定して直したいレベルなんだけれども,妥協して手作業でやらないと時間がない…….