Amazon Web Services ブログ

Amazon Data Firehose を使用して、データベースから Apache Iceberg テーブルに変更をレプリケート (プレビュー)

11 月 15 日、PostgreSQL や MySQL などのデータベースで行われた変更をキャプチャし、その更新を Amazon Simple Storage Service (Amazon S3) 上の Apache Iceberg テーブルにレプリケートする、Amazon Data Firehose の新機能がプレビューで使用可能になったことをお知らせします。

Apache Iceberg は、ビッグデータ分析を実行するための高性能なオープンソーステーブル形式です。Apache Iceberg は、SQL テーブルの信頼性とシンプルさを S3 データレイクにもたらし、Apache SparkApache FlinkTrinoApache HiveApache Impala などのオープンソース分析エンジンが同じデータを同時に使用できるようにします。

この新機能は、データベースアプリケーションのトランザクションパフォーマンスに影響を及ぼすことなく、データベース更新をストリーミングするためのシンプルなエンドツーエンドのソリューションを提供します。数分で Data Firehose ストリームをセットアップして、データベースから変更データキャプチャ (CDC) の更新を配信できます。今後は、さまざまなデータベースから Amazon S3 上の Iceberg テーブルにデータを簡単にレプリケートし、最新のデータを大規模な分析や機械学習 (ML) アプリケーションのために使用できるようになりました。

一般的な Amazon Web Services (AWS) エンタープライズのお客様は、トランザクションアプリケーションのために数百のデータベースを使用しています。これらのお客様は、最新のデータに対して大規模な分析と ML を実行するために、テーブル内のレコードが挿入、変更、または削除されたときなど、データベースで行われた変更をキャプチャし、Apache Iceberg などのオープンソーステーブル形式でデータウェアハウスまたは Amazon S3 データレイクに更新を配信したいと考えています。

これを実行するために、多くのお客様は、データベースから定期的に読み取る抽出、変換、ロード (ETL) ジョブを開発しています。ただし、ETL リーダーはデータベーストランザクションのパフォーマンスに影響を及ぼし、バッチジョブによって、データが分析に使用できるようになるまでに数時間の遅延が発生する可能性があります。データベーストランザクションのパフォーマンスに対する影響を軽減するために、お客様は、データベースで行われた変更をストリーミングする機能を求めています。このストリームは、変更データキャプチャ (CDC) ストリームと呼ばれます。

私は、Debezium などのオープンソース分散システムを、一般的なデータベースへのコネクタ、Apache Kafka Connect クラスター、および Kafka Connect Sink とともに使用して、イベントを読み取って宛先に配信している複数のお客様に会いました。このようなシステムの初期設定とテストには、複数のオープンソースコンポーネントのインストールと設定が含まれます。これには、数日または数週間かかる場合があります。セットアップ後、エンジニアはクラスターをモニタリングおよび管理し、オープンソースの更新を検証して適用する必要があり、これにより運用オーバーヘッドが増加します。

この新しいデータストリーミング機能により、Amazon Data Firehose は、データベースから CDC ストリームを取得して、Amazon S3 上の Apache Iceberg テーブルに継続的にレプリケートできるようになります。ソースと宛先を指定することによって、Data Firehose ストリームをセットアップします。Data Firehose は、最初のデータスナップショットをキャプチャして継続的にレプリケートし、選択したデータベーステーブルに加えられたすべての後続の変更をデータストリームとしてキャプチャします。CDC ストリームを取得するために、Data Firehose はデータベースレプリケーションログを使用します。これにより、データベーストランザクションのパフォーマンスへの影響が軽減されます。データベース更新の量が増減すると、Data Firehose はデータを自動的にパーティショニングし、宛先に配信されるまでレコードを保持します。キャパシティをプロビジョニングしたり、クラスターを管理およびファインチューニングしたりする必要はありません。データ自体に加えて、Data Firehose は、最初の Data Firehose ストリーム作成の一環として、データベーステーブルと同じスキーマを使用して Apache Iceberg テーブルを自動的に作成し、ソーススキーマの変更に基づいて、新しい列の追加など、ターゲットスキーマを自動的に進化させることができます。

Data Firehose はフルマネージドサービスであるため、オープンソースコンポーネントに依拠したり、ソフトウェア更新を適用したりする必要はなく、運用上のオーバーヘッドも発生しません。

Amazon Data Firehose を使用して Amazon S3 上の Apache Iceberg テーブルにデータベースの変更を継続的にレプリケーションすることで、CDC ストリームをデータレイクまたはデータウェアハウスに配信するためのシンプルでスケーラブルなエンドツーエンドのマネージドソリューションが提供され、大規模な分析や ML アプリケーションを実行できます。

新しいパイプラインを設定する方法を見てみましょう
新しい CDC パイプラインを作成する方法を示すために、AWS マネジメントコンソールを使用して Data Firehose ストリームをセットアップしました。いつものように、AWS コマンドラインインターフェイス (AWS CLI)AWS SDKAWS CloudFormation、または Terraform を使用することもできます。

このデモでは、ソースとして Amazon Relational Database Service (Amazon RDS) 上の MySQL データベースを選択します。Data Firehose は、Amazon Elastic Compute Cloud (Amazon EC2) 上のセルフマネージドデータベースでも機能します。トラフィックをインターネットに公開することなく、データベースがデプロイされている仮想プライベートクラウド (VPC) と、RDS API 間の接続を確立するために、AWS PrivateLink VPC サービスエンドポイントを作成します。RDS API の VPC サービスエンドポイントを作成する方法については、Amazon RDS ドキュメントの手順に従ってください。

Iceberg テーブルをホストするための S3 バケットもあり、適切な許可で設定されている AWS Identity and Access Management (IAM) ロールもあります。Data Firehose ドキュメントの前提条件のリストをご参照いただけます。

使用を開始するには、コンソールを開いて Amazon Data Firehose セクションに移動します。既に作成されたストリームを確認できます。新しいストリームを作成するには、[Firehose ストリームを作成] を選択します。

Firehose ストリームを作成する

[ソース][宛先] を選択します。この例では、MySQL データベースと Apache Iceberg テーブルです。ストリームの [Firehose ストリーム名] も入力します。

Firehose ストリームを作成する - 画面 1

[データベースエンドポイント] の完全修飾 DNS 名と [データベース VPC エンドポイントサービス名] を入力します。[SSL を有効にする] がオンになっていることを確認し、[シークレット名] で、データベースのユーザー名とパスワードが安全に保存されている AWS Secrets Manager のシークレットの名前を選択します。

Firehose ストリームを作成する - 画面 2

次に、明示的な名前または正規表現を使用してデータベース、テーブル、列を指定し、特定のデータをキャプチャするように Data Firehose を設定します。

ウォーターマークテーブルを作成する必要があります。このコンテキストでのウォーターマークは、Data Firehose がデータベーステーブルの増分スナップショットの進行状況を追跡するために使用するマーカーです。これは、テーブルのどの部分が既にキャプチャされているか、どの部分がまだ処理される必要があるのかを Data Firehose が識別するのに役立ちます。ウォーターマークテーブルは手動で作成できます。また、Data Firehose に自動的に作成させることもできます。その場合、Data Firehose に渡されるデータベース認証情報には、ソースデータベースにテーブルを作成するための許可が必要です。

Firehose ストリームを作成する - 画面 3

次に、使用する S3 バケットの [リージョン] と名前を設定します。Data Firehose は、Iceberg テーブルがまだ存在しない場合、Iceberg テーブルを自動的に作成できます。同様に、データベーススキーマの変更を検出すると、Iceberg テーブルスキーマを更新できます。

Firehose ストリームを作成する - 画面 4

最後のステップとして、ストリームの進行状況と最終的なエラーに関するフィードバックを取得するために、Amazon CloudWatch のエラーログ記録を有効にすることが重要です。ログストレージのコストを削減するために、CloudWatch ロググループの保持期間を短く設定できます。

設定を確認したら、[Firehose ストリームを作成] を選択します。

Firehose ストリームを作成する - 画面 5

ストリームが作成されると、データのレプリケーションが開始されます。ストリームのステータスをモニタリングし、最終的なエラーを確認できます。

Firehose ストリームを作成する - 画面 6

これで、ストリームをテストする準備が整いました。

データベースへの接続を開き、テーブルに新しい行を挿入します。

Firehose - MySQL

その後、宛先として設定された S3 バケットに移動し、テーブルからのデータを保存するためのファイルが作成されていることを確認します。

S3 バケット上の parquet ファイルを表示する

そのファイルをダウンロードし、parq コマンドを使用してその内容を検査します (このコマンドは pip install parquet-cli を使用してインストールできます)

Parquet ファイルの内容

当然ながら、Parquet ファイルのダウンロードと検査は、デモのためにのみ行います。実際には、AWS GlueAmazon Athena を使用して、データカタログを管理し、データに対して SQL クエリを実行します。

知っておくべきこと
他にも知っておくべきことがいくつかあります。

この新しい機能は、Amazon EC2 上のセルフマネージド PostgreSQL および MySQL データベースと、Amazon RDS 上の次のデータベースをサポートします:

チームは、プレビュー期間中および一般提供の開始後も、データベースのサポートを継続的にさらに追加していく予定です。SQL Server、Oracle、および MongoDB データベースのサポートに既に取り組んでいる旨をチームから聞いています。

Data Firehose は、AWS PrivateLink を使用して、Amazon Virtual Private Cloud (Amazon VPC) 内のデータベースに接続します。

Amazon Data Firehose 配信ストリームを設定する場合、特定のテーブルと列を指定するか、ワイルドカードを使用してテーブルと列のクラスを指定できます。ワイルドカードを使用すると、Data Firehose ストリームの作成後に新しいテーブルと列がデータベースに追加され、それらがワイルドカードと一致する場合、Data Firehose は宛先にそれらのテーブルと列を自動的に作成します。

料金と利用可能なリージョン
新しいデータストリーミング機能は、中国リージョン、AWS GovCloud (米国) リージョン、アジアパシフィック (マレーシア) リージョンを除くすべての AWS リージョンで現在ご利用いただけます。この新しい機能を評価し、フィードバックをぜひお寄せください。プレビューの開始時には、使用料はかかりません。将来的に、読み取りおよび配信されたバイト数など、実際の使用量に基づいて料金が決定されます。一定量の使用の確約や先行投資はありません。必ず料金ページで詳細をお読みください。

Amazon S3 上の Apache Iceberg テーブルへの最初の継続的なデータベースレプリケーションを設定 し、http://thinkwithwp.com/firehose にアクセスしましょう。

— seb

原文はこちらです。