启用事件通知 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,作为其他服务的源。 这类工作流的一种应用场景是让事件触发电子邮件通知或启动另一个工作流。

  • 您的任务运行将被自动删除。 默认情况下,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 配置为目的地

当配置为“目的地”时,您的 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. 创建连接主题和目的地的订阅。

    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"