DynamoDBの作り方とDVA試験にでそうなところメモ

# はじめに
DynamoDBを作成してみたので、作成方法のメモとして残しておきます。
また、現在DVA取得に向けての学習中なので、試験に出そうなところについてまとめてメモしておきたいと思います。

:::note info 
やりたいこと
- 1からDynamoDBのテーブルを作成する。
- アウトプットすることで各サービスの理解力を高める。
- DVAに出そうなところに関しての理解を深める。
:::

# DynamoDB
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Introduction.html

## DynamoDBの作成
1.コンソールの検索ボックスに「DynamoDB」を入力すれば、サービスに表示されるのでそちらをクリック。
![1-1.DynamoDBの作成-コンソールからのサービス表示.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/f3b5dd11-82be-18c3-0487-4aecd09f68d5.png)

2.画面右のほうに「テーブルの作成」ボタンがあるのでそちらをクリック。
3.「テーブルの詳細」エリアに「テーブル名」、「パーティションキー」、「ソートキー」の入力個所があるので、設定する。
![1-1-1.DynamoDBの作成-テーブルの詳細.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/42dc9c47-588f-72d5-0e0d-483bbd5c3a42.png)

:::note info 
パーティションキーとソートキー

- ここで設定するパーティションキーとソートキーを合わせてプライマリーキーとなる。
- パーティションキーを元に配置されるノードが決定する。
- ソートキーはノード内のデータ順の決定に使用し、任意の項目を設定することができる。
- パーティションキーとソートキーの組み合わせでデータが一意となる。
- ソートキーを作成しないことも可能、ただしその場合はパーティションキーでデータが一意にならなくてはいけない。

:::

4.テーブル設定エリアで「デフォルト設定」、「設定をカスタマイズ」を選択する。
![1-2.DynamoDBの作成-テーブル設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/d3775435-54d4-98f3-c3b1-75b8b4c96b3c.png)

デフォルトの設定は以下の通り

|No.| 設定 | 値 |
| ---- | ---- | ---- |
|1| キャパシティーモード |プロビジョンド| 
|2| Provisioned read capacity |Provisioned read capacity | 
|3| Provisioned write capacity |5 WCU| 
|4| Auto Scaling |オン| 
|5| ローカルセカンダリインデックス |-| 
|6| グローバルセカンダリインデックス |-| 
|7| 暗号化キーの管理 |Amazon DynamoDB が所有| 
|8| テーブルクラス |DynamoDB 標準| 
|9| 削除保護 |オフ|

:::note info 
設定をカスタマイズとは

- 上記デフォルトテーブルで設定されている項目をそれぞれ設定することができる。

:::

5.タグ設定エリアで設定したいタグを設定する。
6.「テーブルの設定」ボタンをクリックする。

# 【メモ】設定カスタマイズ時の入力項目

## テーブルクラス
![1-4.DynamoDBの作成-テーブル設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/4bf317e8-bcf4-b19a-edca-afc665dd68a4.png)

|No.| テーブルクラス | 説明 |
| ---- | ---- | ---- |
|1| DynamoDB標準 |標準としてはこちらを使用| 
|2| DynamoDB標準 -IA |アクセス頻度が低いテーブルに使用。保存するのみならばこちらのほうコストは安い。 ただし、高頻度で読み書きするならば結果的に高くなる可能性がある。| 

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.TableClasses.html

https://aws.amazon.com/jp/dynamodb/pricing/on-demand/

- 読み込み/書き込みリクエスト
- データストレージ


## 読み込み/書き込みキャパシティーの設定
![1-6.DynamoDBの作成-読み込み書き込みキャパシティーの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/f7926881-9139-4bb1-4002-bd31c6fe475b.png)


|No.| キャパシティーモード | 説明 |
| ---- | ---- | ---- |
|1| オンデマンド |トラフィックに応じてWCUとRCUの上限値をトラフィックに応じて、自動で調整してくれる。| 
|2| プロビジョンド |1秒当たりの読み込みと書き込みの回数が指定できる。Auto Scallingで自動調整が可能。| 

テストで自分用に作る際はプロビジョンドにしています。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html

## セカンダリインデックス
![1-7.DynamoDBの作成-セカンダリインデックス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/5eb9c5b6-edab-6d0e-050e-94f3e661fcd9.png)


|No.| キャパシティーモード | 説明 |
| ---- | ---- | ---- |
|1| ローカルインデックス |テーブルのパーティションキーと同じである必要がある。ソートキーは任意の属性を指定可能できる。| 
|2| グローバルインデックス |テーブルから任意の属性を指定できる。| 

ローカルインデックスは「強い整合性」をサポートするが、グローバルインデックスは「結果整合性」のみをサポート。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.Indexes.Creating.html

## 保管時の暗号化
![1-8.DynamoDBの作成-保管時の暗号化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/32433b9e-befb-cbeb-ef7c-3ca210e39134.png)

DynamoDBに保存されたデータは暗号化されるが、KMSのキーを使用することができる。
KMSのキーを使用すると別途料金がかかる。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/EncryptionAtRest.html

## 削除保護
![1-9.DynamoDBの作成-削除保護.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375141/020df6af-abb7-f078-0880-f7655af0570c.png)

これをONにするとテーブルが削除できなくなる。意図せず削除されるのを防ぐ。
テーブル作成後に設定することも可能。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/bp-deletion-protection.html