SuperAPI AI 工具集

oci-events

部署与运维

查看项目

更新于 10-15 10:29

技能介绍

用途

OCI Events 技能面向 Oracle Cloud Infrastructure 的事件驱动架构场景,帮助在实现事件驱动自动化、设置 CloudEvents 规则、排查事件投递失败以及集成 OCI 服务时使用正确的 OCI 专有模式与语法。该技能明确指出模型训练数据对 OCI Events 的了解有限且过时,因此不应凭猜测编写事件过滤语法或事件类型。

主要能力

技能提供以下 OCI Events 专有知识:

  • CloudEvents 规范格式(OCI 使用 CloudEvents 1.0)
  • 事件规则过滤语法(基于 JSON 的属性匹配)
  • 按 OCI 服务划分的事件类型(100 多种)
  • 动作类型与集成模式
  • 死信队列配置
  • Events 与 Alarms 的区别

技能还提供渐进式加载的参考文件:

  • events-patterns.md:事件架构模式与过滤语法,适用于设计事件驱动架构、编写复杂事件过滤语法、按服务查找常见事件类型、理解扇出模式与事件链、在动作类型(ONS、FAAS、OSS)之间选择。
  • events-cli.md:OCI CLI for Events,适用于创建带过滤条件的事件规则、配置动作(Functions、Notifications、Streaming)、排查事件投递失败、列出可用事件类型、测试事件规则模式。
  • oci-events-reference.md:OCI Events 官方参考,适用于获取全部 OCI 服务事件类型清单、理解 OCI 中的 CloudEvents 1.0 规范、实现复杂事件模式与过滤、获取官方架构指导、排查事件投递与动作失败。

使用方式

技能建议优先使用官方 OCI Landing Zone Terraform 模块,而不是手工逐个创建事件规则、函数和通知。示例模块配置如下:

module "landing_zone" {
  source  = "oracle-terraform-modules/landing-zone/oci"
  version = "~> 2.0"

  events_configuration = {
    default_compartment_id = var.security_compartment_id

    event_rules = {
      compute_instance_terminated = {
        description = "Notify when compute instance terminated"
        is_enabled  = true
        condition   = jsonencode({
          "eventType" : "com.oraclecloud.computeapi.terminateinstance"
        })
        actions = {
          notifications = [ons_topic_id]
          functions     = [security_response_function_id]
        }
      }
    }
  }
}

使用 Landing Zone 模块的理由:经过大量 OCI 客户验证、符合 CIS OCI Foundations Benchmark、由 Oracle 随 API 变更维护、集成 Events + IAM + Logging + Monitoring、跨环境模式一致。

手工 CLI 适用于:学习与原型验证、排查现有事件规则、一次性自动化任务、在 Terraform 实现前理解事件模式。

创建事件规则示例(处理 CSV 上传):

oci events rule create \
  --display-name "Process-CSV-Uploads" \
  --condition '{
    "eventType": "com.oraclecloud.objectstorage.createobject",
    "data": {"resourceName": "*.csv"}
  }' \
  --actions '{
    "actions": [{
      "actionType": "FAAS",
      "isEnabled": true,
      "functionId": "ocid1.fnfunc.oc1..xxx"
    }]
  }' \
  --compartment-id $COMPARTMENT_ID

适用场景

  • 实现事件驱动自动化与工作流
  • 搭建无服务器架构(Events + Functions)
  • 排查“事件规则不触发”问题
  • 通过事件集成 OCI 服务
  • 设计响应式架构(而非轮询)
  • 合规与审计追踪自动化
  • 事件响应与安全自动化

限制与禁止做法

技能列出多项必须避免的做法:

  1. 不得用 Events 做指标阈值监控,应使用 Alarms。Events 用于状态变化(实例创建、存储桶删除),不监控连续指标。
  2. 不得忽略死信队列配置,否则失败事件会丢失。
  3. 不得使用过宽的事件过滤器,例如 com.oraclecloud.computeapi.* 会匹配所有计算事件,产生噪音与成本。
  4. 不得在事件通知中发送敏感数据(如密码、密钥),应使用仅含资源引用的载荷。
  5. 不得用 Events 做实时流处理,应使用 OCI Streaming。Events 每规则限制约 50 请求/秒,且为尽力而为的一次性投递。
  6. 不得假设事件按顺序投递,函数逻辑需处理乱序事件(可包含时间戳、检查资源状态或使用幂等操作)。
  7. 单条规则动作不超过 5 个(硬限制),超过时应设计扇出模式。
  8. 不得遗漏事件动作所需的 IAM 策略,否则事件会静默失败(403 Forbidden)。需授予 Events 服务调用函数的权限:
oci iam policy create \
  --compartment-id $COMPARTMENT_ID \
  --name "Events-Invoke-Functions-Policy" \
  --statements '[
    "Allow service cloudEvents to use functions-family in compartment <compartment-name>"
  ]'

Events 与 Alarms 的区分:状态变化(实例终止、存储桶创建、数据库停止)与资源生命周期(VCN 创建、策略更新、用户添加)使用 Events;指标阈值(CPU > 80%、磁盘满、内存压力)与性能(查询延迟 > 2s、错误率 > 5%)使用 Alarms。

关于收费、价格、具体平台支持范围等信息,资料中暂未提供。