啟用事件通知 Code Engine

身為 Code Engine 的管理員,您可能希望從其他 IBM Cloud 服務傳送事件到 Code Engine,以觸發您的應用程式或工作。

若要傳送資訊到 Event Notifications,您必須將 Code Engine 的實例連線到 Event Notifications。 如需更多關於使用 Event Notifications 的資訊,請參閱 開始使用 Event Notifications

如何接收活動?

您的 Code Engine 實例可作為 Event Notifications 的目的地。

設定為 Destination 時,您的 Code Engine 作業或應用程式可以回應來自其他 IBM Cloud 服務或甚至其他 Code Engine 應用程式或作業的事件通知而被觸發。

有哪些主要特點 Event Notifications

檢視下列功能,以使用 Event Notifications Code Engine

  • 您可以啟用或停用 pingSource,這可讓您根據需要啟用或停用定時器等排程事件來源,從而控制它們。 當使用 Event Subscriptions 時,這是不可能的。

  • 您可以控制重試和死信佇列的次數。 在呼叫 Code Engine 時,網路錯誤或應用程式故障等問題可能會導致請求失敗。 重試用於為外部請求提供彈性。 要瞭解更多資訊,請查看重試次數。

  • Event Notifications 支援各種事件來源,例如 HTTP 事件、雲端服務事件 (例如物件上傳)、函式和 Code Engine 作業輸出。 此模組化功能可建立彈性的工作流程,以回應即時事件,而不只是排程觸發。 透過結合多個事件來源,您可以輕鬆設計複雜的動態系統。

  • 您可以建立複雜的工作流程。 例如,工作可以由計時器觸發,然後當工作完成時,它可以將事件傳回 Event Notifications,作為其他服務的來源。 此類工作流程的其中一種情況是,事件會觸發電子郵件通知或啟動另一個工作流程。

  • 您的工作執行會自動刪除。 根據預設,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 訂閱時,您的應用程式或工作會為其中一個主題中出現的每一則新訊息接收單獨的事件。
Webhook。
您可以使用 GitHub webhooks 將 GitHub 儲存庫中的事件傳送至 Code Engine 工作負載。

另外,透過 Event Notifications,您可以將 Code Engine 設定為目的地

設定為 Destination 時,您的 Code Engine 作業或應用程式可以回應來自其他 IBM Cloud 服務或甚至其他 Code Engine 應用程式或作業的事件通知而被觸發。

比較訂閱與事件通知
作業 訂閱 Event Notifications
定義事件來源 建立類似定期計時器 cron 的事件來源,以產生循環的時間事件。 使用預先定義的事件來源 - 定期計時器
排定 下一步,排定計時器 建立主題,選擇來源為週期計時器。 使用 cronExpression
選擇最終目的地 選擇工作或應用程式 建立最終目的地。Code Engine
訂閱活動 不需要明確訂閱。 建立訂閱。 選擇先前建立的目的地和主題。

如需瞭解更多資訊,請參閱 開始訂閱

在主控台中設定觸發器

在本範例中,您使用 IBM Cloud 主控台在 Event Notifications 中設定定時觸發,每 6 小時呼叫一次 Code Engine 作業。

在您開始之前,請確定您的帳戶中有以下項目。

  • Event Notifications 實例
  • Code Engine 專案。
  • 專案中的目標工作。

完成下列步驟以建立觸發器。

  1. 在 Event Notifications 範例中設定來源。

    1. 設定來源
    2. 選擇週期性計時器作為事件來源。
    3. 設定主題 主題可作為事件的篩選器。 您會用它來定義關注的事件。
    4. 為您的主題命名。 例如," Periodic-Trigger-6hr "。
    5. 設定 cron 表達式 (0 */6 * * *),使主題每 6 小時發出一次事件。 進一步了解建立具有週期性計時器的主題。
  2. 設定目的地。 目的地是事件被送往處理的地方。 在此範例中,請從可用目的地清單中選擇您現有的 Code Engine 工作。 工作將作為事件發生時觸發的端點。

    註:Event Notifications 和 Code Engine 之間需要服務對服務授權。 這可以透過主控台中的管理 > 存取 > 授權進行設定。 不過,當您使用主控台時,這部分會自動處理。

  3. 建立一個 Subscription 來連結 Topic 和 Destination。

    1. 選擇之前建立的 " Periodic-Trigger-6hr " 主題。

    2. 選擇您的 Code Engine 工作為目的地。

訂閱可確保當事件每 6 小時發出一次時,就會觸發該 Code Engine 作業。 您可以檢視專案的 Jobruns 索引標籤,觀察並驗證時間間隔。

之前的步驟設定工作為目的地。 但是,如果您的目的地是應用程式,也可以使用相同的程序。 設定目的地時,請提供您的應用程式 URL。

在 CLI 中設定觸發器

在本範例中,您使用 IBM Cloud CLI 在 Event Notifications 中設定定時觸發,每 6 小時呼叫一次 Code Engine 作業。

在您開始之前,請確定您的帳戶中有以下項目。

  • Code Engine 專案。
  • 專案中的目標工作。

完成下列步驟設定觸發器。

  1. 建立 Event Notifications 範例。
    ibmcloud resource service-instance-create "$EVENT_NOTIFICATIONS_INSTANCE_NAME" \
    "$EVENT_NOTIFICATIONS_SERVICE_NAME" "$EVENT_NOTIFICATIONS_PLAN" "$PROJECT_REGION" \
    -g "$PROJECT_RESOURCE_GROUP"
    
  2. 建立授權政策。
    ibmcloud iam authorization-policy-create event-notifications codeengine Writer,Viewer \
    --source-service-instance-id $EVENT_NOTIFICATIONS_INSTANCE_ID \
    --target-service-instance-name "${PROJECT_NAME}"
    
  3. 使用您的 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"
    
  4. 建立 Event Notifications 主題。 將主題 --topic-timer 設定為 0 */6 * * *,時間間隔為 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 * * *"
    
  5. 訂閱目的地主題。
    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"