用途
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 服务
- 设计响应式架构(而非轮询)
- 合规与审计追踪自动化
- 事件响应与安全自动化
限制与禁止做法
技能列出多项必须避免的做法:
- 不得用 Events 做指标阈值监控,应使用 Alarms。Events 用于状态变化(实例创建、存储桶删除),不监控连续指标。
- 不得忽略死信队列配置,否则失败事件会丢失。
- 不得使用过宽的事件过滤器,例如
com.oraclecloud.computeapi.*会匹配所有计算事件,产生噪音与成本。 - 不得在事件通知中发送敏感数据(如密码、密钥),应使用仅含资源引用的载荷。
- 不得用 Events 做实时流处理,应使用 OCI Streaming。Events 每规则限制约 50 请求/秒,且为尽力而为的一次性投递。
- 不得假设事件按顺序投递,函数逻辑需处理乱序事件(可包含时间戳、检查资源状态或使用幂等操作)。
- 单条规则动作不超过 5 个(硬限制),超过时应设计扇出模式。
- 不得遗漏事件动作所需的 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。
关于收费、价格、具体平台支持范围等信息,资料中暂未提供。