Supabaseでedge functionsを定期実行する方法
2024/9/17 2024/9/17 システム
はじめに
本記事の対象者
Supabaseを使ったアプリケーションにて定期的に自動実行する処理を追加したい方となります。
全体の流れ
functionsを追加→sql editorでscheduleされた処理を追加
やることはとてもシンプルですが、Supabaseにてpostgresの拡張機能を追加する必要があるため備忘を兼ねて残しておきます。
実装
1.拡張機能の追加
Supabaseのダッシュボードから、Database->Extentionsと進み、Search boxに以下の2つをそれぞれ入力し、有効化します。
pg_net
pg_netは以下supabaseの公式にもあるように、スケジューリングされたhttpリクエスト、つまり後に作成するedge functionを実行するために必要になります。
https://supabase.com/docs/guides/database/extensions/pg_net#invoke-a-supabase-edge-function
pg_cron
Supabaseはデフォルトでcronというスキーマは存在しないため、こちらを入れることでスケジュール実行のジョブを作ることができますので、pg_netと同様に有効化します。
https://supabase.com/docs/guides/database/extensions/pg_cron
2. functionsの作成とデプロイ
まずは新しくedge functionsを追加します。
functionnameの部分を任意の名称にします。
supabase functions new functionname
続いて追加されたコードに処理を書きます。
実行内容はアプリごとに異なるため割愛いたします。
ソースコードを書き終えたら、クラウド上にデプロイします
supabase functions deploy functionname
Supabaseのコンソールからedge functionsに上記が追加されていればOKです。
スケジュール実行までやる前にcurl等でfunctions自体の実装にミスがないか確認しておきましょう。
3. SQL Editorでスケジュールを登録する
select cron.schedule(
'job-name',
'0 2 * * *',
$$
-- SQL query
select "net"."http_get"(
-- URL of Edge function
url := 'https://*****.supabase.co/functions/v1/*****',
headers:='{"Authorization": "Bearer *****"}'::jsonb
) as "request_id";
$$
);
上記のように実行タイミング、実行するHTTPメソッド、そして実行するfunctionsを定義して、RUNをクリックします。
するとこのように結果が返ってきます。
cronの設定方法は文末にてサンプルを紹介しています。
以上でedge functionsの作成と、スケジュール実行の設定は終了です。
テストやロギング
スケジュール実行の確認方法
登録したcronはsupabaseコンソールのTableEditor->schema: cronから確認ができます。
ジョブの確認はjobテーブルにて確認ができます
ジョブの実行履歴はjob_run_detailsにて確認ができます
これらでジョブがきちんとセットされているか、また、実行結果がどうなっているかを容易にチェックできます。
edge functionsのログ
スケジュールが正しく実行されていたら、ついでにfunctionsの実行結果も確認しましょう。
Edge Functions -> 作成したfunctions -> Invocationsにて起動が確認できます。
スケジュール設定した頻度で定期的に実行されていることが確認できればOKです。
最後に
cronの設定ルールといくつかサンプルを提示し本記事を終えます。
ご閲覧いただきありがとうございました。
cronの基本構文
cronの設定は、以下の5つのフィールドで構成されています
* * * * *
| | | | |
| | | | +---- 曜日 (0 - 7) (日曜を0または7として指定)
| | | +------- 月 (1 - 12)
| | +---------- 日 (1 - 31)
| +------------- 時 (0 - 23)
+---------------- 分 (0 - 59)
よく使われるcron設定サンプル
設定例をいくつか紹介します。
1. 毎分実行する設定
* * * * *
2. 5分おきに実行する設定
*/5 * * * *
3. 毎日深夜2時に実行する設定
0 2 * * *
4. 毎月1日の午前6時に実行する設定
0 6 1 * *
5. 毎週月曜日の午前9時に実行する設定
0 9 * * 1