michimani.net

AWS CLI の wizard コマンドを使って対話形式で DynamoDB のテーブルを作成する

2021-04-30

AWS CLI v2 には 対話形式でリソースを操作できる wizard コマンドが用意されています。今回はその wizard コマンドを使って DynamoDB のテーブルを作成してみます。

目次

wizard コマンド

AWS CLI v2 では、 GA 当初 (v2.0.0) から wizard コマンドが利用可能で、一部のリソースに対する操作を対話的に実行できます。この記事を書いている時点 (2021/04/30) 時点で wizard コマンドに対応しているのは下記の操作で、 configure を除いては aws <サービス> wizard <wizard 用サブコマンド> という形で実行します。

DynamoDB のテーブルを作成してみる

今回は、 DynamoDB の wizard コマンドで対話形式でテーブルを作成してみます。

aws dynamodb wizard new-table

上記コマンドを実行すると、次のようなプロンプトが起動します。

DynamoDB new table wizard

の 5 ステップあることがわかります。

Intro

Intro では下記項目を入力または選択していきます。

DynamoDB new table wizard Intro

Capacity

Capacity では下記項目を入力または選択していきます。

DynamoDB new table wizard Capacity

Encryption

Encryption では下記項目を入力または選択していきます。

DynamoDB new table wizard Encryption

Preview

Preview では、作成されるテーブルの内容を AWS CLI コマンドまたは CloudFormation テンプレートとしてプレビューすることができます。

DynamoDB new table wizard Preview AWS CLI command
DynamoDB new table wizard Preview CloudFormation template

Done

Done では、これまでの設定内容で実行するかどうかを選択します。

DynamoDB new table wizard Done

Yes を選択すると、 Preview で選択した内容が出力されます。

AWS CLI command を選択していた場合

Wizard successfully created DynamoDB Table:
  Table name: user
  Primary partition key: id (S)
  Primary sort key: age (N)

Steps to create table is equivalent to running the following sample AWS CLI commands:

aws dynamodb create-table \
  --table-name 'user' \
  --attribute-definitions \
    'AttributeName=id,AttributeType=S' \
    'AttributeName=age,AttributeType=N' \
  --key-schema \
    'AttributeName=id,KeyType=HASH' \
    'AttributeName=age,KeyType=RANGE' \
  --provisioned-throughput \
     'ReadCapacityUnits=1,WriteCapacityUnits=1'

CloudFormation template を選択していた場合

Wizard successfully created DynamoDB Table:
  Table name: user
  Primary partition key: id (S)
  Primary sort key: age (N)

Steps to create table is equivalent to deploying the following sample AWS CloudFormation template:

Resources:
  user:
    Type: "AWS::DynamoDB::Table"
    Properties:
      TableName: user
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
        - AttributeName: age
          AttributeType: N
      KeySchema:
        - AttributeName: id
          KeyType: HASH
        - AttributeName: age
          KeyType: RANGE
      ProvisionedThroughput:
        ReadCapacityUnits: 1
        WriteCapacityUnits: 1

作成されているか確認

作成されたテーブルを確認してみます。

$ aws dynamodb describe-table \
--table-name user

{
    "Table": {
        "AttributeDefinitions": [
            {
                "AttributeName": "age",
                "AttributeType": "N"
            },
            {
                "AttributeName": "id",
                "AttributeType": "S"
            }
        ],
        "TableName": "user",
        "KeySchema": [
            {
                "AttributeName": "id",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "age",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "ACTIVE",
        "CreationDateTime": "2021-05-01T01:05:31.656000+09:00",
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 1,
            "WriteCapacityUnits": 1
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXXX:table/user",
        "TableId": "3327e6ef-b638-4318-80b5-8722cc840ee6"
    }
}

まとめ

AWS CLI の wizard コマンドで DynamoDB のテーブルを作成してみた話でした。

wizard が使えるサービスは限られているものの、対話形式で必要なパラメータを埋めていくのはやはり直感的でわかりやすいです。CLI とマネジメントコンソールでの操作の良いところを合わせたような感じで、今後対応するサービスが増えていくと良いなと思いました。

あと、実際にテーブルを作成する一つ前の段階で AWS CLI のコマンドと CloudFormation のテンプレートを確認することができるので、作りたいリソースを作成するためにどのようなコマンドやテンプレートが必要になるのかを確認する手段としても良さそうだなと思いました。

ちなみに、対応しているサービスについては、 AWS CLI の下記ディレクトリを見ると確認できます。

aws-cli/awscli/customizations/wizard/wizards at v2 · aws/aws-cli

AWS CLI のドキュメントにも上記ディレクトリを見てねと書かれていました。

To contribute or view the full list of available AWS CLI wizards, see the AWS CLI wizards folder on GitHub.

Using the AWS CLI wizards - AWS Command Line Interface


comments powered by Disqus