変更データキャプチャストリーム (プレビュー)
重要
この機能は AWS プレビューとして提供されており、変更される可能性があります。詳細については、「AWS のサービス条件
一般提供する前に、ストリームペイロードに新しいオペレーションタイプ ("op": "u" 更新用) を追加します。アプリケーションがこれらの変更を修正せずに処理できるようにするには、after ペイロードを適用して、認識されない op 値をすべてアップサートとして扱います。詳細については、「CDC レコードについて」を参照してください。
Amazon Aurora DSQL 変更データキャプチャ (CDC) は、コミットされたデータベースの変更をほぼリアルタイムで Amazon Kinesis Data Streams に直接ストリーミングします。Aurora DSQL は、コミットされた各行レベルの変更を構造化された JSON レコードとして、設定した Kinesis データストリームに送信します。
CDC は、次のような場合に役立ちます。
-
ダウンストリームシステムを同期させる – バッチジョブを使用せずに検索インデックス、キャッシュ、データウェアハウス、または分析システムに変更をレプリケートします。
-
イベント駆動型アーキテクチャを構築する – データベースの変更に応じてワークフロー、通知、またはマイクロサービスのアクションをトリガーします。
-
監査証跡を維持する – コンプライアンス、デバッグ、または履歴分析のためにコミットされたすべての変更をキャプチャします。
-
プロデューサーをコンシューマーから切り離す – データベースはトランザクションに専念し、ダウンストリームシステムはそれぞれのペースで変更を処理します。
仕組み
Aurora DSQL はコミットされたトランザクションを読み取り、各行の変更を構造化された JSON レコードとしてフォーマットし、設定した Kinesis データストリームに配信します。CDC は、クラスター内のすべてのユーザーテーブルにわたって、すべての INSERT、UPDATE、DELETE を自動的にキャプチャします。各 CDC レコードの source.schema フィールドと source.table フィールドを使用して、ダウンストリームのアプリケーションにフィルタリングロジックを適用し、アプリケーションに必要なテーブルや変更に焦点を当てます。
CDC ストリームはフルマネージド型です。Aurora DSQL は、変更イベントをキャプチャするために必要なすべてのインフラストラクチャを管理し、ストリームの状態をモニタリングし、GetStream API オペレーションと CloudWatch メトリクスを通じてステータスを報告します。
CDC ストリームは、独自のターゲットを持ち込むモデルを使用します。お客様はご自身のアカウントで Kinesis データストリームを作成および管理し、Aurora DSQL はお客様が設定した IAM ロールを引き受けて、ユーザーに代わって CDC レコードを書き込みます。ターゲットの容量、暗号化、保持設定はお客様の責任となります。サポートされている最新のターゲットについては、Amazon Aurora DSQL API リファレンスの「CreateStream」の TargetDefinition パラメータを参照してください。CDC ストリーム API オペレーションの完全なリストについては、「Amazon Aurora DSQL API リファレンス」を参照してください。
このページのトピック
関連トピック
順序付けと配信のセマンティクス
配信の保証
Aurora DSQL CDC は、コミットされたすべての変更が少なくとも 1 回ターゲットに到達することを保証します。Aurora DSQL はレコードを複数回配信できます。重複を処理できるようにアプリケーションを設計してください。source.ts_ns とプライマリキーの値を比較することで、重複を特定できます。重複は、元の配信と同じ値を持っています。
順序付け
CDC ストリームは UNORDERED モードを使用します。実際には、Aurora DSQL は変更を順番に読み取り、発行するため、レコードはおおよそコミット順序で到着します。ただし、Aurora DSQL は厳密な順序を保証するものではありません。具体的には次のとおりです。
-
Aurora DSQL は、さまざまなトランザクションからのレコードを任意の順序で配信できます。
-
異なるトランザクションからの同じプライマリキーのレコードは、コミット順とは異なる順で到着する可能性があります。
-
単一のトランザクションからのレコードは、他のトランザクションからのレコードとインターリーブする可能性があります。ワークフローで必要な場合は、
source.txIdフィールドを使用して、トランザクションごとにレコードをグループ化します。
各 CDC レコードには、トランザクションのコミットタイムスタンプ (ナノ秒単位) を含む source.ts_ns フィールドが含まれます。このフィールドを使用して、受信側でコミット順序を確立します。
コンシューマー戦略
レコードはコミット順とは異なる順序で到着したり、複数回出現したりする可能性があるため、アプリケーションは両方の状況に対応する必要があります。
重要
CDC に参加するすべてのテーブルでプライマリキーを定義します。プライマリキーがない場合、アプリケーションはレコードの重複排除や、削除と影響を受ける行の関連付けを行うことができません。
最後の書き込みを優先 (マテリアライズドビュー、キャッシュ)
プライマリキーごとに、最も大きい source.ts_ns 値を追跡します。source.ts_ns が追跡された値以下のレコードはすべて破棄します。これにより、重複レコードと順序通りでないレコードの両方がフィルタリングされ、各キーの最新の状態が維持されます。削除 (op: "d") を処理するときは、エントリを削除するのではなく、source.ts_ns 値を保持するプライマリキーのトゥームストーンを保存します。トゥームストーンは、削除後に到着した以前の source.ts_ns を使用した挿入または更新によって、行が誤って復元されないようにします。
すべての変更処理 (監査ログ記録、イベントソーシング)
source.ts_ns とプライマリキー値を組み合わせて比較して、重複を削除します。受信レコードをバッファし、処理前に source.ts_ns でソートしてコミット順序を再構築します。
マルチリージョン CDC ストリーム設定
CDC ストリームはリージョンのリソースです。各ストリームは単一の AWS リージョンに属し、同じリージョン内の Kinesis データストリームに変更を配信します。マルチリージョンクラスターでは、任意の 1 つのリージョンの CDC ストリームが、クラスター内のすべてのリージョンからのコミットされた書き込みをキャプチャします。つまり、書き込みの発生場所に関係なく、すべての変更をキャプチャするのに必要なストリームは 1 つだけです。CDC レコードを複数のリージョンに配信するには、リージョンごとに個別のストリームを作成します。各ストリームは、クラスター全体でコミットされたすべての変更を個別にキャプチャします。
Aurora DSQL クラスター、Kinesis データストリーム、IAM サービスロール、呼び出し元プリンシパルなどのすべてのリソースは、同じ AWS アカウントとリージョンに存在する必要があります。
CDC レコードのダウンストリーム処理
CDC レコードが Kinesis データストリームに到着したら、そのレコードを直接処理したり、AWS 統合サービスを使用して他の送信先にルーティングしたりできます。次の表は、一般的な処理パターンをまとめたものです。
| パターン | 仕組み |
|---|---|
| 直接消費 | Read records from Kinesis by using the Amazon Kinesis Client Library (KCL), the AWS SDK, or a Kinesis Data Streams consumer. See KCL コンシューマーの開発 in the Amazon Kinesis Data Streams デベロッパーガイド. |
| AWS Lambda | Configure a Lambda function as an event source for your Kinesis data stream to process each batch of CDC records as they arrive. See Amazon Kinesis での AWS Lambda の使用 in the AWS Lambda デベロッパーガイド. |
| Amazon Data Firehose | Deliver CDC records from Kinesis to Amazon S3, Amazon Redshift, Amazon OpenSearch Service, or other destinations for analytics and archival. See 配信ストリームへのデータの送信 in the Amazon Data Firehose デベロッパーガイド. |
| セルフマネージドコンシューマー | Run Apache Kafka Connect with the Kinesis source connector, Apache Flink, or other stream processing frameworks to transform and route records. For Apache Flink on AWS, see アプリケーション入力の設定 in the Amazon Managed Service for Apache Flink デベロッパーガイド. |
各 CDC レコードには、処理ロジックでレコードをルーティングおよびフィルタリングするために使用できる source.schema、source.table、op などのフィールドが含まれています。レコードスキーマ全体については、「CDC レコードについて」を参照してください。