AWS - DynamoDB

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

概要

AWS DynamoDBは、AWSが提供するフルマネージド型のNoSQLデータベースサービスである。
キー・バリュー型およびドキュメント型のデータモデルをサポートし、高速で予測可能なパフォーマンスとシームレスなスケーラビリティを実現する。

主な特徴を以下に示す。

  • フルマネージド
    サーバ管理、ソフトウェアパッチ、セットアップ不要
  • 高パフォーマンス
    一桁ミリ秒のレスポンスタイム
  • 自動スケーリング
    トラフィックに応じて自動的に容量を調整
  • 高可用性
    複数のAZに自動的にデータを複製
  • 柔軟なスキーマ
    各アイテムが異なる属性を持つことが可能


AWS DynamoDBのデータモデルを以下に示す。

  • テーブル
    データを格納する最上位のコンテナ
  • アイテム
    テーブル内の個々のレコード
  • 属性
    アイテムを構成するデータフィールド (カラムに相当)
  • プライマリキー
    パーティションキー (必須) と ソートキー (オプション) で構成


AWS DynamoDBは永続的な無料利用枠を提供しており、個人利用や小規模なアプリケーションであれば無料枠内で運用できることが多い。


DynamoDBの無料枠について

無料枠の内容

  • ストレージ : 25[GB]まで無料
  • 読み込みリクエスト
    月200万リクエスト (25 RCU相当)
  • 書き込みリクエスト
    月200万リクエスト (25 WCU相当)
  • データ転送
    同一リージョン内は無料、1[GB]/月のアウトまで無料


※注意

  • この無料枠は12ヶ月限定ではなく、永続的に利用可能である。
  • DynamoDBオンデマンドモードでも無料枠が適用される。
  • グローバルテーブル、バックアップ、ストリームは別料金が掛かる。


料金体系

無料枠を超えた場合の料金 (東京リージョンの例)

  • オンデマンドモード
    • 書き込み: $1.4464 / 100万リクエスト
    • 読み込み: $0.28928 / 100万リクエスト
    • ストレージ: $0.285 / GB / 月

  • プロビジョンドモード
    • 書き込みキャパシティ: $0.000742 / WCU / 時間
    • 読み込みキャパシティ: $0.000148 / RCU / 時間
    • ストレージ: $0.285 / GB / 月



DynamoDBの停止

DynamoDBには 停止 という概念がない。
EC2 や RDS のようなインスタンスベースのサービスとは異なり、DynamoDBはフルマネージドのサーバーレスデータベースで、ユーザ側でサーバやインスタンスを管理する必要がないためである。

コストを抑える方法

使用していない場合のコストを抑えるには、以下の選択肢がある。

1. オンデマンドモードを使用
  • リクエストした分だけ課金される。
  • アクセスがなければリクエスト料金は発生しない。
  • ストレージは25[GB]まで永続的に無料である。


2. テーブルを削除
  • 完全に使用しない場合は削除する。
  • 必要に応じてバックアップから復元可能。


3. プロビジョニングモードの調整
  • プロビジョニングモードを使用している場合は、最小限のキャパシティ (読み込み 1、書き込み 1) に設定する。
  • ただし、この場合も最小限の課金は発生する。


ストレージ料金について

無料枠内 (25[GB]以下) の場合

  • ストレージ料金は発生しない(永続的な無料枠)
  • オンデマンドモードでアクセスがなければ、基本的にコストは0円


無料枠を超える場合 (25[GB]超え)

  • 超過分に対して$0.285/GB/月が課金される。
  • 例 : 30[GB]のデータがある場合は、5[GB]分の料金 (約$1.43/月) が発生する。


コストを下げる方法

  • ストレージコスト
    データが25[GB]以下であれば永続的に無料である。
    25[GB]を超える場合のみ超過分の料金が発生。
  • バックアップ
    テーブル削除前にオンデマンドバックアップやPoint-in-Time Recovery (PITR) を検討する。
  • データエクスポート
    S3へのエクスポートも選択肢の1つである。


完全に無料にするには、データが25[GB]以下でオンデマンドモードを有効にして、データベースにアクセスしないこと。


DynamoDBテーブルの作成

マネジメントコンソールでの作成

  1. AWSマネジメントコンソールにログインする。
  2. リージョンを選択する。
    東京リージョン : ap-northeast-1
  3. 検索バーに "DynamoDB" と入力して選択する。
  4. [テーブルの作成]を選択する。


テーブル設定

  1. テーブル名を入力する。
    例 : MyTable
  2. パーティションキーを設定する。
    • 属性名を入力(例:id
    • 型を選択:「文字列」、「数値」、「バイナリ」のいずれか
  3. ソートキー (オプション)
    • 必要に応じて追加する。
    • パーティションキーとソートキーの組み合わせが一意になる。
  4. テーブルクラス
    [DynamoDB Standard]を選択する。(推奨)
  5. キャパシティモード
    • オンデマンド (推奨)
      アクセスパターンが不規則な場合
    • プロビジョンド
      安定したアクセスパターンの場合
  6. [テーブルの作成]を選択する。


ステータスが"アクティブ"になれば使用可能である。

テーブル設定の確認

作成したテーブルを選択して、以下に示す項目を確認する。

  • 概要タブ
    テーブルのARN、作成日時、項目数
  • インデックスタブ
    グローバルセカンダリインデックス (GSI) の追加が可能
  • モニタータブ
    リクエスト数、レイテンシー等のメトリクス
  • アラームタブ
    CloudWatchアラームの設定



以下、MediaWiki形式で記述します: mediawiki== 概要 ==

このドキュメントでは、AWS DynamoDBの無料枠の詳細とテーブルの作成方法、Linux PCからのアクセス設定、基本的な操作方法について説明します。DynamoDBは永続的な無料利用枠を提供しており、個人利用や小規模なアプリケーションであれば無料枠内で運用できることがほとんどです。

DynamoDBの無料枠について

無料枠の内容

AWS無料利用枠(永続的):

  • ストレージ: 25 GBまで無料
  • 読み込みリクエスト: 月200万リクエスト(25 RCU相当)
  • 書き込みリクエスト: 月200万リクエスト(25 WCU相当)
  • データ転送: 同一リージョン内は無料、1 GB/月のアウトまで無料

注意点:

  • この無料枠は12ヶ月限定ではなく、永続的に利用可能
  • DynamoDBオンデマンドモードでも無料枠が適用されます
  • グローバルテーブル、バックアップ、ストリームは別料金

料金体系

無料枠を超えた場合の料金(東京リージョンの例):

オンデマンドモード:

  • 書き込み: $1.4464 / 100万リクエスト
  • 読み込み: $0.28928 / 100万リクエスト
  • ストレージ: $0.285 / GB / 月

プロビジョンドモード:

  • 書き込みキャパシティ: $0.000742 / WCU / 時間
  • 読み込みキャパシティ: $0.000148 / RCU / 時間
  • ストレージ: $0.285 / GB / 月

個人利用であれば、無料枠内で十分収まることがほとんどです。

DynamoDBテーブルの作成

マネジメントコンソールでの作成

手順:

  1. AWSマネジメントコンソールにログイン
  2. リージョンを選択(東京リージョン: ap-northeast-1 推奨)
  3. 検索バーに「DynamoDB」と入力して選択
  4. 「テーブルの作成」をクリック

テーブル設定:

  1. テーブル名を入力(例:MyTable
  2. パーティションキーを設定:
    • 属性名を入力(例:id
    • 型を選択:「文字列」、「数値」、「バイナリ」のいずれか
  3. ソートキー(オプション):
    • 必要に応じて追加
    • パーティションキーとソートキーの組み合わせが一意になります

テーブル設定:

  1. テーブルクラス:「DynamoDB Standard」を選択(推奨)
  2. キャパシティモード:
    • オンデマンド(推奨):アクセスパターンが不規則な場合
    • プロビジョンド:安定したアクセスパターンの場合
  3. 「テーブルの作成」をクリック

作成には数秒かかります。ステータスが「アクティブ」になれば使用可能です。

テーブル設定の確認

作成したテーブルをクリックして、以下を確認:

  • 概要タブ: テーブルのARN、作成日時、項目数
  • インデックスタブ: グローバルセカンダリインデックス(GSI)の追加が可能
  • モニタータブ: リクエスト数、レイテンシーなどのメトリクス
  • アラームタブ: CloudWatchアラームの設定

Linux PCからのアクセス設定

AWS CLIのインストール

方法1 : pip経由 (推奨)

Python3をインストールする。

sudo apt update
sudo apt install python3 python3-pip -y


AWS CLIをインストールする。

pip3 install awscli --user


正常にインストールされているかどうかを確認する。

aws --version


方法2 : 公式インストーラ

AWS CLIをダウンロードおよびインストールする。

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install


正常にインストールされているかどうかを確認する。

aws --version


アクセスキーの作成

  1. AWSマネジメントコンソールで "IAM" を検索する。
  2. [ユーザ] - 作成したIAMユーザを選択する。
  3. [セキュリティ認証情報]タブを選択する。
  4. [アクセスキーを作成]を選択する。
  5. ユースケース : [コマンドラインインターフェイス (CLI)]を選択する。
  6. 確認のチェックボックスにチェックを入力する。
  7. [次へ]を選択する。
  8. 説明タグを入力する。(オプション)
    例 : MyLinuxPC
  9. [アクセスキーを作成]を選択する。
    重要 : アクセスキーIDとシークレットアクセスキーを控えておく。
    • シークレットキーは後で確認できない。
    • .csvファイルをダウンロードして安全に保管する。


AWS CLIの設定

設定コマンドを実行する。

aws configure


以下に示すものを順番に入力する。

  • AWS Access Key ID
    作成したアクセスキーID
  • AWS Secret Access Key
    シークレットアクセスキー
  • Default region name
    例 : ap-northeast-1 (東京リージョン)
  • Default output format
    json (推奨)


設定ファイルの場所は以下の通りである。

  • ~/.aws/credentials
    アクセスキー情報
  • ~/.aws/config
    リージョンや出力形式


接続テスト

DynamoDBテーブル一覧を取得する。

aws dynamodb list-tables


特定のテーブルの情報を取得する。

aws dynamodb describe-table --table-name MyTable



DynamoDBの基本操作 (CLI)

データの追加

 # 単一アイテムの追加
 aws dynamodb put-item \
    --table-name MyTable \
    --item '{
       "id": {"S": "001"},
       "name": {"S": "山田太郎"},
       "age": {"N": "30"},
       "email": {"S": "yamada@example.com"}
    }'


データの取得

 # 単一アイテムの取得
 aws dynamodb get-item \
    --table-name MyTable \
    --key '{
       "id": {"S": "001"}
    }'


データのクエリ

 # パーティションキーでのクエリ
 aws dynamodb query \
    --table-name MyTable \
    --key-condition-expression "id = :id" \
    --expression-attribute-values '{
       ":id": {"S": "001"}
    }'


データのスキャン

 # テーブル全体のスキャン (注意 : 大きなテーブルでは高コスト)
 aws dynamodb scan \
    --table-name MyTable \
    --limit 10


データの更新 (UpdateItem)

 # 既存アイテムの更新
 aws dynamodb update-item \
    --table-name MyTable \
    --key '{
       "id": {"S": "001"}
    }' \
    --update-expression "SET age = :newage" \
    --expression-attribute-values '{
       ":newage": {"N": "31"}
    }'


データの削除 (DeleteItem)

 # 単一アイテムの削除
 aws dynamodb delete-item \
    --table-name MyTable \
    --key '{
       "id": {"S": "001"}
    }'



Python SDK (boto3) の使用

以下の例では、Pythonを使用してAWS DynamoDBを操作している。

まず、boto3をインストールする。

pip3 install boto3 --user


 # dynamodb_example.pyファイル
 
 import boto3
 from boto3.dynamodb.conditions import Key
 
 # DynamoDBリソースの作成
 dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-1')
 table = dynamodb.Table('MyTable')
 
 # データの追加
 def put_item():
    response = table.put_item(
       Item={
          'id': '002',
          'name': '佐藤花子',
          'age': 25,
          'email': 'sato@example.com'
       }
    )
    print("PutItem成功:", response)
 
 # データの取得
 def get_item():
    response = table.get_item(
       Key={
          'id': '002'
       }
    )
    item = response.get('Item')
    print("取得したアイテム:", item)
 
 # データのクエリ
 def query_items():
    response = table.query(
       KeyConditionExpression=Key('id').eq('002')
    )
    items = response.get('Items', [])
    print("クエリ結果:", items)
 
 # データの更新
 def update_item():
    response = table.update_item(
       Key={
          'id': '002'
       },
       UpdateExpression='SET age = :val',
       ExpressionAttributeValues={
          ':val': 26
       }
    )
    print("UpdateItem成功:", response)
 
 # データの削除
 def delete_item():
    response = table.delete_item(
       Key={
          'id': '002'
       }
    )
    print("DeleteItem成功:", response)
 
 # メイン処理
 if __name__ == '__main__':
    put_item()
    get_item()
    update_item()
    query_items()
    # delete_item()  # 削除する場合はコメント解除


# 実行方法
python3 dynamodb_example.py


デバッグ方法

 # AWS CLIのデバッグモード
 
 aws dynamodb list-tables --debug


 # boto3のログ設定
 
 import logging
 logging.basicConfig(level=logging.DEBUG)



セキュリティ

アクセスキーの管理

  • アクセスキーをコードに直接記述しない。
  • GitHubなどにアクセスキーをコミットしない。
  • 定期的にアクセスキーをローテーションする。(90日ごと推奨)
  • 不要になったアクセスキーは削除する。


IAMポリシーの最小権限

  • AWS DynamoDB専用のIAMユーザを作成する場合
 {
    "Version": "2026-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
             "dynamodb:PutItem",
             "dynamodb:GetItem",
             "dynamodb:Query",
             "dynamodb:Scan",
             "dynamodb:UpdateItem",
             "dynamodb:DeleteItem"
          ],
          "Resource": "arn:aws:dynamodb:ap-northeast-1:*:table/MyTable"
       }
    ]
 }


VPCエンドポイントの利用 (オプション)

EC2等のAWSリソースからアクセスする場合は、VPCエンドポイントを使用するとインターネットを経由せずにDynamoDBにアクセスすることができる。


トラブルシューティング

エラー : "An error occurred (AccessDeniedException)"

  • 原因
    IAM権限不足
  • 解決
    IAMユーザに適切なポリシーをアタッチする。


エラー : "ResourceNotFoundException"

  • 原因
    テーブルが存在しない、またはリージョンが違う
  • 解決
    テーブル名とリージョンを確認する。


エラー : "ValidationException"

  • 原因
    データ型の不一致や必須キーの欠如
  • 解決
    スキーマ定義を確認する。