AWS DynamoDB Localを使ってみる

#使用するソフトウェア
AWS DynamoDB Localを使うために下記のソフトウェアをインストールしました。

1) javaのjreとjdk (15.0.2) ←dynamodb localを実行するためにjreが必要です。
・ダウンロードページ
https://www.oracle.com/java/technologies/javase-jdk15-downloads.html
・ダウンロードしたファイル
jdk-15.0.2_windows-x64_bin.exe
![java.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/051a7769-cdb9-427f-c3ab-6d6662af329d.png)

2) AWS DynamoDB local
DynamoDB localの環境を実行するために、jre 8以上を使用する必要があります。
・ダウンロードページ
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html
・ダウンロードしたファイル
dynamodb_local_latest.zip
※Asia Pacific(Tokyo) Regionのzipのリンク
![dynamo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/cde13b8b-b91d-589a-4224-c12e4a879694.png)

3) AWS CLI (2.1.22)
・ダウンロードリンク
 https://awscli.amazonaws.com/AWSCLIV2.msi
※64bitのwindows xp以上、ソフトウェアをインストールの管理者権限が必要です。
・ダウンロードしたファイル
AWSCLIV2.msi

#インストール方法
##java
1) jdk-15.0.2_windows-x64_bin.exeを実行します。
2) インストール画面が表示されたら、「Next」をクリックします。
![jdk_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/b7e323b3-7017-9a69-58c0-a2f132ca273e.png)
3) インストール先を指定せず、デフォルトの設定で「Next」をクリックします。
![jdk_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/40f40e1e-8fbb-e3a2-564b-b1987ad66826.png)
4) インストールが実行され、無事に終わったら下記の画面が表示されたら、「Close」をクリックします。
![jdk_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/9f1fea1d-0a1f-dbc8-9e97-523af3b93d79.png)
5) コマンドプロンプトを起動し、「java --version」のコマンドを実行し、javaがインストールされたことを確認します。

```
C:\Users\XXX>java --version
java 15.0.2 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
```
##AWS dynamodb local
1) ダウンロードしたdynamodb_local_latest.zipを解凍します。
![dynamo_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/48647a46-eec6-f653-3a11-2d410c5fd1c9.png)
2) C:\dynamodb_localの空のフォルダを作成します。
※フォルダ名は任意で大丈夫です。
3) 解凍したzipの中身をすべてC:\dynamodb_localにコピーします。
![dynamo_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/4f1a1048-111f-91d5-6d7e-2eabcbd09461.png)

## AWS CLI
1) ダウンロードしたAWSCLIV2.msiを実行します。
2) インストール画面が表示されたら、「Next」をクリックします。
![aws_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/97b96a87-5c13-bbec-8b57-7f50ec260763.png)
3) 使用するためのライセンス契約に同意し、「Next」をクリックします。
![aws_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/9527175c-ce60-7a35-6c85-c8a80ba17b58.png)
4) インストール先をデフォルトのままで、「Next」をクリックします。
![aws_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/36a54eb1-6033-78da-6426-9b1b73510f5e.png)
5) 「Install」をクリックし、インストールを開始させます。
![aws_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/4a8f14b4-9e23-7a6a-ebcc-9f7bf223cdac.png)
6) パソコンに変更するポップアップが出てきたら、OKをします。
7) インストールが無事に完了したら、下記の画面が表示され、「Finish」をクリックします。
![aws_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/797320/e1343092-6f3a-1251-3cca-43901ea1e922.png)
8) コマンドプロンプトを起動し、「aws --version」のコマンドでaws cliがインストールできたかを確認します。

```
C:\Users\XXX>aws --version
aws-cli/2.1.22 Python/3.7.9 Windows/10 exe/AMD64 prompt/off
```

#dynamodb localを使ってみる
## 初期作業
1) コマンドプロンプトを起動し、下記のようにdynamodb localを起動します。

```
C:\Users\XXX>cd C:\dynamodb_local

C:\dynamodb_local>java -Djava.library.path=./DynamoDBLocal_lib/ -jar DynamoDBLocal.jar
Initializing DynamoDB Local with the following configuration:
Port:   8000
InMemory:       false
DbPath: null
SharedDb:       false
shouldDelayTransientStatuses:   false
CorsParams:     *

2021-02-01 10:21:24.594:INFO::main: Logging initialized @3131ms to org.eclipse.jetty.util.log.StdErrLog
```
2) AWS CLIのコマンドを使用するために、下記のようにAWSのアクセスキー、シークレットキーなどを設定します。
※この設定は一回切りです。
※※今回aws dynamodb localを対象に作業しているため、アクセスキー、シークレットキーは適当に設定しても問題ないです。

```
C:\Users\XXX>aws configure
AWS Access Key ID [****************ASRA]:
AWS Secret Access Key [****************AsfA]:
Default region name [ap-northeast-1]: ap-northeast-1
Default output format [json]: json
```

## テーブルの作成
1) Dogsというテーブルを作成します。
<font color="red"> ※dynamodb localを対象に作業するので「--endpoint-url」の指定は不可欠です。</font>

・コマンド

```
C:\Users\XXX>aws dynamodb create-table --table-name Dogs --attribute-definitions AttributeName=Age,AttributeType=N AttributeName=DogName,AttributeType=S --key-schema AttributeName=Age,KeyType=HASH AttributeName=DogName,KeyType=RANGE --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 --endpoint-url http://localhost:8000
```
・実行結果

```
{
    "TableDescription": {
        "AttributeDefinitions": [
            {
                "AttributeName": "Age",
                "AttributeType": "N"
            },
            {
                "AttributeName": "DogName",
                "AttributeType": "S"
            }
        ],
        "TableName": "Dogs",
        "KeySchema": [
            {
                "AttributeName": "Age",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "DogName",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "ACTIVE",
        "CreationDateTime": "2021-02-01T10:57:30.768000+09:00",
        "ProvisionedThroughput": {
            "LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
            "LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 5,
            "WriteCapacityUnits": 5
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/Dogs"
    }
}
```
## テーブルの一覧のリストアップ
1) 現在dynamodb localにあるテーブルを下記のようにリストアップできます。
・コマンド

```
C:\Users\XXX>aws dynamodb list-tables --endpoint-url http://localhost:8000
```
・実行結果

```
{
    "TableNames": [
        "Dogs"
    ]
}
```
## テーブルにデータを挿入
1) dog.jsonを作成し、下記の内容を入力します。

```dog.json
{
   "DogName": {"S": "Lassie"},
   "Age": {"N": "10"}
}
```
2) dog.jsonを指定し、テーブルにデータを挿入します。
・コマンド

```
C:\Users\XXX>aws dynamodb put-item --table-name Dogs --item file://dog.json --endpoint-url http://localhost:8000
```

## テーブル内のデータの確認
1) 下記のコマンドを実行し、テーブル内のデータを確認できます。
・コマンド

```
C:\Users\XXX>aws dynamodb scan --table-name Dogs --endpoint-url http://localhost:8000
```
・実行結果

```
{
    "Items": [
        {
            "DogName": {
                "S": "Spike"
            },
            "Age": {
                "N": "3"
            }
        },
        {
            "DogName": {
                "S": "Lassie"
            },
            "Age": {
                "N": "10"
            }
        }
    ],
    "Count": 2,
    "ScannedCount": 2,
    "ConsumedCapacity": null
}
```
## テーブル内の検索
1) expression_attributes.jsonを作成し、下記の内容を記載します。

```expression_attributes.json
{
  ":name": {"S": "Spike"},
  ":age": {"N": "3"}
}
```
2) 下記のコマンドを実行します。
・コマンド

```
C:\Users\XXX>aws dynamodb query --table-name Dogs --key-condition-expression "DogName=:name and Age=:age" --expression-attribute-values file://expression_attributes.json --endpoint-url http://localhost:8000
```
・実行結果

```
{
    "Items": [
        {
            "DogName": {
                "S": "Spike"
            },
            "Age": {
                "N": "3"
            }
        }
    ],
    "Count": 1,
    "ScannedCount": 1,
    "ConsumedCapacity": null
}
```

## テーブル内のデータの削除
1) 削除対象を指定するdog.jsonを作成します。

```dog.json
{
   "DogName": {"S": "Spike"},
   "Age": {"N": "3"}
}
```

2) 下記のコマンドを実行します。
・コマンド

```
C:\Users\XXX>aws dynamodb delete-item --table-name Dogs --key file://dog.json --endpoint-url http://localhost:8000
```
・確認

```
C:\Users\XXX>aws dynamodb scan --table-name Dogs --endpoint-url http://localhost:8000
{
    "Items": [
        {
            "DogName": {
                "S": "Lassie"
            },
            "Age": {
                "N": "10"
            }
        }
    ],
    "Count": 1,
    "ScannedCount": 1,
    "ConsumedCapacity": null
}
```

## テーブルの削除
1) 下記のコマンドでテーブルを削除します。
・コマンド

```
C:\Users\XXX>aws dynamodb delete-table --table-name Dogs --endpoint-url http://localhost:8000
```
・実行結果

```
{
    "TableDescription": {
        "AttributeDefinitions": [
            {
                "AttributeName": "Age",
                "AttributeType": "N"
            },
            {
                "AttributeName": "DogName",
                "AttributeType": "S"
            }
        ],
        "TableName": "Dogs",
        "KeySchema": [
            {
                "AttributeName": "Age",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "DogName",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "ACTIVE",
        "CreationDateTime": "2021-02-01T10:57:30.768000+09:00",
        "ProvisionedThroughput": {
            "LastIncreaseDateTime": "1970-01-01T09:00:00+09:00",
            "LastDecreaseDateTime": "1970-01-01T09:00:00+09:00",
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 5,
            "WriteCapacityUnits": 5
        },
        "TableSizeBytes": 18,
        "ItemCount": 1,
        "TableArn": "arn:aws:dynamodb:ddblocal:000000000000:table/Dogs"
    }
}
```

・確認

```
C:\Users\XXX>aws dynamodb list-tables --endpoint-url http://localhost:8000
{
    "TableNames": []
}
```