Amazonの強力なNoSQLデータベースサービスであるDynamoDBは、
スケーラビリティとパフォーマンスの高さで多くの企業や開発者から注目を集めています。
この記事では、そんなDynamoDBについてわかりやすく説明します。
読み終えたら、DynamoDBにデータを登録できるようになっているはずです。
本記事の内容
- DynamoDBとは?
- DynamoDBのコスト
- DynamoDBの動作確認
それでは、上記に沿って解説していきます。
DynamoDBとは?
DynamoDBとは、Amazon Web Services (AWS) が提供するフルマネージドなNoSQLデータベースサービスです。
高速でスケーラブルな性質を持ち、大規模なアプリケーションのデータ管理に適しています。
主な特徴は、以下。
- 高スケーラビリティ
- 高パフォーマンス
- フルマネージドサービス
- 柔軟なデータモデル
こうやって見ると、DBの課題を解決してくれるサービスと言えますね。
正直、DBは管理コストが問題になることが多いです。
データが蓄積されてくると、そのことが問題になってきます。
その呪縛から逃れることができるということですよね。
もちろん、それにはその相応のコストが必要にはなります。
ただ、データが蓄積されるということはそれだけシステムとして成功している証です。
ましてや利益が出ているなら、積極的にDynamoDBの利用を考えてよいかもしれません。
管理コストを考えたら、トータルで安くなる可能性は大いにあります。
(リプレースは大変な作業になりますが・・・)
本当、なんだかんだ言ってもシステムのトラブルの原因は大抵DB発です。
セキュリティなどの要素もありますが、経験的にDB関連が多いと言えます。
そのようなリスクを取り除けるなら、DynamoDBは全然ありです。
DynamoDBのコスト
Amazon DynamoDBの料金設定オプションには、次の二つが存在します。
- オンデマンドキャパシティーモード
- プロビジョニング済みキャパシティーモード
資金に余裕があるなら、オンデマンドキャパシティーモードが適しています。
全部自動で任せきりで良いのですから。
トラフィックが安定していて見積もれるなら、プロビジョニング済みキャパシティーモードがお得です。
コストを少しでも抑えたいなら、プロビジョニング済みキャパシティーモードが有効と言えます。
その分、作業は発生することにはなりますけどね。
いろいろと考える前に、とりあえず無料枠で使ってみましょう。

今(2024年1月末時点)のところは、期限も設定されていません。
ストレージも25GBを無料で使えます。

検証なら、全く問題なく行えるでしょう。
いや、小規模システムであれば普通に本番利用できるレベルかも・・・
DynamoDBの動作確認
とりあえず触ってみましょうということで、動作を確認します。
まずは、テーブルの作成からです。
テーブルの作成

「テーブル」メニューで表示した画面に次のボタンがあります。

このボタンをクリックすると、「テーブルの作成」画面が表示されます。

DynamoDBのテーブルは、スキーマレスです。
そのため、とりあえず主キーとなるカラムを登録すればOKとなっています。
あとは、必要であれば随時登録すれば追加されます。
この適当さは、ドキュメント指向データベースの特徴ですね。
今回は、テーブル名を「dynamo_test」とします。
そして、パーティションキーを次のように登録します。

ソートキーは、設定しません。
ソートキーを設定すると、複合キー扱いになってデータ取得の際に面倒です。
とりあえず、これでテーブルの作成は完了です。
Lambda関数の作成
次は、Lambda関数(Python)を作成します。
コードは、以下となります。
import json
import boto3
import datetime
import decimal
from botocore.exceptions import ClientError
dt = datetime.datetime.now()
ts = decimal.Decimal(datetime.datetime.timestamp(dt))
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
try:
table = dynamodb.Table('dynamo_test')
# テーブルへのアイテム追加処理
table.put_item(
Item={
"id": context.aws_request_id,
"timestamp": ts
}
)
# 成功レスポンス
return {
'statusCode': 200,
'body': json.dumps({
"message": "Item successfully added",
"item": {
"id": context.aws_request_id,
"timestamp": str(ts)
}
})
}
except ClientError as e:
# DynamoDB操作中にエラーが発生した場合のエラーレスポンス
return {
'statusCode': 500,
'body': json.dumps({
"message": "Error adding item to DynamoDB",
"error": str(e)
})
}
このLambda関数のロールには、DynamoDBの権限を付与しておく必要があります。

権限が適切に付与されていれば、関数実行の結果は次のようになります。

登録できたかどうかを確認しましょう。
「id」で検索します。

検索した結果、先ほど登録したデータが表示されています。


