株式会社Infigate

Blog

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

この記事を書いた人

Infigate

北海道札幌市のシステム開発会社、株式会社Infigateです。 活動内容やシステム開発技術に関するTips、DX化に関連する記事やその他地域活性化に繋がる情報等を発信していきます。

お問い合わせ

Contact

お見積ご相談は無料です。
どうぞお気軽にご相談くださいませ。