4.7K Views
May 08, 24
スライド概要
Cloudflare Meet-up Online!! #3 2024/5/8 LT
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
Cloudflare Workes から MySQL 系 DB への接続事情 (2024/4 現在) Cloudflare Meet-up Online!! #3 2024/5/8 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) ● https://qiita.com/hmatsu47 ● 名古屋で Web インフラのお守り係をしています ● 全国各地のイベントを巡っています(2023/8 〜) ○ 2023 : JAWS-UG 岩手→四国クラウドお遍路 2023(愛媛)→JAWS FESTA 2023 (福岡)→ AWS カーニバル(北海道)→忘年会議 2023 in 岡山城 ○ 2024 : BuriKaigi2024(富山)→ JBUG 広島→ JAWS-UG 佐賀→ JAWS-UG 北陸 新幹線(福井)→ R6 能登半島地震チャリティ駆動 LT 大会(岡山) ※東京や近場(愛知県内・静岡県西部)開催の参加イベントは除く 2
Cloudflare Workers からの外部 DB 接続といえば ● 対 RDBMS では PostgreSQL 系のサポートが中心 ○ TCP Socket 接続(pg) ■ https://developers.cloudflare.com/workers/tutorials/postgres/ ■ https://www.docswell.com/s/hmatsu47/5ENYG8-2023-08-06-145801 ○ Hyperdrive ■ https://developers.cloudflare.com/hyperdrive/ ○ 各種 DBaaS(Neon・Supabase など) 3
MySQL 系 DB(互換 DB を含む)のサポートは? ● DBaaS への接続(HTTP(s) 経由) ○ PlanetScale(Vitess ベース) ■ https://developers.cloudflare.com/workers/databases/native-integrations/planetscale/ ○ TiDB Serverless(v.7.1 系 : MySQL 5.7 互換+一部のウィンドウ関数など) ■ https://docs.pingcap.com/tidbcloud/integrate-tidbcloud-with-cloudflare ■ https://zenn.dev/kameoncloud/articles/99d3ed9d5ce4fd ● TCP Socket 接続は…? 4
MySQL 系 DB の TCP Socket 接続事情 ● 現状は厳しい ○ Cloudflare 公式ページにある deno-mysql ■ https://github.com/cloudflare/worker-template-mysql ■ 2021/11 を最後に更新停止(Issues を見ると現状使えないことがわかる) ■ demo-mysql 本体は更新が続いているが… ○ Node.js 用モジュール mysql2 ■ 現在対応作業中(Node.js モジュール側で) ■ ただし、昨年出された PR についての議論が 2024/3/29 で止まったまま 5
MySQL 系 DB の TCP Socket 接続事情 ● 現状は厳しい ○ Cloudflare 公式ページにある deno-mysql ■ https://github.com/cloudflare/worker-template-mysql ■ 2021/11 を最後に更新停止(Issues を見ると現状使えないことがわかる) ■ demo-mysql 本体は更新が続いているが… ○ Node.js 用モジュール mysql2 ■ 現在対応作業中(Node.js モジュール側で) ■ ただし、昨年出された PR についての議論が 2024/3/29 で止まったまま 6
Issue #2179 : Support Cloudflare workers ● mysql2 を Socket API に対応させるための Issue ○ 2023/8/18 に(PingCAP 所属?の方が)登録 ■ https://github.com/sidorares/node-mysql2/issues/2179 ○ 2023/11/21 に(別の PingCAP 所属の方から)PR #2289 が出される ■ https://github.com/sidorares/node-mysql2/pull/2289 ■ 翌月(12/15)ready for review から draft に切り替え ○ 2024/3/29 を最後に Conversation のやりとりが途絶える ■ あるフラグの命名を巡っての議論の途中で 7
Issue #2179 : Support Cloudflare workers ● mysql2 を Socket API に対応させるための Issue ○ 2023/8/18 に(PingCAP 所属?の方が)登録 ■ https://github.com/sidorares/node-mysql2/issues/2179 ○ 2023/11/21 に(別の PingCAP 所属の方から)PR #2289 が出される ■ https://github.com/sidorares/node-mysql2/pull/2289 ■ 翌月(12/15)ready for review から draft に切り替え ○ ここ数日でようやくマージに向けて動き出した模様 ■ 2024/5/6 に draft から ready for review に戻った 8
Hyperdrive は? ● 2024/4 現在、まだ対応のアナウンスは出ていない ○ 「with MySQL coming soon」のまま ■ 昨秋時点では「年内には対応したい」と言っていたけれど ■ mysql2 の Socket API 対応が完了していないので当然か… 9
というわけで ● 現状は厳しい(2 回目)ようやく光がさしてきた ● TCP Socket 接続以外→ HTTP(S) で頑張る? ○ CData API Server で REST API を立てる(なおお値段) ■ https://www.cdata.com/jp/kb/articles/apiserver-mysql.rst ○ Prisma(Prisma Accelerate)や Hasura を MySQL で使う ■ https://www.prisma.io/data-platform/accelerate ■ https://hasura.io/docs/latest/databases/mysql/index/ ○ 自前で書く 10
それ以外の HTTP(S) は? ● 本家の MySQL REST Service(MRS) ○ MySQL Router の一機能(現在プレビュー中) ■ https://blogs.oracle.com/mysql-jp/post/introducing-the-mysql-rest-service-jp ■ https://labs.mysql.com/ ■ https://www.wantedly.com/companies/learningbox/post_articles/544775 ■ なお MySQL Router REST API は別機能なので注意(命名が紛らわしい…) ○ 対象 DB・テーブルを指定すると REST API を作成可能 ■ MySQL Shell for VS Code から操作 ■ 通常の MySQL Shell からの操作も可能な触れ込みだが現状では無理 11
やってみた ● MySQL HeatWave on AWS(8.2.0-u2 最小構成) ○ Oracle 公式サンプルデータ「AirportDB」をインポート ● MySQL Shell for VS Code(1.14.2+8.1.1 Preview 版) ○ VS Code にインストール後 REST Service Support 設定 ● MySQL Router(8.2.0 Labs MRS7) ○ Docker コンテナイメージをローカルで設定後 EC2 上で起動 ○ ALB+ACM で Cloudflare Workers からアクセス可能に 12
サンプルデータ(一部) 13
MySQL REST Service(MRS)の API 設定(一部) 14
Cloudflare Workers の Playground で fetch 15
fetch 部分を拡大 16
結果を拡大 17
注意点 ● DB 接続に X Protocol(Default : TCP 33060)が必要 ○ X Protocol が使えない環境では MRS の初期設定で失敗する ■ RDS for MySQL / Aurora MySQL などは X Protocol 非対応 ● MRS には自己署名証明書が自動設定される ○ Cloudflare Workers から直接接続しようとすると 526 エラーに ■ ALB+ACM や nginx+Let’s Encrypt などが必要になる ● 現時点ではまだプレビュー版 18
まとめ ● MySQL 系 DB の TCP Socket 接続サポートは準備中 ○ もうすぐ? ● PlanetScale や TiDB Serverless を使うのが現実的 ○ 他はちょっと面倒 ○ アーキテクチャ的にもこれらのほうが合ってるかも? 19