DynamoDB Streams とグローバルテーブル
Streams でアイテム単位の変更をリアルタイムに処理し、グローバルテーブルでリージョン間にデータを複製して、世界中から低レイテンシーで読み取れるようにします。
「DynamoDB Streams とグローバルテーブル」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
DynamoDB Streams:変更データキャプチャ
DynamoDB Streamsは、DynamoDBテーブル内のアイテム単位の変更を時系列に記録します。アイテムが作成、更新、削除されるたびに、DynamoDBはその変更内容を示すストリームレコードを書き込みます。ストリームレコードは、書き込まれてから24時間利用できます。
Streamsは、DynamoDBを使ったイベント駆動アーキテクチャの基盤です。一般的な用途には、リアルタイム処理のためのLambda関数のトリガー、監査ログの保持、別のデータストアへのデータレプリケーション、データ変更時のキャッシュ無効化などがあります。
# Enable a DynamoDB Stream on an existing table
aws dynamodb update-table \
--table-name Orders \
--stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGESストリームビューの種類
ストリームを有効にすると、各ストリームレコードに含めるデータを決めるStreamViewTypeを選択します。
- KEYS_ONLY:変更されたアイテムの主キー属性のみ
- NEW_IMAGE:変更後のアイテム全体
- OLD_IMAGE:変更前のアイテム全体
- NEW_AND_OLD_IMAGES:変更前と変更後の両方の状態
監査(何が変更されたかを確認する目的)にはNEW_AND_OLD_IMAGES、レプリケーションやキャッシュ更新にはNEW_IMAGEを選択します。変更されたアイテムだけを特定し、現在の状態は別途取得する場合はKEYS_ONLYを選択します。
Lambdaによるストリーム処理
DynamoDB Streamを利用する最も一般的な方法は、AWS Lambdaを使うことです。Lambdaはストリームをポーリングし、ストリームレコードのバッチを渡して関数を呼び出します。ポーリング、チェックポイント管理、再試行はLambdaが自動的に処理します。
主な設定パラメータには、バッチサイズ(1回の呼び出しで処理するレコード数、最大10,000)、エラー時のバッチ分割(失敗したバッチを分割して問題のあるレコードを特定する機能)、失敗時の送信先(処理できないレコードを送るSQSまたはSNS)があります。Lambdaは各シャードから並列に読み取るため、並列度はストリーム内のシャード数と同じです。
# Add Lambda as a stream trigger via CLI
aws lambda create-event-source-mapping \
--function-name process-orders-stream \
--event-source-arn arn:aws:dynamodb:us-east-1:123456789:table/Orders/stream/2026-06-20T00:00:00.000 \
--starting-position LATEST \
--batch-size 100 \
--bisect-batch-on-function-errorストリームのユースケース
SAA-C03試験で問われるDynamoDB Streamsの実用的なユースケースは次のとおりです。
- クロスリージョンレプリケーション:Lambdaがストリームを読み取り、別のリージョンのテーブルに変更を書き込みます(Global Tablesが登場する前は標準的なパターンでした)
- ElastiCacheの無効化:DynamoDBのアイテムが変更されたとき、Lambdaが対応するキャッシュキーを無効化または更新します
- 検索インデックスの同期:アイテムの変更をOpenSearch Serviceに送信し、DynamoDBのデータに対する全文検索を可能にします
- 監査ログ:規制対応のため、すべての変更をS3またはコンプライアンス用のデータストアに書き込みます
- イベント駆動マイクロサービス:特定のアイテムが変更されたときに、後続のサービスを起動します
DynamoDB Global Tables:概要と目的
DynamoDB Global Tablesは、完全マネージド型のマルチリージョン・マルチアクティブレプリケーションを提供します。各リージョンにはテーブルの完全なコピーが作成され、すべてのコピーで同時に書き込みを実行できます。いずれかのリージョンで行われた書き込みは、約1秒以内に他のすべてのリージョンへ非同期でレプリケーションされます。
Global Tablesは、重要な2つのシナリオを実現します。1つ目は、世界中に分散したユーザーに対する低レイテンシーの読み取りと書き込みです。各ユーザーは最も近いリージョンで読み書きします。2つ目は、マルチリージョンのアクティブ・アクティブ災害復旧です。最後にレプリケーションされた時点以降のデータ損失なしに、稼働中の任意のリージョンでアプリケーションを継続できます。
Global Tablesの作成
Global Tableを作成するには、まずDynamoDB Streamsを有効にしたテーブルを作成します(Global Tablesでは内部的にNEW_AND_OLD_IMAGESが必要です)。次にレプリカリージョンを追加します。AWSは追加した各リージョンにレプリカテーブルを作成し、双方向のデータ同期を開始します。
Global Tables(Version 2019.11.21)が現在の標準であり、Auto Scalingを使用したOn-DemandキャパシティまたはProvisionedキャパシティに対応しています。各リージョンのレプリカは同じテーブル名でなければなりません。Global Tableに対するリージョンの追加や削除はいつでも行えます。
# Create a global table replica in eu-west-1
aws dynamodb create-global-table \
--global-table-name GlobalOrders \
--replication-group RegionName=us-east-1 RegionName=eu-west-1Global Tablesにおける競合解決
Global Tablesでは複数のリージョンで同時に書き込みを実行できるため、2つのリージョンがほぼ同時に同じアイテムを更新すると、書き込みの競合が発生することがあります。DynamoDBは、ストリームレコードに保存されたタイムスタンプに基づくlast-writer-wins方式で競合を解決します。
実際には、ほぼ同時に発生した競合する更新の一方が採用され、もう一方が上書きされます。アプリケーションは、異なるリージョンから同じアイテムに対して同時に書き込まないよう設計してください。競合が頻繁に発生するユースケースでは、特定のユーザーやエンティティへのすべての書き込みを単一のホームリージョンにルーティングすることを検討してください。
Global Tablesとキャパシティに関する考慮事項
Global Tablesでは、あるリージョンでの書き込みが他のすべてのリージョンに自動的にレプリケーションされます。レプリケーションされた各書き込みは、送信先リージョンでWCUを消費します。3つのリージョンがある場合、1回の書き込みで全リージョン合計の約3倍のWCUが必要になります。これを考慮してキャパシティを計画してください。
各リージョンでの読み取りは、そのリージョンのレプリカのRCUを消費します。デフォルトの結果整合性のある読み取りではローカルデータを使用しますが、リージョン間で強い整合性のある読み取りはサポートされていません。多くのグローバルアプリケーションでは、リージョン間で約1秒以内に反映される結果整合性で十分です。
Global Tablesとクロスリージョンリードレプリカ(RDS)の比較
SAA-C03試験で重要な違いは、DynamoDB Global Tablesがマルチアクティブ(すべてのリージョンで読み取りと書き込みを受け付ける)であるのに対し、RDSのクロスリージョンリードレプリカは読み取り専用(レプリカを昇格させて書き込み可能にすることはできますが、その時点でレプリケーションは中断される)である点です。
マルチリージョンでのアクティブ・アクティブ書き込み、グローバルに100ミリ秒未満のアクセス、またはNoSQLデータのマルチリージョンDRでRPOゼロが必要な場合は、DynamoDB Global Tablesを使用します。リレーショナルデータベースのグローバルな読み取りスケーラビリティや、フェイルオーバー時に昇格できるウォームDRスタンバイが必要な場合は、RDSのクロスリージョンレプリカを使用します。
StreamsとLambdaを組み合わせたアーキテクチャパターン
StreamsとLambdaを組み合わせた一般的なアーキテクチャパターンは次のとおりです。
- ファンアウト:Lambdaがストリームを読み取り、SNSに発行します。SNSは複数のSQSキューにファンアウトし、それぞれのコンシューマーが独立して処理できるようにします
- 集計:Lambdaが変更を蓄積し、別のDynamoDBテーブルに集計値(例:1日の注文数)を更新します
- ライトビハインドキャッシュ:ストリームイベントごとにLambdaがElastiCacheを更新し、読み取りをキャッシュから処理できるようにします
- 通知:ストリームがLambdaを起動し、特定の条件が変化したときにSESのメールまたはSNSのプッシュ通知を送信します
DynamoDB Kinesis Data Streams 統合
DynamoDB Streams の代替として、アイテムレベルの変更を Amazon Kinesis Data Stream に送信できます。これは、より長い保持期間(DynamoDB のネイティブな Streams の 24 時間に対して最大 1 年)、より多くのコンシューマー、または Kinesis から読み取るサービスとの統合が必要な場合に便利です。
Kinesis Data Streams 統合はテーブルごとに有効化し、DynamoDB Streams を置き換えるものではありません。両方を同時に有効化することもできます。これは 2021 年に導入された比較的新しい機能で、カスタムのレプリケーションロジックを必要とせずに DynamoDB の変更イベントパイプラインを拡張します。
# Enable Kinesis Data Streams for a DynamoDB table
aws dynamodb enable-kinesis-streaming-destination \
--table-name Orders \
--stream-arn arn:aws:kinesis:us-east-1:123456789:stream/ddb-changesクイックチェック
このレッスンで学んだ AWS Solutions Architect(SAA-C03)の概念を確認しましょう。
レッスンのまとめ
このレッスンでは、DynamoDB Streams はアイテムレベルの変更を 24 時間キャプチャし、イベント駆動処理のために Lambda と統合できること、Global Tables はマルチアクティブ・マルチリージョンのレプリケーションを提供し、最終書き込み優先で競合を解決すること、そして Kinesis Data Streams 統合は保持期間を 24 時間のストリームウィンドウより延長できることを学びました。次は、Route 53 のホストゾーンと DNS レコードタイプについて学びます。
よくある質問
「DynamoDB Streams とグローバルテーブル」レッスンは無料ですか?
はい。「DynamoDB Streams とグローバルテーブル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。
「DynamoDB Streams とグローバルテーブル」で何を学びますか?
Streams でアイテム単位の変更をリアルタイムに処理し、グローバルテーブルでリージョン間にデータを複製して、世界中から低レイテンシーで読み取れるようにします。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cloud & IT Cert Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「DynamoDB Streams とグローバルテーブル」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?
はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- テーブル、アイテム、プライマリキー
- プロビジョンドキャパシティとオンデマンドキャパシティ
- グローバルセカンダリインデックスとローカルセカンダリインデックス
- DynamoDB Streams とグローバルテーブル