Supabase Edge Functions を試すにあたって、RDBが PostgreSQLだということについての準備を終えました。
今回は、Supabase Edge Functions 本体を試します。
参考
- supabase - Edge Functions
- github - supabase/cli
- github - supabase/supabase - supabase/examples/edge-functions/supabase/functions/
- github - supabase/postgrest.js
環境構築
前提
supabase にログイン、プロジェクトを作成しておき、ここでは first-project としました。
この時、プロジェクトのホーム画面で Project Configuration
という項目でURLが記載されています。https://hogehogehoge.supabase.co
のようになっており、これの hogehogehoge
部分は後で使うので控えておきます。
また、Project API keys
の、anon
public
と書かれたところも、後ほど使用します。
CLI ツール導入
supabase のデプロイをするためにはCLIの導入が必要な様子。
CLIだけ導入されているdocker-imageはなさそうだったので、以下のDockerfileを自作。
(別にdenoのイメージをベースにする必要は無いんですが、追々楽そうだったので。)
1 | FROM denoland/deno:1.20.4 |
1 | $ docker-compose build |
Function を作成/デプロイ
supabase - Edge Functions に倣い、Function を作成してみます。
以下コマンドで作成します。
1 | $ supabase functions new first-function |
コマンド実行すると、カレントディレクトリから supabase が掘られます。
index.ts
の中身は次の通り。
1 | // Follow this setup guide to integrate the Deno language server with your editor: |
(セキュアな認証情報がコメントに載っているのでマスクしています。)
それではデプロイしてみます。
1 | # 一旦ログイン |
実行結果に記載されたURLへアクセスすると、作成されたFunctionのページに飛びます。
実行方法の記載を見ると次のようになっています。
1 | curl -L -X POST 'https://hogehogehoge.functions.supabase.co/first-function' -H 'Authorization: Bearer [YOUR ANON KEY]' --data '{"name":"Functions"}' |
と書かれています。この、[YOUR ANON KEY]
を埋めてやると良いようですが、管理画面のて時かなところには、記載がありません。
これはプロジェクトのホーム画面のProject API keys
の anon
public
の部分が該当するのでこの値で埋めて実行します。
実行結果は、次の通りです。
1 | $ curl -L 'https://hogehogehoge.functions.supabase.co/first-function' -H 'Authorization: Bearer トークン文字列' --data '{"name":"Functions"}' |
実装の通り、{"message":"Hello 2Functions!"}
と返ってきます。
関数をデプロイできました。
supabase Edge Functions でデータベースを参照してみる
それでは引き続き、データベースへのアクセスを試みてみます。
テーブルの作成
supabase の管理画面を見ると、Table Editor というものがありました。
こちらで、テーブル作成を行うようなので、簡単なテーブルを作成してみます。
いくつかスキーマがあるようでしたが、今回は public
を選択しました。
Items テーブルの作りは次の通りです。
カラム名 | Type | |
---|---|---|
id | int8 | デフォルト |
created_ta | timestamptz | デフォルト |
name | varchar |
画面はこんな感じ。
数秒で作成は終わりました。
管理画面からデータが追加できたので適当なデータを入れておきます。
アプリケーションを改修
サンプルを元に確認目的で雑に実装。
1 | import { serve } from "https://deno.land/std@0.131.0/http/server.ts" |
実行すると次のように結果が返ってきます。
1 | $ curl -L 'https://hogehogehoge.functions.supabase.co/first-function' -H 'Authorization: Bearer トークン文字列' |
専用クライアントで取れてしまうので、既に PostgreSQL の知識を要さないところがポイント。
(念のためやっておいたPostgreSQLの事前確認は何だったんだ。)
常に全件取得というのも面白くないので、データを絞ってみます。
データベースにアクセスしてデータを絞ってみる
where 句に相当する機能については、github - supabase/postgrest.js に記載がある。
結構な数があるので、supabase を使うなら必須で持っておくべき知識ではありそう。
今回は、eq
だけ使用します。
1 | import { createClient } from 'https://esm.sh/@supabase/supabase-js@^1.33.2' |
実行結果は次の通り。
1 | $ curl -L 'https://hogehogehoge.functions.supabase.co/first-function' -H 'Authorization: Bearer トークン文字列' --data '{"id":1}' |
Supabase Edge Functions を試してみた。
今回は Supabase client を使って直接データベースへの接続をしてみたが、別途提供されている環境変数も使用することで、直接接続もできる様子。
データベースのパスワードは、環境変数で提供されていないようなので、これは独自に環境変数を定義して渡す必要がありそう。
環境変数の設定をドキュメントに従い行ってみたところ、動作が確認できなかったので継続確認します。
ではでは。