4.2K Views
January 06, 24
スライド概要
JAWS-UG 横浜 #66 AWS re:Invent 2023 Recap Database 2024/1/6
Qiita や Zenn でいろいろ書いてます。 https://qiita.com/hmatsu47 https://zenn.dev/hmatsu47 MySQL 8.0 の薄い本 : https://github.com/hmatsu47/mysql80_no_usui_hon Aurora MySQL v1 → v3 移行計画 : https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book https://speakerdeck.com/hmatsu47
RDS Data API のその後と Aurora zero-ETL 統合のデータ転送処理の話 JAWS-UG 横浜 #66 AWS re:Invent 2023 Recap Database 2024/1/6 まつひさ(hmatsu47)
本日は ● この状態↓が気になったので LT 枠へ ○ ずっと「1 / 5 人」だった 2
自己紹介 松久裕保(@hmatsu47) ● https://qiita.com/hmatsu47 ● 名古屋で Web インフラのお守り係をしています ● 普段は JAWS-UG 名古屋・浜松で DB ネタを中心に 話しています(主に RDS / Aurora・たまに DynamoDB) ● 最近は HeatWavejp と PostgreSQL アンカンファレンスによく参加 しています ○ MySQLer ですが MySQL 関連のコミュニティイベントが少なくなったので… 3
本日のネタは(JAWS-UG 名古屋での 2023/12/18 発表資料より) ● re:Invent 2023 期間の RDS / Aurora 関連アップデート ○ ① RDS for Db2(GA) ○ ② Aurora Limitless Database(申請制プレビュー) これのその後(1.) ○ ③ Data API(Aurora Serverless v1)と AppSync の連携強化(GA?) ○ ④ RDS / Aurora で Redshift との zero-ETL 統合(プレビュー) ■ Aurora PostgreSQL(15.4) ■ RDS for MySQL(8.0.28 〜) これのデータ転送処理(2.) (ロジカルレプリケーション) 4
本日のネタは(JAWS-UG 名古屋での 2023/12/18 発表資料より) ● re:Invent 2023 期間の RDS / Aurora 関連アップデート ○ ① RDS for Db2(GA) ○ ② Aurora Limitless Database(申請制プレビュー) ○ ③ Data API(Aurora Serverless v1)と AppSync の連携強化(GA?) ○ ④ RDS / Aurora で Redshift との zero-ETL 統合(プレビュー) ■ Aurora PostgreSQL(15.4) ■ RDS for MySQL(8.0.28 〜) 公式でも「Z」と「z」の 表記ゆれがあって困る… 5
1. RDS Data API と AppSync の連携強化 ● https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-appsync-aurora-clusters -rds-data-api/ ○ RDS Data API : Aurora Serverless v1 に HTTPS アクセス ○ AppSync : サーバーレス GraphQL & Pub / Sub API ○ Amplify CLI(GraphQL Transformer)なしで GraphQL スキーマ生成 ■ https://qiita.com/inada_riku/items/5f058e34bf8c0737f588 ○ JavaScript リゾルバーで SQL を作成することが容易に ■ https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-rds-js.html 6
RDS Data API と AppSync の連携強化 ● https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-appsync-aurora-clusters -rds-data-api/ 発表時点(re:Invent 期間)では ○ RDS Data API : Aurora Serverless v1 に HTTPS アクセス ○ AppSync : サーバーレス GraphQL & Pub / Sub API ○ Amplify CLI(GraphQL Transformer)なしで GraphQL スキーマ作成 ■ https://qiita.com/inada_riku/items/5f058e34bf8c0737f588 ○ JavaScript リゾルバーで SQL を作成することが容易に ■ https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-rds-js.html 7
ところで Aurora Serverless v1 の未来は? ● Aurora MySQL 3(MySQL 8.0 互換)は非対応 ○ Aurora MySQL 2(MySQL 5.7 互換)は来秋 EoL ● Aurora PostgreSQL は 11・13 に対応 ○ PostgreSQL 13 は 3 年前のバージョン ○ しかし Aurora Serverless v1 で対応したのはつい最近(2023/5) ■ https://aws.amazon.com/jp/about-aws/whats-new/2023/05/amazon-aurora-serverless-v1 -postgresql-13/ ■ Aurora Serverless v1 は PostgreSQL only で存続するつもり? 8
そして JAWS-UG 名古屋(2023/12/18)の 3 日後に ● Aurora PostgreSQL(Serverless v2・プロビジョンド)が RDS Data API に対応(2023/12/21 発表) ○ https://aws.amazon.com/jp/about-aws/whats-new/2023/12/amazon-aurora-postgre sql-rds-data-api/ ○ 同時にクエリエディタと Knowledge Base for Amazon Bedrock (ベクターストアとして)にも対応 ■ https://dev.classmethod.jp/articles/aurora-serverless-v2-query-editor-connection/ ■ https://qiita.com/hayao_k/items/45e59c1c2a183c27b20d 9
2. RDS / Aurora で Redshift との zero-ETL 統合 ● 複雑な ETL の設定なしにニアリアルタイムデータ連携 ● Aurora PostgreSQL と RDS for MySQL が新たに追加 ○ Aurora PostgreSQL 15.4(オハイオリージョンでのプレビュー版を使用) ○ RDS for MySQL 8.0.28 以降(各リージョンで DB は GA 版、Redshift は プレビュー版(preview_2023 トラック)を使用 ○ Aurora MySQL(3.05.0 〜)は 2023/11 に GA ■ プレビュー時とは対応バージョンが異なる点に注意 10
Aurora MySQL の zero-ETL 統合では ● enhanced binary log 設定が必須 ○ https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/zero-etl.settin g-up.html ■ Aurora zero-ETL integrations with Amazon Redshift require specific values for the DB cluster parameters that control replication. Specifically, Aurora MySQL requires enhanced binlog (aurora_enhanced_binlog), and Aurora PostgreSQL requires enhanced logical replication (aurora.enhanced_logical_replication). ● ストレージ層で Redshift にデータを転送するために enhanced binary log を使用 11
Aurora MySQL enhanced binary log とは ● Aurora での binlog 処理の遅さを改善する機能 ○ https://aws.amazon.com/jp/blogs/database/introducing-amazon-aurora-mysql-enh anced-binary-log-binlog/ ■ 2023/5/22 に発表 ○ Aurora MySQL ではストレージ構造の制約で binlog 処理が遅い ■ コンピュート層とストレージ層の分離・ストレージ層の 3AZ 冗長化が影響 ■ 特にクラッシュリカバリ時の binlog 復旧が劇遅になることがあった ○ 別のストレージ領域にデータと並行して binlog を記録 12
Aurora MySQL enhanced binary log とは ←従来の Aurora binlog ● データをストレージに記録 後、binlog をまとめてスト レージに記録→ Commit ← enhanced binary log ● ● データと並行して binlog をス トレージの別領域に記録 → Commit(or Rollback) binlog のクラッシュリカバリ 高速化 出典 : https://aws.amazon.com/jp/blogs/database/introducing-amazon-aurora-mysql-enhanced-binary-log-binlog/ 13
Aurora MySQL enhanced binary log 制限事項 ● https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQ L.Replication.MySQL.html#AuroraMySQL.Enhanced.binlog ○ データバックアップ(スナップショット)に binlog が含まれない ■ 復元したクラスタに binlog が含まれない ○ クローンしたクラスタに binlog が含まれない ○ Global Database でセカンダリ DB クラスタに binlog が転送さ れない …など 14
Aurora PostgreSQL の zero-ETL 統合では ● enhanced logical replication 設定が必須 ○ 前掲リンク ■ Enabling enhanced logical replication (aurora.enhanced_logical_replication) automatically sets the REPLICA IDENTITY parameter to FULL, which means that all column values are written to the write ahead log (WAL). This will increase the IOPS for your source DB cluster. ○ Logical Replication : Pub / Sub 形式の論理レプリケーション ○ WAL からの変換&転送処理をストレージ層にオフロード ■ Publisher(送信側)のストレージ層で WAL 変換→ Subscriber(受信側)に転送 ■ 初期データ(テーブルのスナップショット)もストレージ層で転送 15
PostgreSQL のロジカルレプリケーション ● 初期データはテーブルの スナップショットを転送 ● 更新系トランザクション で WAL を書き出す ● WAL を Publisher で変換 → Subscriber へ送信 出典 : https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/logical-replication-tutorial/ (一部改変) 16
PostgreSQL のロジカルレプリケーション ● 初期データはテーブルの スナップショットを転送 ● 更新系トランザクション で WAL を書き出す ● WAL を Publisher で変換 → Subscriber へ送信 ● ● enhanced logical replication ではこの部分をストレージ層へ オフロード zero-ETL 統合では Redshift が Subscriber に 出典 : https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/logical-replication-tutorial/ (一部改変) 17
Aurora PostgreSQL enhanced logical replication ● zero-ETL 統合ではストレージ層で Redshift にデータを 転送するために使用 ● 現時点で詳細不明だが設定項目から見て Aurora MySQL の enhanced binary log と類似の制限がありそう ○ aurora.logical_replication_backup=0 ○ aurora.logical_replication_globaldb=0 18
まとめ ● RDS Data API には(ちゃんと)未来があった ○ Aurora PostgreSQL(Serverless v2・プロビジョンド)で使えるように ■ Aurora MySQL(v3 〜)がサポートされるかは不明 ■ そして Aurora Serverless v1 の未来も不明 ● Aurora の zero-ETL 統合(Redshift)ではストレージ層 で Redshift にデータが転送される ○ 性能面のメリットはあるが、同時に機能面の制約も 19