(AWS CLI)DynamoDBを使う

AWS CLIで DynamoDBを使ってみます。

使用バージョンはこれ。

ec2-user@xxxxx$ aws --version
aws-cli/2.2.23 Python/3.8.8 Linux/4.14.193-113.317.amzn1.x86_64 exe/x86_64.amzn.2018 prompt/off
ec2-user@xxxxx$

aws cliの操作は、EC2上でも、ローカルPCでも可能です。

スポンサーリンク

DynamoDB操作

aws dynamodb create-table テーブルの作成

aws dynamodb create-table helpより

SYNOPSIS
            create-table
          --attribute-definitions <value>
          --table-name <value>
          --key-schema <value>
          [--local-secondary-indexes <value>]
          [--global-secondary-indexes <value>]
          [--billing-mode <value>]
          [--provisioned-throughput <value>]
          [--stream-specification <value>]
          [--sse-specification <value>]
          [--tags <value>]
          [--cli-input-json | --cli-input-yaml]
          [--generate-cli-skeleton <value>]


必須オプションは、下記3つとなっていますが、
--attribute-definitions <value>
--table-name <value>
--key-schema <value>

--billing-modeはデフォルトが、PROVISIONEDとなるため、
--provisioned-throughput <value>も、指定する必要があります。

create-tableでテーブル作成してみます。

ec2-user@xxxxx$ aws dynamodb create-table --table-name 'sample_user_table' \
--attribute-definitions '[{ "AttributeName": "user_id", "AttributeType": "N"}]' \
--key-schema '[{ "AttributeName": "user_id", "KeyType": "HASH" }]' \
--provisioned-throughput '{"ReadCapacityUnits": 10, "WriteCapacityUnits": 10}'
ec2-user@xxxxx$

aws dynamodb list-tables テーブル一覧

aws dynamodb list-tables helpより

SYNOPSIS
            list-tables
          [--cli-input-json | --cli-input-yaml]
          [--starting-token <value>]
          [--page-size <value>]
          [--max-items <value>]
          [--generate-cli-skeleton <value>]

DynamoDBのテーブル一覧を表示してみます。

ec2-user@xxxxx$ aws dynamodb list-tables
{
    "TableNames": [
        "sample_user_table"
    ]
}
ec2-user@xxxxx$

aws dynamodb delete-table テーブル削除

aws dynamodb delete-table helpより

SYNOPSIS
            delete-table
          --table-name <value>
          [--cli-input-json | --cli-input-yaml]
          [--generate-cli-skeleton <value>]

delete-tableでDynamoDBのテーブルを削除できます。

ec2-user@xxxxx$ aws dynamodb delete-table --table-name sample_user_table
{
    "TableDescription": {
        "TableName": "sample_user_table",
        "TableStatus": "DELETING",
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 10,
            "WriteCapacityUnits": 10
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:ap-northeast-1:xxxxxxxxxxxx:table/sample_user_table",
        "TableId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}
ec2-user@xxxxx$

削除できたか、list-tablesで確認してみましょう。

ec2-user@xxxxx$ aws dynamodb list-tables
{
    "TableNames": []
}
ec2-user@xxxxx$

aws dynamodb put-item 項目追加

aws dynamodb put-item helpより

SYNOPSIS
            put-item
          --table-name <value>
          --item <value>
          [--expected <value>]
          [--return-values <value>]
          [--return-consumed-capacity <value>]
          [--return-item-collection-metrics <value>]
          [--conditional-operator <value>]
          [--condition-expression <value>]
          [--expression-attribute-names <value>]
          [--expression-attribute-values <value>]
          [--cli-input-json | --cli-input-yaml]
          [--generate-cli-skeleton <value>]

put-itemで項目追加できます。

ec2-user@xxxxx$ aws dynamodb put-item --table-name sample_user_table --item '{ "user_id": { "N": "1" }, "user_name": { "S": "takk" }}'
ec2-user@xxxxx$

aws dynamodb scan 項目の全表示

aws dynamodb scan helpより

SYNOPSIS
            scan
          --table-name <value>
          [--index-name <value>]
          [--attributes-to-get <value>]
          [--select <value>]
          [--scan-filter <value>]
          [--conditional-operator <value>]
          [--return-consumed-capacity <value>]
          [--total-segments <value>]
          [--segment <value>]
          [--projection-expression <value>]
          [--filter-expression <value>]
          [--expression-attribute-names <value>]
          [--expression-attribute-values <value>]
          [--consistent-read | --no-consistent-read]
          [--cli-input-json | --cli-input-yaml]
          [--starting-token <value>]
          [--page-size <value>]
          [--max-items <value>]
          [--generate-cli-skeleton <value>]

scanを使うとテーブルの全項目を表示できます。

ec2-user@xxxxx$ aws dynamodb scan --table-name sample_user_table
{
    "Items": [
        {
            "user_name": {
                "S": "takk2"
            },
            "user_id": {
                "N": "2"
            }
        },
        {
            "user_name": {
                "S": "takk"
            },
            "user_id": {
                "N": "1"
            }
        }
    ],
    "Count": 2,
    "ScannedCount": 2,
    "ConsumedCapacity": null
}
ec2-user@xxxxx$

aws dynamodb query 項目の抽出

aws dynamodb query helpより

SYNOPSIS
            query
          --table-name <value>
          [--index-name <value>]
          [--select <value>]
          [--attributes-to-get <value>]
          [--consistent-read | --no-consistent-read]
          [--key-conditions <value>]
          [--query-filter <value>]
          [--conditional-operator <value>]
          [--scan-index-forward | --no-scan-index-forward]
          [--return-consumed-capacity <value>]
          [--projection-expression <value>]
          [--filter-expression <value>]
          [--key-condition-expression <value>]
          [--expression-attribute-names <value>]
          [--expression-attribute-values <value>]
          [--cli-input-json | --cli-input-yaml]
          [--starting-token <value>]
          [--page-size <value>]
          [--max-items <value>]
          [--generate-cli-skeleton <value>]

queryコマンドで、条件を指定してクエリーすることができます。

aws dynamodb query \
--table-name sample_user_table \
--key-condition-expression '#pk_name = :pk_value' \
--expression-attribute-names '{ "#pk_name": "user_id" }' \
--expression-attribute-values '{ ":pk_value": { "N": "1"}}'

結果

{
    "Items": [
        {
            "user_name": {
                "S": "takk"
            },
            "user_id": {
                "N": "1"
            }
        }
    ],
    "Count": 1,
    "ScannedCount": 1,
    "ConsumedCapacity": null
}
ec2-user@xxxxx$

コメント

タイトルとURLをコピーしました