Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloudflare Workes からMySQL 系 DB への接続事情(2024/4 現在)

Cloudflare Workes からMySQL 系 DB への接続事情(2024/4 現在)

Cloudflare Meet-up Online!! #3 2024/5/8 LT

hmatsu47

May 08, 2024
Tweet

More Decks by hmatsu47

Other Decks in Technology

Transcript

  1. 自己紹介 松久裕保(@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
  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
  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
  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
  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
  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
  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
  8. Hyperdrive は? • 2024/4 現在、まだ対応のアナウンスは出ていない ◦ 「with MySQL coming soon」のまま

    ▪ 昨秋時点では「年内には対応したい」と言っていたけれど ▪ mysql2 の Socket API 対応が完了していないので当然か… 9
  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
  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
  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
  12. 注意点 • 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
  13. まとめ • MySQL 系 DB の TCP Socket 接続サポートは準備中 ◦

    もうすぐ? • PlanetScale や TiDB Serverless を使うのが現実的 ◦ 他はちょっと面倒 ◦ アーキテクチャ的にもこれらのほうが合ってるかも? 19