はじめに
この記事でC#でDynamoDBにテーブルを作成する方法を書きました。
これは、AlexaスキルをC#で作成する際に、セッションをまたいでデータを保存するために必要になるからです。公式トレーニング第4回 データの保存にある永続アトリビュートというのがそれですね。
その後、調べていくうちにいろいろわかっていなかったことがわかったので、改めて整理してみました。
今回はシンプルにAlexaスキルに必要な構成だけにしぼって書きます。
テーブル作成 ステップ バイ ステップ
テーブル作成のコード的な手順を一つずつ説明していきたいと思います。
AmazonDynamoDBClientのインスタンス化
まずはこれがなければ始まりません。
このクラスがDynamoDBにテーブルを作成したり、テーブルにデータを追加したりする役割を一手に担います。
AmazonDynamoDBClient client = new AmazonDynamoDBClient();//主役。これを介してDynamoDBにアクセスする
テーブル作成リクエストの作成
テーブル作成の基本的な流れはざっくりこんな感じです。
- リクエストの作成
- テーブル作成リクエストの送信
リクエストの作成
CreateTableRequest
クラスを使ってテーブル作成リクエストを構成します。
Alexaスキルで使用するテーブルは、初期状態では「id」列(プライマリキー)だけを持つ構造で、データ追加時に「id」に加えて「attributes」列も追加されるようになっています。
//リクエストを構築
var request = new CreateTableRequest
{
//テーブルの列情報を設定
//「ThisIsId」と「ThisIsSomthing」という2つの列を持つテーブルを作る
AttributeDefinitions = new List<AttributeDefinition>()
{
new AttributeDefinition
{
AttributeName = "id",//カラム名
AttributeType = "S"//データのタイプ:N:数値、S:文字列、他にもいくつか。
},
},
KeySchema = new List<KeySchemaElement>
{
new KeySchemaElement
{
AttributeName = "id",
KeyType = KeyType.HASH //Partition key
},
},
ProvisionedThroughput = new ProvisionedThroughput
{
ReadCapacityUnits = 5,
WriteCapacityUnits = 5
},
//テーブル名
TableName = tableName
};
AttributeDefinitions
ここでは列の名前やデータのタイプといった基本的な構造を指定します。
AttributeDefinitions
プロパティに必要な列情報(AttributeDefinition
)を入れていきます。AttributeDefinition
はAttributeName
とAttributeType
という2つのプロパティを持っていて、それぞれ列名とその列のデータの種類を指定します。
AttributeType
の指定方法ですが、いくつかあるタイプの中から1つを選び、それを文字列で指定します。
選択できるタイプは以下のとおりです。
- N:数値型
- S:文字列型
- BOOL:ブール型、0または1
- B:バイナリ型
- S:文字列型。Dateの値はISO-8601形式の文字列で格納される。
- SS:文字列セット型
- NS:数値セット型
- BS:バイナリセット型
- M:任意の型
ですので、上の例では「id」列のデータの種類に「N」、つまり数値データを指定しています。
KeySchema
ここではプライマリキーの指定を行います。「id」列をプライマリキーにするので、KeyType
にKeyType.HASH
を指定します。
ProvisionedThroughput
ここはとりあえずNode.js版と同じ設定にしておきます。
公式のここに説明がありますが、なんとなくはわかります。スループットといっているので読み書きの性能に関わるとは思います。
テーブルの作成
このCreateTableRequest
をCreateTableAsync
メソッドに渡すと、テーブルが作成されます。
var result = client.CreateTableAsync(request).Result;
おわりに
シンプルに、DynamoDBクライアントをインスタンス化して、リクエストを作って、CreateTableAsyncメソッドに渡す、ことでAlexaスキル用のテーブルを作成できます。
実際に使う場合は、以前の記事のようにメソッドに切り出したりして、使いやすいようにしてください。
次は、データの追加のやりなおしです。