Skip to main content

スケジュールされたジョブ

クラウド関数にとって非常に便利なタスクの一つが、スケジュールされたジョブです。これは、15分ごと、1時間ごと、または毎日など、特定の間隔でクラウドで実行したいロジックです。これらのジョブは通常、アプリケーションの「バックグラウンド」で実行されるハウスキーピングタスクを処理します。

この例では、アプリケーションが実行されると多くのレコードがデータベースのクラスに作成され、不必要なデータストレージを使用しないように、48時間より古いレコードを削除したいとします。

ジョブクラウド関数

まず、クラウドジョブを行うシンプルなクラウド関数を作成します。これをCleanupと呼びましょう。

この関数には、48時間より古いPhotosをすべて見つける小さなロジックフローを追加します。これは、Query Recordsノードと日付フィルターを使用し、小さなFunctionスニペットを介して比較したい日付createdAtを渡すことで行います。

比較するDateオブジェクトは以下のように計算されます(現在の日付から48時間戻します)。私たちは、この日付より小さい(以前の)Photoレコードをすべて欲しいのです。

Outputs.FilterDate = new Date(Date.now() - 48*60*60*1000)

成功した場合、写真はRun Tasksという便利なノードに渡されます。このノードは、それに供給された配列の各アイテムに対してロジックコンポーネントタスクを実行し、すべてが処理されたときにDoneを報告します。ロジックコンポーネントを作成する必要があります。私はそれをDelete Taskと呼び、クラウド関数の子コンポーネントとして追加しました。

Delete Taskは非常にシンプルで、Doが送信されたときにトリガーされるDelete Recordノードを使用します。このシグナルはRun Tasksノードによって送信されます。

Run Tasksノードは、配列の各アイテム(削除したい各Photo)に対してタスクコンポーネント(Delete Task)のインスタンスを作成し、Repeaterノードと同様に、Delete Recordノードが現在のレコードに対して操作を行うことを指定できます。

Cleanupクラウド関数に必要なもう一つのことは、認証なしで呼び出すことができるようにすることです。これについては後で少し戻ります。Cleanupクラウド関数のRequestノードがこのプロパティをチェックしていることを確認してください。

テストとデプロイ

バックグラウンドジョブをテストする最も簡単な方法は、アプリケーションのUIから手動でトリガーすることです。アプリの管理パネルなどにどこかにボタンを追加し、単純に関数を実行します。これにより、デプロイする前にNoodlエディターで適切にテストしてデバッグできます。

好みに合うように動作したら、バックエンドにデプロイします。デプロイについての詳細は、このガイドを参照してください。

ジョブのスケジューリング

クラウド関数がデプロイされたら、私たちが望む間隔で実行されるようにスケジュールする必要があります。デプロイされたクラウド関数はNoodlの外部から

実行することができ、これは外部プロバイダーなどとの支払い処理などのタスクに非常に便利であり、クラウドジョブのスケジューリングにも非常に便利です。まず、クラウドサービスタブでクラウドサービスを見つけ、クラウドサービスを管理を探します。

これにより、選択したクラウドサービスに関する情報を表示するポップアップが開きます。私たちが探しているのはエンドポイントで、これはクラウドサービスにアクセスするために使用するHTTPアドレスです。

エンドポイントは以下の形式を持ちます:

https://backend.noodl.cloud/xyz/123

エンドポイントを手に入れたら、クラウドジョブのスケジューリングを設定できます。HTTPコールのスケジューリングには幅広いツールがあり、私の絶対的なお気に入りはcron-job.orgです。それはクリーンでシンプルで無料です。

アカウントを作成してサインインしたら、Create Cronjobボタンを探します。

最初に、スケジュールしたいバックグラウンドジョブであるクラウド関数のエンドポイントを提供します。上記のエンドポイントを使用し、/functions/{function-name}を追加します。

note

一部のツールは大文字と小文字のURLを扱えないため、クラウド関数の名前には小文字のみを使用し、スペースやその他の特殊文字を使用しない方が良いかもしれません。

次に、バックグラウンドジョブのスケジュール間隔を選択します:

note

タスクを頻繁にスケジュールしないでください。Noodlがホストするクラウドサービス(一般的に自己ホスティングも)では、クラウド関数が実行される時間量に応じて課金され、無料プランを使用していて多くのクラウド関数を実行すると、しばらくするとスロットルされ、アプリケーションのパフォーマンスが低下します。

最後に、Advancedタブに移動して追加の設定を行います。主に、Noodlでクラウド関数を呼び出す方法としてPOSTRequest Methodを変更する必要があることです。

それでおしまいです。Test Runボタンを使用して関数をテストし、正常に実行されるはずです。それから、それを作成してください。

これで、クラウド関数がスケジュールされ、写真がキレイに整理されるのを見守るだけで済みます(またはバックグラウンドジョブで行うことを選択したもの)。

セキュリティ

最後にセキュリティに関する注意点です。上記でクラウド関数を認証なしのリクエストを許可に設定しました。これは、誰でもこの関数をいつでも呼び出すことができることを意味します。これは、写真をもっと頻繁に剪定するだけなので、大きな問題ではありません。しかし、私たちの請求額を増やす可能性があります。そこで、呼び出しに必要な秘密キーを追加しましょう。

クラウド関数にSecretというパラメータを追加し、関数の始めにそれを検証する小さなロジックを追加します(好きな秘密を選べます)。

この関数を呼び出すときに提供された秘密が一致しない場合は、エラーレスポンスを返送します。

これにより、秘密を知らない限り、誰もあなたの関数を呼び出すことができなくなります(少な

くとも、可能性のある高額な作業を行うことはありません)。最後に、バックグラウンドジョブをスケジュールするときに同じ秘密を提供します。これは、cron-job.orgAdvancedタブで行うことができます。

これで、スケジュールされたクラウドジョブが稼働しました。このように外部サービスからクラウド関数を呼び出すことは、Noodlを他のサービスと統合するための非常に便利なパターンであり、他のガイドでも繰り返し出現するパターンなので、知っておくと良いでしょう。