AWS: AWS入門(DynamoDB編1) - テーブルを作成する

###### 実施環境

 Microsoft Edge 124.0.2478.67 (64bit)

### 0. 概要

 AWS には、「 DynamoDB 」というサービスがあります。
 DynamoDB はデータベースを利用できるサービスで、顧客情報や取引記録といった様々なデータを保管することができます。
今回はこの DynamoDB について、テーブルの作成やレコードの登録といった、ごく基本的な操作を行ってみます。

 DynamoDB を無料枠で利用する場合は、日時にかかわらず 25GB まで利用できます。
その他にも細かい条件がありますが、詳細は以下の Web サイトを参照してください。

https://aws.amazon.com/jp/dynamodb/pricing/

なお、最新の操作方法は以下の AWS 公式ドキュメントを参照してください。

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

:::note info
これ以降の操作は、 DynamoDB の操作に対して権限があるユーザで実行してください。
例えば「 AmazonDynamoDBFullAccess 」というポリシーを付与したユーザを使用すると、 DynamoDB の機能全体を利用することができます。

![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b6537506-e8d7-1be1-4bba-a90e314ec344.jpeg "0_00")
:::

### 1. NoSQL とは

 DynamoDB は一般的に広く使われている「 RDS 」ではなく、最近普及してきた「 NoSQL 」という種類のデータベースになります。
そのため、まずは NoSQL についての説明から始めます。

データベースの種類について考えるとき、最も一般的なものは「 RDB ( Relational Database ) 」というデータベースです。
 RDB はデータベースとしてよくイメージするような、「複数の表を組み合わせてデータを保管するデータベース」です。

![WS000641.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e0c96bb4-0c09-1b90-881e-6e1a7536e0d0.jpeg "1_01")

 RDB はデータの形がきっかりしているため処理がしやすく、データに矛盾も生じにくいです。
そのメリットのため、データベースとしては長らくこの RDB が主に使用されてきました。

ところがこの RDB 、きれいに整理できるデータに対しては強いのですが、多様なデータや大量のデータには対応しにくいという問題があります。
さらに、データの整合性を重視する作り上、複数サーバに分散しての実行にも向いていません。
これらのデメリットは、最近話題のビッグデータ分析や、クラウド環境・コンテナ環境などの分散を想定した環境を考えた場合、あまり喜ばしいことではありません。

![WS000672.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/111607bb-a1ec-6ef8-5f4c-dbb0bab1d7ac.jpeg "1_02")

そこで注目されるようになってきたのが RDB 以外のデータベースであり、これを NoSQL といいます。
 NoSQL には様々な種類がありますが、例えばキーバリュー型であれば「キー」と「値(バリュー)」の組み合わせでデータを表現します。
キーバリュー型は正確な検索集計には向かない一方で、柔軟性が強くアクセスも高速なため、ビッグデータ分析などでしばしば使用されます。

![WS000671.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9a9f387f-d94f-255b-30ca-a1a2c9311590.jpeg "1_03")

### 2. DynamoDB とは

さて、 DynamoDB ですが、キーバリュー型の NoSQL の一種となります。
 1 つのレコードは、「パーティションキー」「ソートキー」の 2 つのキーと、それ以外の追加のキーから作られます。
なお、「ソートキー」は無くてもかまいません。

![WS000500.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/754034b8-698d-db95-db1e-9a31c2d36e1d.jpeg "2_01")

レコードは「パーティションキー」「ソートキー」の 2 つの組み合わせで同じものが無いようにする必要があります。

![WS000501.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/143120d4-f495-1cf3-abfd-4351207b6242.jpeg "2_02")

 DynamoDB の特殊な点として、「パーティションキー」「ソートキー」は単なるレコードのキーではなく、レコードの格納場所を規定する項目でもあるという点があります。
基本的に、同じパーティションキー(厳密にはパーティションキーのハッシュ値)を持つレコードは同じ場所に格納され、さらにソートキーの順番で並びます。

![WS000502.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/bb579d49-4785-b0be-5c07-1cd513cc7bf2.jpeg "2_03")

この性質上、特にパーティションキーについては、アクセス場所の均等な分散などを考慮して注意深く設計することが大事です。

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

### 3. テーブル一覧画面

 AWS マネジメントコンソールのホーム画面左上、検索フォームに「 dynamodb 」と入力します。
検索結果に出てくる「 DynamoDB 」をクリックします。

![WS000207.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/28e580ea-c94a-3d06-6488-5eac2be53a72.jpeg "3_01")

画面左側のメニューから「テーブル」を選択します。

![WS000209.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ac3401bc-04df-d2c8-ecc5-d54328e978a9.jpeg "3_02")

これが今回主に使用するテーブル一覧画面です。

![WS000211.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9f0192aa-6922-98a4-99ac-5b7addef5e8d.jpeg "3_03")

### 4. テーブル作成

まずはレコードを格納するテーブルを作成しましょう。
「テーブルの作成」をクリックします。

![WS000211.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/a070e09c-00c8-ea95-915c-d0a9909a0a58.jpeg "4_01")

適当なテーブル名を入力します。

![WS000212.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/f6b1b25a-dd47-faaf-cc61-fd1f7e76b530.jpeg "4_02")

パーティションキーを設定します。
ソートキーは設定しなくても大丈夫です。

![WS000213.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/79cb722b-4370-46f3-3494-6cbb5fb1a63e.jpeg "4_03")

その他の細かい設定はデフォルトのままで問題ありません。
「テーブルの作成」をクリックします。

![WS000215.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/55d95f3c-9db2-8d1a-b188-b9bf6f8ff463.jpeg "4_04")

テーブルの作成に成功していれば、以下のようなメッセージが表示されます。
テーブル一覧に作成したテーブルが表示されているはずです。

![WS000380.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/c4c078a5-0534-9512-2c1e-34f60fb434f9.jpeg "4_05")

### 5. レコード追加

では早速、作成したテーブルにレコードを追加してみましょう。
作成したテーブルをクリックします。

![WS000381.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/846f0a62-8e01-ded4-b34b-734e049baae7.jpeg "5_01")

「テーブルアイテムの探索」をクリックします。

![WS000382.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/0ac6e3ff-954f-bc48-11ff-6be7f137d68f.jpeg "5_02")

画面を下方向にスクロールして、「項目を作成」をクリックします。

![WS000383.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/424d6806-a3e1-a898-1e50-afef517335c3.jpeg "5_03")

適当なキー値を入力し、「項目を作成」をクリックします。

![WS000384.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b39d6b9d-e471-9e2d-7a23-5eff9574d009.jpeg "5_04")

レコードが追加できました。

![WS000385.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3986d987-8f29-4ba1-089d-9b492d6ca46b.jpeg "5_05")

### 6. キー追加

レコード作成画面で「新しい属性の追加」をクリックすると、新しいキーをレコードに追加することができます。

![WS000386.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b37a2932-c7d5-2d0b-abcc-59faed532f8b.jpeg "6_01")

![WS000387.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8538a02e-7872-44e7-33e8-4e69ddd134be.jpeg "6_02")

![WS000390.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/5348f4b0-3776-ead7-be74-4c1133e97bdc.jpeg "6_03")

### 7. キー削除

レコード作成画面で「削除」をクリックすれば、キーを削除できます。

![WS000388.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/1f8f949b-f797-4004-3498-09ca46cf371a.jpeg "7_01")

![WS000389.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9584ed55-ca1b-6479-718f-5213116f5b63.jpeg "7_02")

![WS000399.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/805fa32c-5653-c896-dbd2-ff1bb23754e2.jpeg "7_03")

### 8. レコード編集

一度作成したレコードを編集するには、編集したいレコードにチェックを入れて「アクション」⇒「項目の編集」をクリックします。

![WS000391.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ed8b2900-194f-ce6d-6bc0-4ffe9d7185d0.jpeg "8_01")

なお、ここでパーティションキーの値やソートキーの値を変更した場合は、「編集」ではなく「再作成」という扱いになります。

![WS000393.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/42813548-9810-9824-e6f8-3c7f67ee5c46.jpeg "8_02")

### 9. レコード検索

レコードの検索を行うには、画面上のパネルを使用します。
今回はクエリ検索を使うので、「クエリ」にチェックを入れます。

![WS000394.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ab2a94b3-4060-dcc5-54a0-eca02f27ae17.jpeg "9_01")

検索条件としてパーティションキーの値を入力し、「実行する」をクリックします。

![WS000395.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/5bc16419-f95c-0a46-8d7a-da78169abc22.jpeg "9_02")

画面下のパネルに、指定したキー値のレコードだけが抽出されました。

![WS000396.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/47721d99-be4b-7503-9fc2-0229ff25acdb.jpeg "9_03")

### 10. レコード削除

レコードを削除する場合は、削除したいレコードにチェックを入れて「アクション」⇒「項目を削除」をクリックします。

![WS000397.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ec6ef65a-2b77-8aeb-0e14-6ea15ef83a91.jpeg "10_01")

確認メッセージが出るので、「削除」をクリックします。

![WS000398.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8e952ff6-874c-0316-dc52-23b024f80e9c.jpeg "10_02")

レコードが削除できました。

![WS000399.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/805fa32c-5653-c896-dbd2-ff1bb23754e2.jpeg "10_03")

### 11. テーブル削除

テーブルを削除するには、テーブル一覧画面で削除したいテーブルにチェックを入れ、「削除」をクリックします。

![WS000400.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e789bfae-635b-2c8f-b9e3-2e4c7b0cfa74.jpeg "11_01")

削除設定はとりあえずデフォルトで大丈夫です。
「確認」と入力し、「削除」をクリックします。

![WS000401.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/32079de6-763f-5027-93b6-81f82a6fc163.jpeg "11_02")

正常にテーブルが削除できれば、以下のようなメッセージが表示されます。
テーブル一覧からも削除したテーブルが消えているはずです。

![WS000402.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/aaaf1db7-e5c5-096a-7292-cf56706bf9ca.jpeg "11_03")

[戻る](https://qiita.com/frozencatpisces/items/75bf3e19f6328786e336)