のイベント通知を有効にする Code Engine
Code Engine の管理者として、他の IBM Cloud サービスから Code Engine にイベントを送信し、アプリやジョブをトリガーしたいと思うかもしれない。
Event Notifications に情報を送信するには、 Code Engine インスタンスを Event Notifications に接続する必要があります。 Event Notificationsの操作について詳しくは、Event Notifications の使い始め方をご覧ください。
イベントはどのように受け取られるのか?
Code Engine インスタンスは、 Event Notifications のデスティネーションとして機能します。
デスティネーションとして構成されると、 Code Engine のジョブやアプリは、他の IBM Cloud サービス、あるいは他の Code Engine アプリやジョブからのイベント通知に反応してトリガーされることができます。
の主な特徴は? Event Notifications
Event Notifications、以下の機能を確認してください。 Code Engine
-
pingSourceを有効または無効にすることで、タイマーのようなスケジュールされたイベントソースを必要に応じてコントロールすることができます。 イベントサブスクリプションを使用している場合、これは不可能です。 -
リトライ回数やデッドレターキューをコントロールできる。 Code Engine を呼び出す際、ネットワークエラーやアプリケーションの不具合などの問題により、リクエストに失敗することがある。 再試行は、外部要求に対する回復力を提供するために使用されます。 詳しくは、再試行回数をご覧ください。
-
Event Notifications HTTP イベント、クラウドサービスイベント(オブジェクトのアップロードなど)、関数、 ジョブ出力など、さまざまなイベントソースをサポートしています。 Code Engine このモジュール性により、スケジュールされたトリガーだけでなく、リアルタイムのイベントに対応できる柔軟なワークフローの作成が可能になる。 複数のイベントソースを組み合わせることで、複雑でダイナミックなシステムを簡単に設計することができます。
-
複雑なワークフローを作成できる。 例えば、ジョブをタイマーでトリガーし、ジョブが完了したら、他のサービスのソースとして Event Notifications にイベントを送り返すことができる。 このタイプのワークフローの1つのシナリオは、イベントがEメール通知をトリガーしたり、別のワークフローを開始することである。
-
ジョブランは自動的に削除されます。 デフォルトでは、 Event Notifications、ジョブ実行クォータの問題を防ぐために、10分後にジョブ実行が自動的に削除されます。 これは、古くなったり、動かなくなったりしたジョブが不必要にリソースを消費しないようにするのに役立つ。 また、 Code Engine のジョブ枠を超えないようにすることもできる。 この動作は、 Code Engine プロジェクトのジョブタブを観察することで確認することができます。そこで、ジョブの実行が10分間のウィンドウの後に自動的に削除されることがわかります。
Event Notifications 通知は購読とどう違うのですか?
Event Notifications のサブスクリプションにより、 Code Engine アプリやジョブがイベント情報を受信できるようになります。
Code Engine では、イベント・プロデューサーをサブスクライブすることで、アプリケーションまたはジョブが関心対象のイベントを受信できるようになります。 イベント情報は、アプリケーションについては POST HTTP 要求、ジョブについては環境変数として受信されます。
Code Engine は、サブスクリプションのために以下のタイプのイベント・プロデューサをサポートします。
- Cron
- cronイベントプロデューサーはcron-jobをベースにしており、定期的にイベントを生成します。 明確に定義された間隔または特定の時刻にアクションを実行する必要がある場合に、cron イベント・プロデューサーを使用します。
- IBM Cloud Object Storage
- Object Storage イベントプロデューサは、オブジェクトストレージバケット内のオブジェクトに変更が加えられると、イベントを生成します。 例えば、バケットにオブジェクトが追加されると、アプリケーションがイベントを受信して、その変更に基づくアクション (新しいオブジェクトを取り込むなど) を実行できます。
- Kafka
- Kafka イベント・プロデューサーは、 Kafka インスタンスに現れる新しいメッセージを監視する。 トピックのセットに対して Code Engine Kafka サブスクリプションを作成すると、アプリまたはジョブは、トピックの 1 つに表示される新しいメッセージごとに個別のイベントを受信します。
- Webhook
- GitHub webhooks を使用して、 GitHub リポジトリから Code Engine ワークロードにイベントを送信できます。
あるいは、 Event Notifications で、 Code Engine をデスティネーションとして設定することもできる。
デスティネーションとして構成された場合、 Code Engine のジョブやアプリは、他の IBM Cloud サービス、あるいは他の Code Engine アプリやジョブからのイベント通知に応答してトリガーされます。
| タスク | サブスクリプション | Event Notifications |
|---|---|---|
| イベントソースの定義 | 定期的な時間ベースのイベントを生成する定期的なタイマーcronのようなイベントソースを作成します。 | 事前に定義されたイベントソースを使用 - 定期タイマー |
| スケジューリング | 次のステップとして、タイマーをスケジュールする | トピックを作成し、ソースを周期的タイマーに選択します。 を使用して設定する。 cronExpression |
| 最終目的地を選ぶ | 仕事またはアプリケーションを選択する | 最終目的地を作る。 Code Engine |
| イベントに申し込む | 明示的な加入は必要ない。 | サブスクリプションを作成します。 以前に作成した宛先とトピックを選択します。 |
詳しくは、 サブスクリプションを始めるを ご覧ください。
コンソールでトリガーを設定する
この例では、 IBM Cloud コンソールを使って、 Event Notifications にタイマートリガーを設定し、6時間ごとに Code Engine ジョブを呼び出します。
始める前に、あなたのアカウントに以下のものがあることを確認してください。
- Event Notifications インスタンス
- Code Engine プロジェクト。
- プロジェクト内で目標とする仕事。
トリガーを作成するために以下のステップを完了する。
-
Event Notifications インスタンスにソースをセットアップする。
- ソースの設定
- イベントソースとして周期タイマーを選択する。
- トピックの設定 トピックは、イベントのフィルターとして機能する。 これを使用して、関心のあるイベントを定義する。
- トピックに名前をつける。 例えば、" Periodic-Trigger-6hr "。
- トピックが6時間ごとにイベントを発信するように、cron式
(0 */6 * * *)。 周期的タイマー付きトピックの作成については、こちらをご覧ください。
-
目的地を設定する。 宛先は、イベントが処理のために送られる場所である。 この例では、利用可能な宛先リストから既存の Code Engine ジョブを選択します。 このジョブは、イベントが発生したときにトリガーされるエンドポイントとして機能します。
注: Event Notifications と Code Engine の間には、サービス間の承認が必要である。 これは、コンソールの「 管理」 >「 アクセス 」>「 認証 」で設定できる。 しかし、コンソールを使うと、この部分は自動的に処理される。
-
トピックと宛先をリンクするサブスクリプションを作成します。
-
先に作成した " Periodic-Trigger-6hr " トピックを選択する。
-
Code Engine 仕事を目的地に選ぶ。
-
サブスクリプションは、6時間ごとにイベントが発生すると、 Code Engine ジョブがトリガーされるようにする。 プロジェクトの Jobruns タブを見ることで、その間隔を確認することができます。
前のステップでは、ジョブをデスティネーションとして設定した。 しかし、これと同じ手順が、目的地がアプリの場合にも使えます。 保存先を設定する際、アプリの URL。
CLIでトリガーを設定する
この例では、 IBM Cloud CLIを使用して、 Event Notifications、6時間ごとに Code Engine ジョブを呼び出すタイマー・トリガーを設定します。
始める前に、あなたのアカウントに以下のものがあることを確認してください。
- Code Engine プロジェクト。
- プロジェクト内で目標とする仕事。
以下の手順でトリガーを設定する。
- Event Notifications インスタンスを作成する。
ibmcloud resource service-instance-create "$EVENT_NOTIFICATIONS_INSTANCE_NAME" \ "$EVENT_NOTIFICATIONS_SERVICE_NAME" "$EVENT_NOTIFICATIONS_PLAN" "$PROJECT_REGION" \ -g "$PROJECT_RESOURCE_GROUP" - 認可ポリシーを作成する。
ibmcloud iam authorization-policy-create event-notifications codeengine Writer,Viewer \ --source-service-instance-id $EVENT_NOTIFICATIONS_INSTANCE_ID \ --target-service-instance-name "${PROJECT_NAME}" - Code Engine ジョブを使用して目的地を作成します。
CONFIG_JSON=$(cat <<EOF { "params": { "type": "job", "job_name": "${JOB_NAME}", "project_crn": "${PROJECT_CRN}" } } EOF ) ibmcloud event-notifications destination-create \ --instance-id "${EVENT_NOTIFICATIONS_INSTANCE_ID}" \ --name "${DESTINATION_NAME}" \ --type "ibmce" \ --description "${DESTINATION_DESCRIPTION}" \ --config "$CONFIG_JSON" - Event Notifications トピックを作成します。 トピックを
--topic-timer、6時間間隔で0 */6 * * *。ibmcloud event-notifications topic create \ --name "$TOPIC_NAME" \ --description "$TOPIC_DESCRIPTION" \ --service-instance-id "$EVENT_NOTIFICATIONS_CRN" \ --topic-type timer \ --topic-timer "$TOPIC_CRON" # Example: "0 */6 * * *" - 目的地のトピックを購読する
ibmcloud event-notifications subscription create \ --name "$SUBSCRIPTION_NAME" \ --description "Triggers Code Engine job from topic" \ --service-instance-id "$EVENT_NOTIFICATIONS_CRN" \ --topic-id "$TOPIC_ID" \ --destination-id "$DESTINATION_ID"