[JAWS-UG CLI] DynamoDB:#6 Dynamodbテーブルの作成 (Microservice HTTP Endpoint)

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


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


DynamoDBへの権限
----------------

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


AWS CLIのバージョン
-------------------

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

- AWS CLI 1.11.14

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.11.34 Python/2.7.10 Darwin/15.6.0 botocore/1.4.91

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


テーブルの設計
--------------

テーブル名:
   microservice-http

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

ハッシュ属性の名前と型:
   属性名: Name (型: String)

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

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


0. 準備
=======


0.1. リージョンの決定
---------------------

```bash:変数の設定
export AWS_DEFAULT_REGION='ap-northeast-1'
```


0.2. プロファイルの確認
-----------------------

プロファイルが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

結果(例):

            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       dynamodbFull-prjz-mbpr13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region        ap-northeast-1        env    AWS_DEFAULT_REGION


1. 事前作業
===========


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

```bash:コマンド:
DYNAMO_TABLE_NAME='microservice-http'
```


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

コマンド(例):

      DYNAMO_HASH_NAME='Name'
      DYNAMO_HASH_TYPE='S'


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

コマンド(例):

      DYNAMO_READ_UNIT='5'
      DYNAMO_WRITE_UNIT='5'


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

```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}
```

結果(例):

      {
        "TableDescription": {
          "TableArn": "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXXX:table/microservice-http",
          "AttributeDefinitions": [
              {
                  "AttributeName": "Name",
                  "AttributeType": "S"
              }
          ],
          "ProvisionedThroughput": {
              "NumberOfDecreasesToday": 0,
              "WriteCapacityUnits": 5,
              "ReadCapacityUnits": 5
          },
          "TableSizeBytes": 0,
          "TableName": "microservice-http",
          "TableStatus": "CREATING",
          "KeySchema": [
              {
                  "KeyType": "HASH",
                  "AttributeName": "Name"
              }
          ],
          "ItemCount": 0,
          "CreationDateTime": 1483187510.723
        }
      }


3. 事後作業
===========

```bash:変数の設定:
DYNAMO_TABLE_STATUS=$( \
        aws dynamodb describe-table \
          --table-name ${DYNAMO_TABLE_NAME} \
          --query 'Table.TableStatus' \
          --output text \
) \
        && echo ${DYNAMO_TABLE_STATUS}
```

結果(例):

      ACTIVE

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

結果(例):

      {
        "Table": {
          "TableArn": "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXXX:table/microservice-http",
          "AttributeDefinitions": [
              {
                  "AttributeName": "Name",
                  "AttributeType": "S"
              }
          ],
          "ProvisionedThroughput": {
              "NumberOfDecreasesToday": 0,
              "WriteCapacityUnits": 5,
              "ReadCapacityUnits": 5
          },
          "TableSizeBytes": 0,
          "TableName": "microservice-http",
          "TableStatus": "ACTIVE",
          "KeySchema": [
              {
                  "KeyType": "HASH",
                  "AttributeName": "Name"
              }
          ],
          "ItemCount": 0,
          "CreationDateTime": 1483187510.723
        }
      }


完了
====