[JAWS-UG CLI] DynamoDB:#1 テーブル作成(ハッシュキーのみ)


http://jawsug-cli.doorkeeper.jp/events/18571 でのハンズオン資料です。

AWS CLIを利用して、DynamoDBのテーブル(ハッシュキーのみ)を作成してみます。

* create-table
* list-tables
* describe-table


前提条件
========

## DynamoDBへの権限

* DynamoDBに対してフル権限があること。

## AWS CLIのバージョン

以下のバージョンで動作確認済

* AWS CLI 1.7.8




テーブルの設計
==============

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SampleData.CreateTables.html の「ユースケース 1: 製品カタログ」テーブルを参考にします。

テーブル名: ProductCatalog

プライマリキーのタイプ: ハッシュ

ハッシュ属性の名前と型: 属性名: Id (型: Number)

範囲属性の名前と型: (ハッシュキーモデルなので無し)

プロビジョニングされたスループット:
      * 読み込みキャパシティーユニット: 10
      * 書き込みキャパシティーユニット: 5


0. 事前作業
===========

変数の確認
------------------------

```bash:変数の確認:
cat << ETX

AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}

ETX
```


1. テーブルの作成
=================

1.1. DynamoDBテーブル名の指定
-----------------------------

```bash:コマンド(例):
      DYNAMO_TABLE_NAME='ProductCatalog'
```



1.2. ハッシュキーの指定
-----------------------

```bash:コマンド(例):
      DYNAMO_HASH_NAME='Id'
      DYNAMO_HASH_TYPE='N'
```


1.3. プロビジョンドスループットの指定
-------------------------------------

```bash:コマンド(例):
      DYNAMO_READ_UNIT='10'
      DYNAMO_WRITE_UNIT='5'
```


1.4. テーブルの作成 (create-table)
-------------------------------------

```bash:コマンド:
DYNAMO_ATTRIBUTE="AttributeName=${DYNAMO_HASH_NAME},AttributeType=${DYNAMO_HASH_TYPE}"
DYNAMO_KEY_SCHEMA="AttributeName=${DYNAMO_HASH_NAME},KeyType=HASH"
DYNAMO_PROV_THPUT="ReadCapacityUnits=${DYNAMO_READ_UNIT},WriteCapacityUnits=${DYNAMO_WRITE_UNIT}"
```

```bash:変数の確認:
cat << ETX

        DYNAMO_TABLE_NAME: ${DYNAMO_TABLE_NAME}
        DYNAMO_ATTRIBUTE:  ${DYNAMO_ATTRIBUTE}
        DYNAMO_KEY_SCHEMA: ${DYNAMO_KEY_SCHEMA}
        DYNAMO_PROV_THPUT: ${DYNAMO_PROV_THPUT}

ETX
```

```bash:コマンド:
      aws dynamodb create-table \
        --table-name ${DYNAMO_TABLE_NAME} \
        --attribute-definitions ${DYNAMO_ATTRIBUTE} \
        --key-schema ${DYNAMO_KEY_SCHEMA} \
        --provisioned-throughput ${DYNAMO_PROV_THPUT}
```

```json:結果:
      {
        "TableDescription": {
          "AttributeDefinitions": [
              {
                  "AttributeName": "Id",
                  "AttributeType": "N"
              }
          ],
          "ProvisionedThroughput": {
              "NumberOfDecreasesToday": 0,
              "WriteCapacityUnits": 5,
              "ReadCapacityUnits": 10
          },
          "TableSizeBytes": 0,
          "TableName": "ProductCatalog",
          "TableStatus": "CREATING",
          "KeySchema": [
              {
                  "KeyType": "HASH",
                  "AttributeName": "Id"
              }
          ],
          "ItemCount": 0,
          "CreationDateTime": 1423104342.199
        }
      }
```


2. 確認 (一覧: list-tables)
=============

 ```bash:コマンド:
     aws dynamodb list-tables 
```

```json:結果:
      {
        "TableNames": [
          "ProductCatalog"
        ]
      }
```


3. 確認(詳細: describe-table)
=============

```bash:コマンド:
      aws dynamodb describe-table --table-name ${DYNAMO_TABLE_NAME}
```

```json:結果:
      {
        "Table": {
          "AttributeDefinitions": [
              {
                  "AttributeName": "Id",
                  "AttributeType": "N"
              }
          ],
          "ProvisionedThroughput": {
              "NumberOfDecreasesToday": 0,
              "WriteCapacityUnits": 5,
              "ReadCapacityUnits": 10
          },
          "TableSizeBytes": 0,
          "TableName": "ProductCatalog",
          "TableStatus": "ACTIVE",
          "KeySchema": [
              {
                  "KeyType": "HASH",
                  "AttributeName": "Id"
              }
          ],
          "ItemCount": 0,
          "CreationDateTime": 1423104342.199
        }
      }
```


完了
====

テーブルを作成したら、アイテムを登録、更新、削除してみましょう。
http://qiita.com/tcsh/items/aab2930fe38b0121852b