🚰

Redshift Serverless と Aurora PostgreSQL のゼロ ETL 統合を試してみた

に公開

はじめに

2024 年 10 月 15 日、以下 2 つの発表がありました。

いずれも、これまで開発や運用コストがかかりがちだった ETL パイプラインを「ゼロ ETL」で実現し、データソースと Redshift をリアルタイムあるいは指定間隔でシームレスに接続できるようになる画期的な機能です。
本記事では、これらのゼロ ETL 統合を利用して、Redshift Serverless と Aurora PostgreSQL、および DynamoDB を連携する PoC を行った手順をまとめます。


背景

データ分析基盤の構築において、会話ログなどの各種データを活用する必要がありました。ただし、少人数で開発を進めるプロジェクトだったため、従来の ETL プロセスをゼロから構築・保守するのは負荷が大きいと考えました。そこで、Redshift、Aurora、DynamoDB のゼロ ETL 統合によって、リアルタイムかつ運用負荷の少ないデータ連携が可能になればと考え、PoC を実施することにしました。


ゼロ ETL 統合の主要な制約事項

Aurora PostgreSQL 側の制約

DynamoDB 側の制約

Redshift 側の制約


Redshift はプロビジョンドか Serverless か?

上記の通り、 ゼロ ETL を利用するにあたり、Redshift は Serverless または RA3 ノードタイプを選ぶ必要があります。

  • プロビジョンド (RA3)
    • プロビジョンドを利用する場合、2024 年 10 月 1 日にリリースされた RA3.large (1 時間 0.639 ドル) が最小構成。
    • コストを抑えるうえでは最小構成でもそれなりに費用がかかる点に注意。

Amazon Redshift RA3 large の新機能発表

Amazon Redshift の料金ページ

  • Redshift Serverless
    • 1 RPU = 0.494 ドル/時。
    • 最小 8 RPU(1 時間あたり約 3.952 ドル)から使用可能。
    • 使った分だけの従量課金が基本だが、リアルタイムのゼロ ETL 統合中は常時起動扱いになるため注意が必要。
    • 10 月 14 日にリリースされた refresh interval 機能を使えば、定期的に同期する形にしてコストを抑えられる。

Amazon Redshift の料金ページ

Amazon Redshift Refresh Interval Zero ETL Integration の新機能発表

今回は、スケーリングや運用の簡易さ、利用時間外のコスト軽減が見込める Redshift Serverless を選択しました。

Aurora PostgreSQL との連携手順

ゼロ ETL 連携の構築手順は基本的に公式ドキュメントに準拠します。
Getting started with Aurora zero-ETL integrations with Amazon Redshift - Amazon Aurora

1. スナップショットからの DB 構築

PoC 用として、開発環境もしくはテスト環境などのスナップショットを用いて Aurora DB を復元し、PoC 用クラスターを立ち上げます。
本番環境では新規構築や既存クラスターの活用など、要件に応じて使い分けましょう。

2. Aurora PostgreSQL のバージョンアップ

Aurora PostgreSQL は バージョン 16.4 以上が必要です。
RDS/Aurora のメジャーバージョンアップグレードについて

3. カスタム DB クラスターパラメータの設定

ゼロ ETL 統合では以下のパラメータが必要です(Aurora PostgreSQL 16 ファミリー)。

  • rds.logical_replication = 1
  • aurora.enhanced_logical_replication = 1
  • aurora.logical_replication_backup = 0
  • aurora.logical_replication_globaldb = 0

これらは静的パラメータであり、変更後に DB インスタンスの再起動が必要です。本番環境での適用時には停止時間などに注意します。

  • 再起動前

  • 再起動後

4. Redshift Serverless の構築

Serverless のワークグループおよび名前空間を作成します。
Creating a workgroup with a namespace - Amazon Redshift

5. 大文字と小文字の区別を有効にする

次のコマンドを AWS CLI で実行し、Redshift Serverless の enable_case_sensitive_identifier を有効にします。

aws redshift-serverless update-workgroup \
 --workgroup-name <your-workgroup-name> \
 --config-parameters parameterKey=enable_case_sensitive_identifier,parameterValue=true

6. Redshift の認可設定

Redshift ワークグループにリソースベースポリシーを設定し、ソースとなる Aurora クラスターをプリンシパルとして含める必要があります。
Configure authorization for your Amazon Redshift data warehouse - Amazon Redshift

7. Aurora ゼロ ETL 統合の作成

  1. RDS 側で対象データベース、連携対象テーブルのフィルタなどを指定し、Amazon Redshift のターゲットを紐付けます。
  2. セットアップ後、管理コンソールからテーブルのレプリケーション状況(成功 / 失敗数など)が確認できます。
    Creating Aurora zero-ETL integrations with Amazon Redshift - Amazon Aurora

8. Redshift 上で宛先データベースを作成

Aurora からレプリケートされたスキーマやテーブルを Redshift の 宛先データベースとして登録します。
Creating destination databases in Amazon Redshift

9. 移行データの確認

Redshift クエリエディタ v2などで、Aurora のテーブルが想定どおりレプリケートされているかを確認します。

10. refresh interval の設定(任意)

リアルタイム同期が不要で費用を抑えたい場合は refresh interval を設定して更新間隔を制御します。

ALTER DATABASE <sample_integration_db> INTEGRATION SET REFRESH_INTERVAL 600;

600 秒(10 分)おきに同期する設定例。値に応じて費用と遅延のトレードオフを調整できます。


DynamoDB との連携手順

DynamoDB と Redshift のゼロ ETL 統合も同じような流れで設定できます。
Create a zero-ETL integration for DynamoDB - Amazon Redshift

1. DynamoDB テーブルのポイントインタイムリカバリ (PITR) を有効化

DynamoDB テーブルごとに ポイントインタイムリカバリ (PITR) を有効にします。
Enable point-in-time recovery in DynamoDB

2. Redshift の認可設定

Aurora のケースと同様、Redshift ワークグループにリソースベースポリシーを設定し、DynamoDB テーブルをプリンシパルとして認可します。
Configure authorization for your Amazon Redshift data warehouse

3. DynamoDB ゼロ ETL 統合の作成

コンソールのウィザードに従って DynamoDB テーブル -> Redshift の連携を設定します。
必要なポリシーが未設定であっても、「Fix it for me」オプションで自動的に設定できます。

4. Redshift 上で宛先データベースを作成

Aurora のケースと同様、対象のテーブルが複数あっても一括でレプリケーション状況をモニタできます。

5. データ移行確認

クエリエディタ v2 などから、DynamoDB のデータが正しく同期されていることを確認します。

6. refresh interval の設定(任意)

Aurora と同様に、refresh interval を設定して連携頻度を制御できます。

ALTER DATABASE <sample_integration_db> INTEGRATION SET REFRESH_INTERVAL 600;

まとめ

今回は、Aurora PostgreSQL・DynamoDBRedshift を「ゼロ ETL」で連携する PoC を行いました。
設定自体は比較的シンプルであり、従来の ETL パイプラインを自作・運用するよりもスピーディーに導入できるのが大きなメリットです。ただし、本番運用においてはPostgreSQLのバージョンアップ等の対応が必要になるため、影響範囲の確認は必要です。

新サービスを活用することで工数を大幅に削減できるケースが増えており、日々の技術キャッチアップの大切さを改めて実感しました。今後も新しいサービスや機能を活用し、開発・運用コストの最適化を図っていきたいところです。

Arsaga Developers Blog

Discussion