初心者歓迎!AWSコンソールで始める初めてのDynamoDB! version 28
初めてのDynamoDB
# はじめに
この資料はJAWS FESTA 2023 Kyushuで行われるハンズオンために書かれました。
イベントページは[こちら](https://jft2023.jaws-ug.jp/)。
手を動かしながら DynamoDB の基本を学ぶことができます。
# 自己紹介
- 登壇者名
- ニッシー☆ === 西勇樹(Nishi Yuki)
- 所属
- 株式会社ユーザベース
- ソーシャル経済メディア「NewsPicks」のWeb版を作っています。
- 登壇者概要
- 会場である福岡工業大学を今年卒業しました。学生時代は月1でハッカソンに行きまくり、つどAWSなどのクラウドサービスを利用して爆速でリリースサイクルを回せるような基盤づくりの実装を楽しんでいました。
---
- SNSリンク
- Twitter:https://twitter.com/yukinissie
- Facebook:https://www.facebook.com/yukinissie
- GitHub:https://github.com/yukinissie
@[TOC](アジェンダ)
# DynamoDBの基本[30]
## 仕組み[5]
> DynamoDB は、一貫して 1 桁ミリ秒レベルのレイテンシーを必要とするあらゆる規模のアプリケーションに対応した、高速かつ柔軟な NoSQL データベースサービスです。DynamoDB はその柔軟性のあるデータモデルと信頼性の高いパフォーマンスにより、モバイル、ウェブ、ゲーム、広告技術、IoT といったアプリケーションに大いに活用できます。
###
## 利点と機能[5]
###
## ユースケース[5]
以下のような場所で使われている
- アドテック
- 小売り
- ソフトウェアとインターネット
- ゲーム
- メディアとエンターテイメント
- 銀行と金融
## 料金 [5]
DynamoDBの料金の特徴は以下3つの通り
- データの読み取り、書き込み、保存リクエストに対して料金が請求がされる
- 利用するキャパシティーモードによって料金体系が異なる
- 有効にしたオプション機能の料金も追加で請求される
## 公式ドキュメント[5]
安心安全公式ドキュメントのリンクはこちら↓
- https://docs.aws.amazon.com/ja_jp/dynamodb/
例えば以下のようなものが載っています。
- [「DynamoDB の使用開始」](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html)
- [「DynamoDB へのアクセス」](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/AccessingDynamoDB.html)
- [「Programming with DynamoDB」](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.html)
## その他のリソース[5]
# 2. 実際に触れてみよう[60]
## 2-1. DynamoDB サービストップページの開き方[5]
1. AWS コンソールにログインして、ヘッダーにある検索窓をクリックします。

2. 検索窓に「DynamoDB」と入力します。
3. 検索結果の中から「DynamoDB」をクリックします。

4. DynamoDB サービスのトップページが開きます。

## 2-2. 【余談】サービスのブックマークの仕方[5]
1. 検索窓にブックマークしたい AWS サービス名(例では「DynamoDB」)を入力します。
2. 検索結果横の星マークをクリックします。
3. ブックマークしたい AWS サービスがブックマークバーに追加されます。

## 2-3. テーブルの作成[15]
では早速、テーブルを作成していきましょう!
### 2-3-1. テーブル一覧を表示する[1]
1. DynamoDB サービスページの左にあるメニュー内の「テーブル」をクリックします。

2. そうすることでテーブル一覧を表示することができます。

### 2-3-2. テーブルを作成する[14]
1. 「テーブルの作成」をクリックします。

2. 「テーブル名」に「`jft2023`」と入力します。
3. 「主キー」に「`id`」と入力します。

4. 他の設定を変更せずに一番下までスクロールします。
5. タグセクションの「新しいタグの追加」をクリックします。
6. 「キー」に「`Group`」と入力します。
7. 「値」に「`jft2023-dynamodb-handson`」と入力します。
8. 「テーブルの作成」をクリックします。

作成にはしばらく時間がかかりますが、通常は 1 分以内に完了します。
作成が完了すると以下のような画面になります。

テーブルを作成できました!🎉
## 2-4. テーブルの概要を知る[15]
テーブルを作成するとテーブル一覧に作成したテーブルが表示されます。

テーブルには以下のような情報が表示されています。
- テーブル名
- パーティションキー
- ソートキー
- インデックス
- 削除保護
- 読み取りキャパシティモード
- 書き込みキャパシティモード
- テーブルクラス
それぞれの項目を詳しく説明していきます。
### 2-4-1. テーブル名[1]
テーブル名はテーブルを作成するときに指定した名前が表示されます。
- 命名規則あり
- すべての名前は UTF-8 を使用してエンコードする必要があり
- 大文字と小文字が区別される
- テーブル名とインデックス名の長さは 3 ~ 255 文字
- 次の文字が使える
- `a-z`
- `A-Z`
- `0-9`
- `_` (下線)
- `-` (ダッシュ)
- `.`(ドット)
- 現在の AWS アカウントとリージョン内で一意である必要がある
- 例 1)米国東部 (バージニア北部) に People テーブルを作成した場合、米国東部 (バージニア北部) に追加で同名の People テーブルを作成することはできない
- 例 2)米国東部 (バージニア北部) に People テーブルを作成し、欧州 (アイルランド) に別の People テーブルを作成できるが、これらの 2 つのテーブルは全くの別物である
詳細については、「[Amazon DynamoDB でサポートされるデータ型と命名規則](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html)」を参照してください。
### 2-4-2. パーティションキー[1]
パーティションキーはテーブルのデータを分散させるために使用されるキーです。
- DynamoDB はデータをパーティションに保存する
- パーティションは、AWS リージョン内の複数のアベイラビリティーゾーン間で自動的にレプリケート(複製)される
- パーティション管理は DynamoDB によって完全に処理される
- パーティションを自身が管理する必要はない
### 2-4-3. ソートキー[1]
同じパーティションキー値を持つすべての項目をソートするためのキーです。
- 同じパーティションキーを持つ他の項目とソートキーの昇順で項目が保存される
- テーブルから項目を読み込むには、パーティションのキーバリューとソートキーのキーバリューを指定する必要がある
- 目的の項目に同じパーティションキーバリューがある場合、単一のオペレーション (`Query`) でテーブルから複数の項目を読み取ることができる
### 2-4-4. インデックス[1]
インデックスはテーブルのデータを高速に検索するために使用されるキーです。
- パーティションキーとソートキーが存在するテーブルでは、同じパーティションのキーバリューが複数の項目に割り当てられることがある
- ソートキー値は複数の項目で異なる必要がある
### 2-4-5. 削除保護[1]
削除保護はテーブルの削除を防ぐために使用される機能です。
- 削除保護を有効にすると、その間はテーブルを削除することができなくなる
### 2-4-6. 読み取りキャパシティモード[1]
### 2-4-6. 読み取り/書き込みキャパシティモード[1]
### 2-4-7. 書き込みキャパシティモード[1]
読み取りおよび書き込みスループットの課金方法と容量の管理方法を制御します。
### 2-4-8. テーブルクラス[1]
- 2 つのキャパシティモードがある
- オンデマンドモード
- プロビジョニングモード (デフォルト、無料利用枠の対象)
- テーブルを作成するときに設定できる
- 後から変更することも可能
- セカンダリインデックスは、ベーステーブルのキャパシティモードを継承する
- 詳細:「[読み込み/書き込みキャパシティモードの変更時の考慮事項](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/switching.capacitymode.html)」
- 参考:「[読み取り/書き込みキャパシティモード](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)」
テーブルクラスはテーブルのデータを保存するために使用されるストレージの種類です。
#### オンデマンドモード
<TBD>
- 参考:「[読み取り/書き込みキャパシティモード](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)」
#### プロビジョニングモード
<TBD>
- 参考:「[読み取り/書き込みキャパシティモード](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html)」
### 2-4-7. テーブルクラス[1]
<TBD>
参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.TableClasses.html
## 2-5. 項目の探索[15]
### 2-5-1. 項目の追加[5]
- データ型
<TBD>
```
- 属性について
- 名前
- 値
- タイプ
```
参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/getting-started-step-2.html
### 2-5-2. 項目の検索[5]
< TBD >
参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/getting-started-step-3.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.SingleItem.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Query.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Scan.html
#### スキャン
#### クエリ
#### フィルタ
### 2-5-3. 項目の操作[5]
#### 編集
#### 複製
#### 削除
#### CSV ダウンロード
- 選択した項目をダウンロード
- 検索した結果をダウンロード
## 2-6. お片付け[15]
# 3. 終わりに[5]
---
## その他用語集
### 属性名
- 1 文字以上の長さ、64 KB 未満のサイズにする必要あり
- できるだけ短くすることがベストプラクティス
- 属性名がストレージとスループットの使用量の測定に含まれるため、属性名を短くすることで消費される読み取りリクエストユニットを減らすことができる
- 以下は例外で、これらの属性名は 255 文字以下である必要がある
- セカンダリインデックスのパーティションキー名
- セカンダリインデックスのソートキー名
- ユーザー指定の射影された属性の名前 (ローカルセカンダリインデックスにのみ適用)
- 参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html
### 予約語と特殊文字
DynamoDB には予約語と特殊文字があります。
- 予約語の例: `INSERT` や `DELETE`
- 詳細は:「[DynamoDB の予約語](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ReservedWords.html)」
- 特殊文字の例: `#` (ハッシュ)や `:` (コロン)
- 命名目的でこれらの予約語と特殊文字を使用することができるが、非推奨
- 式でこれらの名前を使用するたびに、プレースホルダー変数を定義する必要がある
- 詳細は:「[DynamoDB の式の属性名](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html)」
- ドキュメントによっては予約語を「使用しないでください」と書かれている
はじめに
この資料はJAWS FESTA 2023 Kyushuで行われるハンズオンために書かれました。
イベントページはこちら。
手を動かしながら DynamoDB の基本を学ぶことができます。
自己紹介
- 登壇者名
- ニッシー☆ === 西勇樹(Nishi Yuki)
- 所属
- 株式会社ユーザベース
- ソーシャル経済メディア「NewsPicks」のWeb版を作っています。
- 登壇者概要
- 会場である福岡工業大学を今年卒業しました。学生時代は月1でハッカソンに行きまくり、つどAWSなどのクラウドサービスを利用して爆速でリリースサイクルを回せるような基盤づくりの実装を楽しんでいました。
- SNSリンク
- Twitter:https://twitter.com/yukinissie
- Facebook:https://www.facebook.com/yukinissie
- GitHub:https://github.com/yukinissie
アジェンダはじめに自己紹介DynamoDBの基本[30]仕組み[5]利点と機能[5]ユースケース[5]料金 [5]公式ドキュメント[5]その他のリソース[5]2. 実際に触れてみよう[60]2-1. DynamoDB サービストップページの開き方[5]2-2. 【余談】サービスのブックマークの仕方[5]2-3. テーブルの作成[15]2-3-1. テーブル一覧を表示する[1]2-3-2. テーブルを作成する[14]2-4. テーブルの概要を知る[15]2-4-1. テーブル名[1]2-4-2. パーティションキー[1]2-4-3. ソートキー[1]2-4-4. インデックス[1]2-4-5. 削除保護[1]2-4-6. 読み取り/書き込みキャパシティモード[1]オンデマンドモードプロビジョニングモード2-4-7. テーブルクラス[1]2-5. 項目の探索[15]2-5-1. 項目の追加[5]2-5-2. 項目の検索[5]スキャンクエリフィルタ2-5-3. 項目の操作[5]編集複製削除CSV ダウンロード2-6. お片付け[15]3. 終わりに[5]その他用語集属性名予約語と特殊文字
DynamoDBの基本[30]
仕組み[5]
DynamoDB は、一貫して 1 桁ミリ秒レベルのレイテンシーを必要とするあらゆる規模のアプリケーションに対応した、高速かつ柔軟な NoSQL データベースサービスです。DynamoDB はその柔軟性のあるデータモデルと信頼性の高いパフォーマンスにより、モバイル、ウェブ、ゲーム、広告技術、IoT といったアプリケーションに大いに活用できます。
利点と機能[5]
ユースケース[5]
以下のような場所で使われている
- アドテック
- 小売り
- ソフトウェアとインターネット
- ゲーム
- メディアとエンターテイメント
- 銀行と金融
料金 [5]
DynamoDBの料金の特徴は以下3つの通り
- データの読み取り、書き込み、保存リクエストに対して料金が請求がされる
- 利用するキャパシティーモードによって料金体系が異なる
- 有効にしたオプション機能の料金も追加で請求される
公式ドキュメント[5]
安心安全公式ドキュメントのリンクはこちら↓
例えば以下のようなものが載っています。
その他のリソース[5]
2. 実際に触れてみよう[60]
2-1. DynamoDB サービストップページの開き方[5]
- AWS コンソールにログインして、ヘッダーにある検索窓をクリックします。
- 検索窓に「DynamoDB」と入力します。
- 検索結果の中から「DynamoDB」をクリックします。
- DynamoDB サービスのトップページが開きます。
2-2. 【余談】サービスのブックマークの仕方[5]
- 検索窓にブックマークしたい AWS サービス名(例では「DynamoDB」)を入力します。
- 検索結果横の星マークをクリックします。
- ブックマークしたい AWS サービスがブックマークバーに追加されます。
2-3. テーブルの作成[15]
では早速、テーブルを作成していきましょう!
2-3-1. テーブル一覧を表示する[1]
- DynamoDB サービスページの左にあるメニュー内の「テーブル」をクリックします。
- そうすることでテーブル一覧を表示することができます。
2-3-2. テーブルを作成する[14]
- 「テーブルの作成」をクリックします。
- 「テーブル名」に「
jft2023
」と入力します。 - 「主キー」に「
id
」と入力します。
- 他の設定を変更せずに一番下までスクロールします。
- タグセクションの「新しいタグの追加」をクリックします。
- 「キー」に「
Group
」と入力します。 - 「値」に「
jft2023-dynamodb-handson
」と入力します。 - 「テーブルの作成」をクリックします。
作成にはしばらく時間がかかりますが、通常は 1 分以内に完了します。
作成が完了すると以下のような画面になります。
テーブルを作成できました!🎉
2-4. テーブルの概要を知る[15]
テーブルを作成するとテーブル一覧に作成したテーブルが表示されます。
テーブルには以下のような情報が表示されています。
- テーブル名
- パーティションキー
- ソートキー
- インデックス
- 削除保護
- 読み取りキャパシティモード
- 書き込みキャパシティモード
- テーブルクラス
それぞれの項目を詳しく説明していきます。
2-4-1. テーブル名[1]
テーブル名はテーブルを作成するときに指定した名前が表示されます。
- 命名規則あり
- すべての名前は UTF-8 を使用してエンコードする必要があり
- 大文字と小文字が区別される
- テーブル名とインデックス名の長さは 3 ~ 255 文字
- 次の文字が使える
a-z
A-Z
0-9
_
(下線)-
(ダッシュ).
(ドット)
- 現在の AWS アカウントとリージョン内で一意である必要がある
- 例 1)米国東部 (バージニア北部) に People テーブルを作成した場合、米国東部 (バージニア北部) に追加で同名の People テーブルを作成することはできない
- 例 2)米国東部 (バージニア北部) に People テーブルを作成し、欧州 (アイルランド) に別の People テーブルを作成できるが、これらの 2 つのテーブルは全くの別物である
詳細については、「Amazon DynamoDB でサポートされるデータ型と命名規則」を参照してください。
2-4-2. パーティションキー[1]
パーティションキーはテーブルのデータを分散させるために使用されるキーです。
- DynamoDB はデータをパーティションに保存する
- パーティションは、AWS リージョン内の複数のアベイラビリティーゾーン間で自動的にレプリケート(複製)される
- パーティション管理は DynamoDB によって完全に処理される
- パーティションを自身が管理する必要はない
2-4-3. ソートキー[1]
同じパーティションキー値を持つすべての項目をソートするためのキーです。
- 同じパーティションキーを持つ他の項目とソートキーの昇順で項目が保存される
- テーブルから項目を読み込むには、パーティションのキーバリューとソートキーのキーバリューを指定する必要がある
- 目的の項目に同じパーティションキーバリューがある場合、単一のオペレーション (
Query
) でテーブルから複数の項目を読み取ることができる
2-4-4. インデックス[1]
インデックスはテーブルのデータを高速に検索するために使用されるキーです。
- パーティションキーとソートキーが存在するテーブルでは、同じパーティションのキーバリューが複数の項目に割り当てられることがある
- ソートキー値は複数の項目で異なる必要がある
2-4-5. 削除保護[1]
削除保護はテーブルの削除を防ぐために使用される機能です。
- 削除保護を有効にすると、その間はテーブルを削除することができなくなる
2-4-6. 読み取り/書き込みキャパシティモード[1]
読み取りおよび書き込みスループットの課金方法と容量の管理方法を制御します。
- 2 つのキャパシティモードがある
- オンデマンドモード
- プロビジョニングモード (デフォルト、無料利用枠の対象)
- テーブルを作成するときに設定できる
- 後から変更することも可能
- セカンダリインデックスは、ベーステーブルのキャパシティモードを継承する
- 参考:「読み取り/書き込みキャパシティモード」
オンデマンドモード
<TBD>
- 参考:「読み取り/書き込みキャパシティモード」
プロビジョニングモード
<TBD>
- 参考:「読み取り/書き込みキャパシティモード」
2-4-7. テーブルクラス[1]
<TBD>
参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.TableClasses.html
2-5. 項目の探索[15]
2-5-1. 項目の追加[5]
<TBD>
- 属性について
- 名前
- 値
- タイプ
参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/getting-started-step-2.html
2-5-2. 項目の検索[5]
< TBD >
参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/getting-started-step-3.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.SingleItem.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Query.html
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Scan.html
スキャン
クエリ
フィルタ
2-5-3. 項目の操作[5]
編集
複製
削除
CSV ダウンロード
- 選択した項目をダウンロード
- 検索した結果をダウンロード
2-6. お片付け[15]
3. 終わりに[5]
その他用語集
属性名
- 1 文字以上の長さ、64 KB 未満のサイズにする必要あり
- できるだけ短くすることがベストプラクティス
- 属性名がストレージとスループットの使用量の測定に含まれるため、属性名を短くすることで消費される読み取りリクエストユニットを減らすことができる
- 以下は例外で、これらの属性名は 255 文字以下である必要がある
- セカンダリインデックスのパーティションキー名
- セカンダリインデックスのソートキー名
- ユーザー指定の射影された属性の名前 (ローカルセカンダリインデックスにのみ適用)
- 参考:https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html
予約語と特殊文字
DynamoDB には予約語と特殊文字があります。
- 予約語の例:
INSERT
やDELETE
- 詳細は:「DynamoDB の予約語」
- 特殊文字の例:
#
(ハッシュ)や:
(コロン) - 命名目的でこれらの予約語と特殊文字を使用することができるが、非推奨
- 式でこれらの名前を使用するたびに、プレースホルダー変数を定義する必要がある
- 詳細は:「DynamoDB の式の属性名」
- ドキュメントによっては予約語を「使用しないでください」と書かれている