LoginSignup
1
0

More than 5 years have passed since last update.

C#でAlexa用のテーブルをDynamoDBに作成。やりなおし。

Last updated at Posted at 2018-11-15

はじめに

この記事でC#でDynamoDBにテーブルを作成する方法を書きました。
これは、AlexaスキルをC#で作成する際に、セッションをまたいでデータを保存するために必要になるからです。公式トレーニング第4回 データの保存にある永続アトリビュートというのがそれですね。

その後、調べていくうちにいろいろわかっていなかったことがわかったので、改めて整理してみました。
今回はシンプルにAlexaスキルに必要な構成だけにしぼって書きます。

テーブル作成 ステップ バイ ステップ

テーブル作成のコード的な手順を一つずつ説明していきたいと思います。

AmazonDynamoDBClientのインスタンス化

まずはこれがなければ始まりません。
このクラスがDynamoDBにテーブルを作成したり、テーブルにデータを追加したりする役割を一手に担います。

AmazonDynamoDBClient client = new AmazonDynamoDBClient();//主役。これを介してDynamoDBにアクセスする

テーブル作成リクエストの作成

テーブル作成の基本的な流れはざっくりこんな感じです。

  1. リクエストの作成
  2. テーブル作成リクエストの送信

リクエストの作成

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)を入れていきます。AttributeDefinitionAttributeNameAttributeTypeという2つのプロパティを持っていて、それぞれ列名とその列のデータの種類を指定します。
AttributeTypeの指定方法ですが、いくつかあるタイプの中から1つを選び、それを文字列で指定します。
選択できるタイプは以下のとおりです。

  • N:数値型
  • S:文字列型
  • BOOL:ブール型、0または1
  • B:バイナリ型
  • S:文字列型。Dateの値はISO-8601形式の文字列で格納される。
  • SS:文字列セット型
  • NS:数値セット型
  • BS:バイナリセット型
  • M:任意の型

ですので、上の例では「id」列のデータの種類に「N」、つまり数値データを指定しています。

KeySchema

ここではプライマリキーの指定を行います。「id」列をプライマリキーにするので、KeyTypeKeyType.HASHを指定します。

ProvisionedThroughput

ここはとりあえずNode.js版と同じ設定にしておきます。
公式のここに説明がありますが、なんとなくはわかります。スループットといっているので読み書きの性能に関わるとは思います。

テーブルの作成

このCreateTableRequestCreateTableAsyncメソッドに渡すと、テーブルが作成されます。

            var result = client.CreateTableAsync(request).Result;

おわりに

シンプルに、DynamoDBクライアントをインスタンス化して、リクエストを作って、CreateTableAsyncメソッドに渡す、ことでAlexaスキル用のテーブルを作成できます。
実際に使う場合は、以前の記事のようにメソッドに切り出したりして、使いやすいようにしてください。

次は、データの追加のやりなおしです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0