概要
Cloudflare Workers から NeonDBにつないでみた。
Cloudflare Workersを作成するまでは 「Cloudflare Workers プロジェクト作成から GitHub Actions 自動デプロイまで最速でやる」を参考にした。( issue , commit )
Honoの導入は「Cloudflare Workers with Hono on bun を試す」を参考にした。( commit )
Neonの設定
1年前とGUIが変わっている。
ロールの準備
「Branches」を選択し、対象をクリックする。
「Roles & Databases」のタブを選択
「Download .env」ボタンを押下し、作成されたパスワードを控えておく。
ダウンロードされる.env.txtの内容は下記
PGUSER=入力したロール名
PGPASSWORD=出力されたパスワード
環境変数を Cloudflare works に設定しておく。下記コマンドを入れると入力を促されるので、postgresql://入力したロール名:出力されたパスワード@fuga.us-west-2.aws.neon.tech/main?sslmode=require
を設定。
wrangler secret put NEON_CONNECTION_STRING
$ wrangler secret put NEON_CONNECTION_STRING
⛅️ wrangler 3.99.0
-------------------
√ Enter a secret value: ... ********************************************************************************************************
🌀 Creating the secret for the Worker "odyssage-backend"
✨ Success! Uploaded secret NEON_CONNECTION_STRING
ソースコード
DBから値を取り出すだけのテスト関数を作って確認。
import { Hono } from 'hono';
import { neon } from '@neondatabase/serverless';
const app = new Hono<{ Bindings: { NEON_CONNECTION_STRING: string } }>();
app.get('/', (c) => c.text('Hello Cloudflare Workers!'));
app.get('/characters', async (c) => {
const sql = neon(c.env.NEON_CONNECTION_STRING);
const data = await sql('SELECT * FROM public.character');
return c.json(data);
});
export default app;
確認(2025.01.05更新)
(2025.01.02更新)
下記のキャラクターのAPIは削除した。
https://odyssage-backend.hibohiboo66-cloudflare.workers.dev/characters
DBの値を確認できた。
[{"id":"test1","name":"foo"}]
drizzleを導入し、シナリオのAPIで動作確認した。
https://odyssage-backend.hibohiboo66-cloudflare.workers.dev/scenarios
(2025.01.05更新)
また、OpenAPIを公開した。
Hono OpenAPIがESMに対応しておらず、テストが失敗したため、OpenAPIの公開をHonoで行うことはいったんあきらめた。redocで普通に作成
ローカルで実行する 2025.01.05 追記
Neon(Postgres)のDockerをローカルで稼働させ、Drizzleを使ったマイグレーションとCloudflare Workersのローカル実行からの接続を行ったメモに記載
参考
Neon - roles
Cloudflare Workers の wrangler.toml に環境変数を書かないで管理する
【個人開発】無料DBを求めてPlanetScaleからNeonに移行したら快適だった話