はじめに
以下のような方にオススメの内容になっています。
- DynamoDBの
ReadThrottleEvents/WriteThrottleEvents
メトリクスが表示されず困っている - CloudWatchで独自のモニタリングを実現したい
- DynamoDBの負荷テストを行い、システムの限界を把握したい
この記事では、DynamoDBのReadThrottleEvents
やWriteThrottleEvents
といったスロットリング関連のメトリクスが表示されず困っている方に向けて、メトリクスを生成する方法を解説しています。
ReadThrottleEvents/WriteThrottleEventsの生成手順
- DynamoDBテーブルの作成を行い、プロビジョンドモードにする
- Lambdaで大量のリクエストを送信する
コストについて気になる方は、下のセクションで説明しているThrottledRequestsの生成コストを参考にしてください。
DynamoDBのテーブルの作成手順がわからない場合は以下の記事を参考にしてください
【初心者必見】DynamoDBの設定手順と活用法!概要と具体的な使い方を解説
まずは、プロビジョンドモードのテーブルを作成していきます。
読み込みと書き込みのキャパシティーを最小を1
・最大を10
に設定します。
Lambdaのコードを書いていきます。テーブル名は任意で設定してください。
Lambdaのコードの実行方法や設定方法についてわからない方は以下の記事を参考にしてください。
【初心者向け】Lambdaを使ってみよう!AWSでサーバーレス環境を構築する方法
おそらく書き込み時アラートでエラーになるので、読み込みと書き込みは2回別々で実行しましょう。
まずは、書き込みを1000回実行します。
import boto3
import random
def lambda_handler(event, context):
dynamodb = boto3.client('dynamodb', region_name='ap-northeast-1')
table_name = "kame-cloudwatch-test"
# 書き込みテスト: 1000件のデータを追加
for i in range(1000):
dynamodb.put_item(
TableName=table_name,
Item={
'cloudwatch_test': {'S': f'TestKey{i}'}, # 一意のパーティションキーを生成
'value': {'N': str(random.randint(1, 1000))}
}
)
次に読み込みを1000回実行します。
import boto3
import random
def lambda_handler(event, context):
dynamodb = boto3.client('dynamodb', region_name='ap-northeast-1')
table_name = "kame-cloudwatch-test"
# 読み込みテスト: 1000回ランダムにデータを取得
for _ in range(1000):
key = f'TestKey{random.randint(0, 999)}' # 書き込んだキーの中からランダムに選択
dynamodb.get_item(
TableName=table_name,
Key={'cloudwatch_test': {'S': key}}
)
CloudWatchでReadThrottleEvents/WriteThrottleEvents
が追加されていたらOKです。
ThrottledRequestsとは
DynamoDBのThrottledRequests
メトリクスは、スループット制限(スロットリング)が発生したときに記録されます。
ThrottledRequests
という用語は実際には以下の2つのメトリクスのことです。
ReadThrottleEvents
WriteThrottleEvents
ThrottledRequestsの生成コスト
ThrottledRequests
は1000件ごとにコストが発生します。
- 読み込み1リクエストあたり0.00199円
- 書き込み1リクエストあたり0.00167円
読み込み1000件で大体2円くらいかかる程度なので、安心してテストしてください。書き込みも1000件大体2円いかないくらいです。
小規模なテスト(数千リクエスト規模)であれば数円〜数十円程度のコストで済みます。
まとめ
これらのメトリクスは、リクエストがスループット制限を超えた場合に記録されますが、通常の運用ではなかなか確認できない場合もあります。
負荷テストに伴うコストについては、小規模なテストであれば数円程度で実施可能です。
DynamoDBのスロットリングメトリクスの生成方法を理解し、システムの限界を把握するための負荷テストを実施できるようになります。この知識を活用して、システムのパフォーマンス監視や改善に役立ててください。