亀のコツコツクラウドインフラ

2024年12月30日

ReadThrottleEvents/WriteThrottleEventsのメトリクス生成してカスタムメトリクスを作成!【DynamoDB】

はじめに

以下のような方にオススメの内容になっています。

  • DynamoDBのReadThrottleEvents/WriteThrottleEventsメトリクスが表示されず困っている
  • CloudWatchで独自のモニタリングを実現したい
  • DynamoDBの負荷テストを行い、システムの限界を把握したい

この記事では、DynamoDBのReadThrottleEventsWriteThrottleEventsといったスロットリング関連のメトリクスが表示されず困っている方に向けて、メトリクスを生成する方法を解説しています。

ReadThrottleEvents/WriteThrottleEventsの生成手順

  1. DynamoDBテーブルの作成を行い、プロビジョンドモードにする
  2. 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のスロットリングメトリクスの生成方法を理解し、システムの限界を把握するための負荷テストを実施できるようになります。この知識を活用して、システムのパフォーマンス監視や改善に役立ててください。

この記事を書いた人

コツコツ亀

コツコツ亀

Webエンジニアとして活動中
AWSを使用してWebアプリケーションを作ったり、サーバーを構築したりしています。

関連記事

新着記事