View a markdown version of this page

変更データキャプチャストリーム - Amazon Aurora DSQL

変更データキャプチャストリーム

料金情報については、Aurora DSQL の料金表ページを参照してください。

Amazon Aurora DSQL 変更データキャプチャ (CDC) は、コミットされたデータベースの変更をほぼリアルタイムで Amazon Kinesis Data Streams に直接ストリーミングします。Aurora DSQL は、変更された各行の最終的なコミットされた状態を、設定した Kinesis データストリームに構造化された JSON レコードとして送信します。

CDC は、次のような場合に役立ちます。

  • ダウンストリームシステムを同期させる – バッチジョブを使用せずに検索インデックス、キャッシュ、データウェアハウス、または分析システムに変更をレプリケートします。

  • イベント駆動型アーキテクチャを構築する – データベースの変更に応じてワークフロー、通知、またはマイクロサービスのアクションをトリガーします。

  • 監査証跡を維持する – コンプライアンス、デバッグ、または履歴分析のために、すべてのトランザクションのコミット後の正味の効果をキャプチャします。

  • プロデューサーをコンシューマーから切り離す – データベースはトランザクションに専念し、ダウンストリームシステムはそれぞれのペースで変更を処理します。

仕組み

Aurora DSQL はコミットされたトランザクションを読み取り、行レベルの正味の変更を構造化された JSON レコードとしてフォーマットし、設定した Kinesis データストリームに配信します。CDC は、クラスター内のすべてのユーザーテーブルにわたって、すべての INSERTUPDATEDELETE について、コミットされた効果を自動的にキャプチャします。各 CDC レコードの source.schema フィールドと source.table フィールドを使用して、ダウンストリームのアプリケーションにフィルタリングロジックを適用し、アプリケーションに必要なテーブルや変更に焦点を当てます。

Aurora DSQL は、CDC レコードを発行する前に各トランザクションの書き込みセットを圧縮し、最終的な状態を反映した、正味の変更を含む行ごとに単一のレコードを出力します。詳細については、「書き込みセット圧縮」を参照してください。

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 は、コミット時に正味の変更が生じた各行について、1 つの CDC レコードを生成します。Aurora DSQL が同じ行に対する複数のオペレーションを圧縮する方法の詳細については、「書き込みセット圧縮」を参照してください。

Aurora DSQL は、生成するすべてのレコードに対して少なくとも 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 は、コミットされたトランザクションごとに、各行の最終状態のみを配信します (書き込みセット圧縮 の後)。監査ワークフローですべての SQL ステートメントのレコードが必要な場合は、各ステートメントを個別のトランザクションで実行します。

マルチリージョン CDC ストリーム設定

CDC ストリームはリージョンのリソースです。各ストリームは単一の AWS リージョンに属し、同じリージョン内の Kinesis データストリームに変更を配信します。マルチリージョンクラスターでは、任意の 1 つのリージョンの CDC ストリームが、クラスター内のすべてのリージョンからのコミットされた書き込みをキャプチャします。つまり、書き込みの発生場所に関係なく、すべての変更をキャプチャするのに必要なストリームは 1 つだけです。CDC レコードを複数のリージョンに配信するには、リージョンごとに個別のストリームを作成します。各ストリームは、クラスター全体でコミットされたすべての変更を個別にキャプチャします。

Aurora DSQL クラスター、Kinesis データストリーム、IAM サービスロール、呼び出し元プリンシパルなどのすべてのリソースは、同じ AWS アカウントとリージョンに存在する必要があります。

CDC レコードのダウンストリーム処理

CDC レコードが Kinesis データストリームに到着したら、そのレコードを直接処理したり、AWS 統合サービスを使用して他の送信先にルーティングしたりできます。次の表は、一般的な処理パターンをまとめたものです。

CDC レコードの一般的な処理パターン
パターン 仕組み
直接消費 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.schemasource.tableop などのフィールドが含まれています。レコードスキーマ全体については、「CDC レコードについて」を参照してください。