Redshift Zero-ETL でAuroraからテーブルやデータベースをフィルタリングしてRedshiftにレプリケーション

# Redshift Zero-ETLのデータフィルタリング機能

[Zero-ETLのデータフィルタリング機能がリリース](https://aws.amazon.com/jp/about-aws/whats-new/2024/03/amazon-aurora-zero-etl-integration-redshift-data-filtering-cloudformation/)されたので試してみました。
基本的には思ったように動きました。

## テストケース

先にどんなテストするかを書いちゃいます(フィルタ機能のテストではない観点もあります)。

1. 新規でZero-ETL機能を有効化した場合、フィルタ条件に含まれるテーブルの過去分のレコードが転送されるか確認。
2. フィルタ条件に含まれるテーブル名のテーブルへの追加レコードが転送される確認。
3. フィルタ条件に含まれるテーブル名　のテーブルを新規で作成した場合にそのテーブルが転送される確認。
4. フィルタ条件に含まれるデータベース名とテーブル名のテーブルが転送される確認。
5. フィルタ条件に含まれないテーブル名のテーブルが転送されない確認。
6. フィルタ条件に含まれないデータベース名のテーブルが転送されない確認。

## RDSでZero-ETL設定

Zero-ETL設定の詳細は[こちら](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.setting-up.html)です。AuroraとRedshiftの双方で設定が必要です。今回はZero-ETL自体の設定はほとんど省きます。

Zero-ETLのフィルタリング設定の詳細は[こちら](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.filtering.html)です。本日のメインです。

### Aurora側でZero-ETL統合を作成

フィルタリング機能にフォーカスして確認

正規表現で以下のように記載
「含める」以外に「除外」も設定可能

```
my_db.*,my_db2.books_table
```

今回は以下のように、「データベースmy_dbの全テーブルを対象とする」と「テーブルmy_db2.books_tableのみ」のフィルタリングを設定します。

![スクリーンショット 2024-03-24 9.34.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/0d6828ab-b138-15ee-c627-8ab25540422e.png)

設定するとこんな感じで表示されます。
※このフィルター機能がリリース前からZero-ETLを使っている場合、「フィルター式=`*.*`」「フィルタータイプ=Include」となってます。

![スクリーンショット 2024-03-24 9.33.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a9204910-b128-7dd5-1e0b-dd02d784f6a6.png)

### Redshift側でZero−ETLで転送する先のRedshiftのデータベースを作成

CLIなら次のコマンドで作成

```sql
CREATE DATABASE demo_zeroetl_2 FROM INTEGRATION '7c8bdf22-bafa-4b4c-914a-aca5abc28707';
```

GUIなら[統合からデータベースを作成]をクリックして作成

![スクリーンショット 2024-03-24 11.32.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/6ea4ac60-2ece-2b90-86e4-bf63ae59150d.png)

## RDSの事前状態

* my_db
    * books_table (レコード有り)
* my_db2
    * テーブルなし

my_dbとmy_db2の2つのデータベースがあることを確認
![スクリーンショット 2024-03-24 9.29.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/7fd8dec0-446a-48b7-b363-2b7022ed765b.png)

my_dbには既存でbooks_tableがありレコードが入っていることを確認
![スクリーンショット 2024-03-24 9.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/31f16514-fd9d-5004-b115-406e47067c22.png)

my_db2にはテーブルがないことを確認
![スクリーンショット 2024-03-24 9.30.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/8962ccb1-de19-771f-5b21-c33049b8c9c7.png)

# テスト

## ①新規でZero-ETL機能を有効化した場合、フィルタ条件に含まれるテーブル名の過去分のレコードが転送されるか確認

データベースmy_dbの既存テーブルbooks_tableがZero-ETLされること。
新規でZero-ETLを有効化したら、過去分のデータが転送されたことを確認。
![スクリーンショット 2024-03-24 11.34.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/39228beb-8c1c-bbbc-b3a0-0093a3ba3a0e.png)


## ②フィルタ条件に含まれるテーブル名のテーブルへの追加レコードが転送される確認

データベースmy_dbの既存テーブルbooks_tableに追加したレコードが転送されること

Auroraでレコードを1件追加

![スクリーンショット 2024-03-24 11.39.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/b663e365-c2ab-929b-c54f-14edcd2d6c9b.png)

Auroraで追加した1件のレコードが転送され、Redshiftに反映されたことを確認
![スクリーンショット 2024-03-24 11.39.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/b6b81e69-2f06-0797-445b-2cf9840243d1.png)


## ③フィルタ条件に含まれるテーブル名　のテーブルを新規で作成した場合にそのテーブルが転送される確認

データベースmy_dbの新規テーブルは転送されることを確認

Auroraでテーブルbooks_table2を追加。レコードを1件追加。

![スクリーンショット 2024-03-24 11.42.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/e0ffdcf8-1b0d-d2c8-490c-6b56d0c28153.png)

Auroraで追加したテーブルとレコードが転送され、Redshiftに反映されたことを確認

![スクリーンショット 2024-03-24 11.42.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f6315a9c-aace-0d8f-63a4-3cc5eda1edeb.png)


## ④フィルタ条件に含まれるデータベース名とテーブル名のテーブルが転送される確認

データベースmy_db2の新規テーブルbooks_tableが転送されることを確認

Auroraでデータベースmy_db2にテーブルbooks_tableを作成。レコードを1件追加
![スクリーンショット 2024-03-24 11.45.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/7325c753-ff99-eb57-b0b6-a6a6e7e9c1f0.png)

Auroraで作成したテーブルとレコードが転送され、Redshiftに反映されたことを確認

![スクリーンショット 2024-03-24 11.46.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/2a62e78e-5f27-972e-f4d2-078cc4a807d5.png)

## ⑤フィルタ条件に含まれないテーブル名のテーブルが転送されない確認

データベースmy_db2の新規テーブルtestは転送されないことを確認

![スクリーンショット 2024-03-24 11.48.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/7aec9957-1d2c-0719-488b-aab9b4b55242.png)

フィルタ条件に含まれないデータベースmy_db2のテーブルtestは転送されず、Redshiftに反映されないことを確認

![スクリーンショット 2024-03-24 11.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/bb08cb34-561b-2784-79db-53067d52f14f.png)


## ⑥フィルタ条件に含まれないデータベース名のテーブルが転送されない確認

データベースmy_db3の新規テーブルtestは転送されないことを確認

![スクリーンショット 2024-03-24 11.50.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f502a0a0-2371-81b8-1087-c747b86a1632.png)

フィルタ条件に含まれないデータベースmy_db3のテーブルtestは転送されず、Redshiftに反映されないことを確認

![スクリーンショット 2024-03-24 11.50.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/bb08cb34-561b-2784-79db-53067d52f14f.png)

# 注意点

* ソースとなるAurora MySQLのバージョンは3.05以降 ([ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/zero-etl.html))

### RDBのエンジンごとのZero-ETL対応状況 (2024/03/22現在)

* Aurora MySQL
    * GA/Version/Filter/Tokyo Region = Yes/3.05(MySQL 8.0.32互換)/Yes/Yes
* Aurora PostgreSQL
    * GA/Version/Filter/Tokyo Region = No(Preview)/15.4/No/No
* RDS MySQL
    * GA/Version/Filter/Tokyo Region = No(Preview)/8.0.28/No/Yes
* RDS PostgreSQL
    * No