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

2024年12月26日 (最終更新日:2024年12月30日)

【AWS DynamoDB】Streamsでリアルタイムデータ処理を設定する!

はじめに

DynamoDB Streams、イベント駆動型のシステムを構築する際に使いやすく安価です。

以下のような方におすすめの内容です。

  • DynamoDB Streamsを初めて使う
  • リアルタイムデータに興味がある
  • AWS認定の勉強している

この記事では、設定手順から基本概念、具体的なユースケースまでを解説し、DynamoDB Streamsを効果的に活用するための方法を解説します。

DynamoDB Streamsの設定手順

まずは、設定手順から解説していきます。

  1. DynamoDBテーブルの作成
  2. DynamoDB Streamsの有効化
  3. Lambda関数との連携
  4. ストリームの確認

テーブルの作成をまずは行います。基本的なテーブル作成は以下の記事を参考にしてください。

【初心者必見】DynamoDBの設定手順と活用法!概要と具体的な使い方を解説

ストリームを有効にするため、「オンにする」をクリックしましょう。

ストリームの設定は「新しいイメージ」を選択してストリームをオンにします。

それぞれの表示タイプでリアルタイム性を重視する場合は新しいイメージを選択します。

Lambda関数の作成を行います。
Lambdaの使用方法については以下を参考にしてください。

【初心者向け】Lambdaを使ってみよう!AWSでサーバーレス環境を構築する方法

設定は今回は以下の内容にしています。

関数名:KameDynamoDBStream
ランタイム:Python(使用するプログラミング言語)
実行ロール:dynamodb_access_role(アクセス権限が付与されたIAMロールを選択)

Lambda関数のコードでテスト用の処理を書いていきます。

import json

def lambda_handler(event, context):
    for record in event['Records']:
        print("DynamoDB Record:", json.dumps(record['dynamodb']))
    return "Processed"

作成したLambda関数とDynamoDBを紐付けます。
「トリガーの作成」を行いましょう。

作成したLambda関数を選択して、バッチサイズを自分に合った設定にします。

バッチサイズが少なければ少ないほど取得速度が速くなるため、コストが上がりますがリアルタイム性を求めるなら少ない方がいいです。

基本的に100以上の大きな値になると、呼び出し頻度が減るのでコストが安くなります。バッチサイズを10000にしても、速度的にあまり影響ないので、ほとんどの場合10000で大丈夫です。

トリガーを作成後、レコードを挿入してLamdba関数が実行されるとOKです。

確認にはCloudWatch Logsにログが出力されていたらLambda関数が実行されています。

もし、CloudWatch Logsにログが出力されない場合はIAMロールを見直してみましょう。

DynamoDB Streamsとは

DynamoDB Streamsは、DynamoDBテーブル内で発生したデータ変更イベントをリアルタイムで記録するサービスです。変更データはストリームとして保持され、外部システムで利用できます。

特徴として以下が挙げられます。

  • 変更のキャプチャ: テーブルに追加、更新、削除されたデータの変更内容をストリームに記録します。
  • リアルタイム性: データ変更が即座にストリームに反映されます。
  • 連携性: Lambda、KinesisなどAWSの他のサービスとシームレスに統合可能です。
  • 保持期間: ストリームのデータは最大24時間保持されます。

ストリームの表示タイプの設定では、リアルタイム処理やレプリケーションに適した新しいイメージです。
ただし、ユースケースに応じて、例えば監査や変更差分が必要なら新旧イメージを選ぶとよいでしょう。選択の際は、コストと必要なデータ量のバランスも考慮してください。

表示タイプ内容用途
キー属性のみデータの変更があった項目のプライマリキーを記録。データ変更の追跡をする必要があるが、変更内容が不要な場合
新しいイメージ変更後のデータ(新しいイメージ)を記録。データ更新された後の完全な状態を必要とする場合
古いイメージ変更前のデータ(古いイメージ)を記録。変更前のデータを記録しておきたい場合
新旧イメージ変更前と変更後の両方のデータを記録。データの変更差分や、変更前後の比較が必要な場合

DynamoDB Streamsユースケース

ECサイトの注文テーブルに新しい注文が追加されるたびに通知メールを送信する

リアルタイムデータ処理。
DynamoDB Streamsが変更イベントをキャプチャ。
Lambdaがトリガーとなり、メール送信サービスを実行。

DynamoDBの変更を別のデータベース(例: RDSやElasticsearch)にリアルタイムで反映

データ複製と同期。
StreamsをKinesis Firehoseまたは直接Lambdaで処理。
データをターゲットストアに書き込み。

ユーザー行動データを記録してビジネスインサイトを得る

ログ収集と分析
DynamoDB Streamsで変更履歴を収集。
データをS3に保存し、AthenaやQuickSightで分析。

DynamoDBの変更を別リージョンにバックアップして障害に備える

Streamsのデータを別リージョンのDynamoDBに複製。

まとめ

DynamoDB Streamsは、DynamoDBテーブルのデータ変更をリアルタイムで追跡し、他のAWSサービスや外部システムと連携して活用できる便利サービスです。

設定手順を理解し、ユースケースに応じた活用方法を選ぶことで、リアルタイムデータ処理や同期、ログ分析などさまざまな用途に対応可能です。

本記事を参考に、DynamoDB Streamsを活用して、効率的なデータ管理と処理を行いましょう。

この記事を書いた人

コツコツ亀

コツコツ亀

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

関連記事

新着記事