HANDS-ON 03 / DATABASE
DynamoDBで
テーブルを作成してみよう!
AWSマネジメントコンソールからNoSQLデータベースのテーブルを1つ作成し、項目(アイテム)を手で追加します。追加した項目をクエリとスキャンで取り出しながら、リレーショナルデータベースとの違いを画面で確認しましょう。
最初に確認:料金と後片付け
DynamoDBはテーブルの保存データ量と読み書きのリクエスト数に応じて料金が発生する可能性があります。無料利用枠の対象でも、アカウントの状態・リージョン・他のリソースによって請求される場合があります。今回の数件の項目では、ほとんど費用はかかりませんが、作業が終わったら最後の「片付け」まで必ず実施してください。
テーブル名 cp-handson-items は、アカウントとリージョンの組み合わせの中で一意である必要があります。すでに同じ名前のテーブルがある場合は、末尾に自分の識別子を付けた名前に読み替えてください。
画面は2026年9月10日現在のAWSコンソールで撮影しています。 AWSコンソールは更新によって表示が変わることがありますが、項目名と考え方を手がかりに進めてください。
このハンズオンでできるようになること
テーブルと項目という、DynamoDBの基本単位を説明できる。
パーティションキーが何のために必要なのかを説明できる。
DynamoDBがスキーマレスである意味を、実際のデータで確認できる。
クエリとスキャンの違いを、操作しながら説明できる。
作業の流れ
次の順番で進めます。受験者向けに、各操作のあとに「なぜ必要か」も説明しています。
画像の見方:赤枠がクリック・入力・確認する場所です。左右に画像が並ぶ場合は、左が遷移前、右が遷移後です。
- 準備を確認するリージョンと権限
- テーブルを作成するパーティションキーとキャパシティモード
- 項目を追加する属性がバラバラでも登録できる
- 項目を一覧で確認する項目を探索でスキャン
- クエリで1件だけ取り出すスキャンとの違いを体感
- 作業後に片付けるテーブルを削除
GET READY
1. 作成前に、リージョンと権限を確認する
このハンズオンでは、AWSコンソールのリージョンを米国東部(バージニア北部) / us-east-1にそろえます。DynamoDBのテーブルはリージョンごとに独立しているため、リージョンが違うと、作成したテーブルが一覧に表示されません。
作業前チェック
- AWSコンソールに、ハンズオン用のIAMユーザーでログインしている。
- 画面右上のリージョンが「米国(バージニア北部)」になっている。
- DynamoDBのテーブルを作成・削除する権限がある。権限がない場合は、管理者に依頼する。
- EC2のハンズオンで、AWSコンソールの基本的な画面遷移を体験している。
DynamoDBとは:AWSがフルマネージドで提供するNoSQLデータベースです。サーバーの構築やパッチ適用は不要で、テーブルを作った直後から読み書きできます。RDSのように「データベースインスタンス」を起動する必要がない点が、大きな違いです。
CREATE A TABLE
2. DynamoDBのテーブルを作成する
DynamoDBでは、データの入れ物をテーブルと呼びます。今回は、商品カタログのような使い方を想定して、パーティションキーだけを持つシンプルなテーブルを1つ作ります。
2-1. DynamoDBのテーブル一覧を開く
- AWSコンソール上部の検索欄で「DynamoDB」を検索し、Amazon DynamoDBを開きます。
- 左メニューの「テーブル」を選びます。
- 「テーブルの作成」を選びます。
遷移前:テーブル一覧
遷移後:テーブルの作成
なぜテーブル一覧から始める? DynamoDBには「インスタンスの起動」に相当する手順がありません。テーブルを作ればそれがそのままサービスの利用開始になります。RDSとの違いがはっきり出るところです。
2-2. テーブル名とパーティションキーを入力する
- 「テーブル名」に
cp-handson-itemsと入力します。 - 「パーティションキー」に
item_idと入力します。 - パーティションキーの型は文字列を選びます。
- 「ソートキー」は空欄のままにします。今回はパーティションキーだけの構成です。
なぜパーティションキーが必要? DynamoDBは、データを複数のサーバー(パーティション)に分散して保存します。どのサーバーに置くかは、パーティションキーの値から計算して決まります。つまりパーティションキーは、項目を一意に識別する「主キー」であると同時に、データの置き場所を決める「住所」でもあります。だからテーブルの作成時に必ず1つ決める必要があり、あとから変更できません。
キー名は item_id のように、あとから見て意味がわかる名前にします。DynamoDBでは、パーティションキーとソートキー以外の属性はテーブル定義に登録しません。定義するのはキーだけ、という点を覚えておいてください。
2-3. キャパシティモードを確認して作成する
- 「テーブル設定」は「デフォルト設定」のままにします。
- 「読み込み/書き込みキャパシティの設定」がオンデマンドになっていることを確認します。
- 画面下部の「テーブルの作成」を選びます。
- テーブルのステータスが「作成中」から「アクティブ」に変わるまで、数十秒待ちます。
遷移前:キャパシティモードの確認
遷移後:テーブルがアクティブ
テーブルの準備をしている状態です。まだ読み書きできません。
読み書きできる状態です。ここまで来たら次のステップへ進みます。
オンデマンドとプロビジョニング済みの違い:オンデマンドは、実際に読み書きしたリクエストの数だけ課金される従量課金です。事前の見積もりが不要で、急なアクセス増にも自動で対応します。プロビジョニング済みは、1秒あたりの読み書き性能(キャパシティユニット)をあらかじめ指定して確保する方式で、トラフィックが安定している場合は単価を抑えられますが、指定した量を超えるとリクエストが制限されます。学習用や、アクセス量が読めない用途では、オンデマンドが扱いやすい選択です。
PUT ITEMS
3. テーブルに項目を追加する
DynamoDBでは、1件分のデータを項目(アイテム)と呼びます。リレーショナルデータベースの「行」に近い考え方ですが、決定的に違うのは、項目ごとに持っている属性がバラバラでもよいことです。今回は、その違いがはっきり出るように、あえて種類の違う商品を3件登録します。
3-1. 登録するデータを確認する
これから登録するのは、次の3件です。共通しているのはパーティションキーの item_id だけで、それ以外の属性は項目ごとに違います。
1件目:書籍item_id = book-001title / author / price
2件目:文房具item_id = pen-002product_name / color / stock
3件目:雑貨item_id = mug-003product_name / capacity_ml
属性の値と型は、次のとおりです。コンソールで入力するときは、この表のとおりに設定してください。
1件目:book-001
item_id(文字列)=book-001title(文字列)=クラウドプラクティショナー標準テキストauthor(文字列)=佐藤 みなとprice(数値)=2800
2件目:pen-002
item_id(文字列)=pen-002product_name(文字列)=ゲルインクボールペン 0.5mmcolor(文字列)=黒stock(数値)=120
3件目:mug-003
item_id(文字列)=mug-003product_name(文字列)=ステンレスマグカップcapacity_ml(数値)=350
3件目の mug-003 には price も stock もありません。リレーショナルデータベースなら、列が足りない・NULLを入れるといった調整が必要ですが、DynamoDBではそのまま登録できます。
3-2. 1件目(書籍)を登録する
- テーブル一覧で
cp-handson-itemsを選びます。 - 「項目を探索」を選びます。
- 「項目を作成」を選びます。
item_idの値にbook-001と入力します。- 「新しい属性を追加」から文字列を選び、属性名
title、値クラウドプラクティショナー標準テキストを入力します。 - 同じ手順で、文字列の
authorに佐藤 みなとを入力します。 - 「新しい属性を追加」から数値を選び、属性名
price、値2800を入力します。 - 「項目を作成」を選んで確定します。
遷移前:項目を探索
遷移後:項目の作成画面
ここが重要:属性を追加するときに毎回「型」を選んでいる点に注目してください。DynamoDBは、テーブル定義ではなく項目ごとに属性名と型を持ちます。テーブル側で決まっているのはパーティションキーだけです。
3-3. 2件目・3件目を登録する
- もう一度「項目を作成」を選びます。
- 2件目として、
item_idにpen-002、文字列のproduct_nameにゲルインクボールペン 0.5mm、文字列のcolorに黒、数値のstockに120を入力して作成します。 - 同じ手順で3件目として、
item_idにmug-003、文字列のproduct_nameにステンレスマグカップ、数値のcapacity_mlに350を入力して作成します。 - 1件目とは属性名が違っていても、エラーにならないことを確認します。
属性名の入力を間違えると、意図しない別の属性ができてしまいます。product_name と productname は別物として扱われるため、スペルと記号(アンダースコア)を確認しながら入力してください。
EXPLORE ITEMS
4. 追加した項目を一覧で確認する
3件の登録が終わったら、「項目を探索」の画面で一覧を確認します。この一覧表示は、内部的にはスキャンという操作です。
cp-handson-itemsの「項目を探索」を開きます。- 「スキャン」が選ばれていることを確認し、「実行」を選びます。
- 返された項目が3件であることを確認します。
- 表の列に、
title、product_name、price、stock、capacity_mlなど、すべての項目の属性が混ざって並ぶことを確認します。 - その項目が持っていない属性のセルは、空欄(
-)になります。
スキャンとは:テーブルの全項目を先頭から読む操作です。条件を後から絞り込むこともできますが、絞り込む前にテーブル全体を読むため、項目数が増えるほど時間と料金がかかります。今回は3件しかないので一瞬で終わりますが、数百万件のテーブルでこれを実行すると重い処理になります。
RUN A QUERY
5. クエリで目的の項目だけを取り出す
次は、同じ「項目を探索」の画面でクエリを実行します。パーティションキーの値を指定して、必要な項目だけを直接取り出す操作です。
5-1. item_idを指定してクエリを実行する
- 「項目を探索」の画面で、「スキャン」から「クエリ」へ切り替えます。
- パーティションキー
item_idの値にbook-001と入力します。 - 「実行」を選びます。
- 返された項目が1件だけであること、その内容が
title・author・priceを持つ書籍のデータであることを確認します。
遷移前:クエリ条件の入力
遷移後:クエリ結果は1件
クエリとスキャンの違い:クエリはパーティションキーの値を指定するため、DynamoDBはそのデータが置かれているパーティションだけを読みます。テーブルに何件データがあっても、読む量は目的の項目のぶんだけです。一方スキャンは全項目を読むため、件数が増えるほど遅く、費用も増えます。実運用では、キーで引けるクエリを基本にして、スキャンは例外的な用途に限る、というのがDynamoDBの設計の基本です。
試してみよう:item_id に pen-002 を入れて実行すると、今度は文房具の1件だけが返ります。存在しない値(例:book-999)を入れると、返された項目は0件になります。クエリは「キーに完全一致する項目を取りに行く」操作だと確認できます。
CLEAN UP
6. 作業後にテーブルを削除する
学習が終わったら、テーブルを削除します。テーブルを削除すると、その中の項目もすべて削除され、元に戻せません。削除する前に、対象のテーブル名が cp-handson-items であることを必ず確認してください。
- DynamoDBの「テーブル」一覧を開きます。
cp-handson-itemsのチェックボックスを選びます。- 「削除」を選びます。
- 確認ダイアログで、指示された文字(
削除またはconfirm)を入力します。表示される文言は画面の指示に従ってください。 - 「バックアップを作成」のチェックは、今回は外したままにします。
- 「テーブルの削除」を選び、一覧から
cp-handson-itemsが消えたことを確認します。
遷移前:削除の確認
遷移後:削除完了
削除するときの注意
DynamoDBのテーブル削除は、EC2インスタンスの「終了」と同じく、取り消せない操作です。削除したテーブルと同じ名前で作り直すことはできますが、中のデータは戻りません。業務のテーブルを扱うときは、削除前にバックアップを取るか、削除保護を有効にしておきます。
学習用に作成したリソース:DynamoDBテーブル cp-handson-items(項目3件を含む)
用語を整理する
- DynamoDB
- AWSがフルマネージドで提供するNoSQLデータベースです。サーバーの管理が不要で、規模に応じて自動的に拡張します。
- テーブル
- 項目をまとめて保存する入れ物です。リージョンごとに独立しています。
- 項目(アイテム)
- テーブルに保存される1件分のデータです。リレーショナルデータベースの「行」に相当します。
- 属性(アトリビュート)
- 項目が持つ名前と値の組です。項目ごとに構成が違っていても構いません。
- パーティションキー
- 項目を一意に識別する主キーであり、データの保存先パーティションを決める値でもあります。テーブル作成時に決め、あとから変更できません。
- スキーマレス
- キー以外の項目構造をテーブル側で固定しない性質です。項目ごとに異なる属性を持てます。
- クエリ
- パーティションキーの値を指定して、該当する項目を取り出す操作です。読む量が少なく、高速です。
- スキャン
- テーブルの全項目を読む操作です。件数が増えるほど時間と料金がかかります。
- オンデマンド
- 実際のリクエスト数に応じて課金されるキャパシティモードです。事前の性能見積もりが不要です。
試験対策のポイント
CLF-C02では、DynamoDBが「サーバーレスのNoSQLデータベースで、キーバリュー/ドキュメント型」であること、RDSやAuroraのようなリレーショナルデータベースとは用途が違うこと、単一桁ミリ秒の応答が求められる用途に向くことが問われます。今回のハンズオンで、テーブルを作るだけで即座に読み書きできた体験が、そのまま「サーバーレス」の意味につながります。
公式ドキュメント
次に学ぶなら
テーブルの作成と読み書きができたら、Amazon DynamoDBの解説ページで、RDSとの使い分けやグローバルテーブルなどの特徴を整理しましょう。
Amazon DynamoDBの解説へ戻る