Amazon 中的事件总线目标 EventBridge - Amazon EventBridge

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon 中的事件总线目标 EventBridge

目标是一种资源或端点,当事件与为规则定义的事件模式相匹配时,它会将事件 EventBridge 发送到该资源或端点。规则会处理事件数据,并将相关信息发送给目标。要将事件数据传送到目标, EventBridge 需要访问目标资源的权限。您最多可以为每条规则定义五个目标。

当您将目标添加到规则,之后该规则很快运行,可能不会立即调用新的或更新的目标。请稍等片刻,以便更改生效。

EventBridge控制台中提供事件总线目标

您可以在 EventBridge 控制台中为规则配置以下目标类型:

目标参数

有些目标不会将事件负载中的信息发送给目标,而是将事件视为调用特定 API 的触发器。 EventBridge 使用 Targe t 参数来确定该目标会发生什么。这些功能包括:

  • API 目标

    发送到 API 目标的数据必须与 API 的结构相匹配。使用 InputTransformer 对象可确保数据结构正确无误。如果要包含原始事件有效载荷,请在 InputTransformer 中引用它。

  • API Gateway

    发送到 API Gateway 的数据必须与 API 的结构相匹配。使用 InputTransformer 对象可确保数据结构正确无误。如果要包含原始事件有效载荷,请在 InputTransformer 中引用它。

  • 亚马逊 EC2 Image Builder

  • Amazon Redshift 数据 API 集群

    使用 RedshiftDataParameters

  • Amazon SageMaker 运行时模型构建管道

    使用 SageMakerPipelineParameters

  • 亚马逊 SQS 博览会和 FIFO 队列

    使用 SqsParameters 指定要用作目标的消息组。

注意

EventBridge 不支持所有 JSON Path 语法并在运行时对其进行评估。支持的语法包括:

  • 点表示法(例如 $.detail

  • 短划线

  • 下划线

  • 字母数字字符

  • 数组索引

  • 通配符 (*)

动态路径参数

动态路径参数允许您在运行时使用 JSON 路径语法来引用事件数据,而不是静态值。

您可以使用带有目标参数的动态 JSON 路径语法来指定 JSON 路径而不是静态值(例如$.detail.state)。

要求

整个值必须是 JSON 路径,而不仅仅是其中的一部分。例如:

  • ✓ 正确:RedshiftParameters.Sql可以 $.detail.state

  • ✗ 不正确:RedshiftParameters.Sql不能 "SELECT * FROM $.detail.state"

EventBridge 在运行时将这些路径替换为来自指定路径的事件负载的数据。

限制

动态路径参数不能引用输入转换中的新值或转换后的值。JSON 路径语法与输入转换语法相同。有关更多信息,请参阅 Amazon EventBridge 输入转换

支持的参数

你可以对这些参数的所有字符串、非枚举字段使用动态语法:

Permissions

要对您拥有的资源进行 API 调用, EventBridge 需要适当的权限。使用 EventBridge控制台或通过在中设置RoleARN参数来指定 IAM 执行角色PutTargets

例如,以下策略定义了向 Amazon SQS 队列发送消息的权限:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource": [ "arn:aws:sqs:us-east-1:111122223333:sqs-queue-name" ] } ] }

以下信任策略允许代 EventBridge 入该角色:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

您可以使用已配置的 IAM 授权调用 API Gateway 端点,但如果您尚未配置授权,该角色是可选的。有关更多信息,请参阅 亚马逊 EventBridge 和 AWS Identity and Access Management

如果另一账户在同一区域中,并且已授予您权限,您可以向该账户发送事件。

有关更多信息,请参阅 在 Amazon AWS 账户之间发送和接收事件 EventBridge

如果您的目标(例如 Amazon SQS 队列)使用 AWS Key Management Service (AWS KMS) 加密,则必须在 KMS 密钥策略中包含以下部分:

{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

AWS Batch 任务队列作为目标

某些参数 AWS Batch submitJob可以通过进行配置BatchParameters

其他参数可以在事件负载中指定。如果事件负载(通过或通过 InputTransformers)包含以下密钥,则它们将被映射到submitJob请求参数

  • ContainerOverrides: containerOverrides

    注意

    仅包括命令、环境、内存和 vCPU

  • DependsOn: dependsOn

    注意

    仅包括 jobId

  • Parameters: parameters

CloudWatch 将组记录为目标

如果您不使用InputTransformer带有 CloudWatch Logs 目标的,则事件负载将用作日志消息,将事件的源用作时间戳。如果您确实使用了 InputTransformer,则模板必须是:

{"timestamp":<timestamp>,"message":<message>}

EventBridge 对发送到日志流的条目进行批处理;因此, EventBridge 可能会将单个或多个事件传送到日志流,具体取决于流量。

CodeBuild 以项目为目标

EventBridge 支持将标准版和批量版作为目标。

如果在将源事件传送到 CodeBuild 目标之前,使用输入转换器对源事件进行整形以匹配StartBuildRequest结构,则默认情况下,参数将以 1 比 1 的比codeBuild.StartBuild分映射并传递到。

codeBuild.StartBuildBatch改为将参数传递给,请转换源事件以匹配StartBuildBatchRequest结构,然后将以下 key/value 一对添加到已转换事件的根中:

"buildType": "BATCH"

作为目标的 Amazon ECS 任务

如果您使用InputTransformers将输入事件塑造成目标以匹配 Amazon ECS RunTask TaskOverride结构,则参数将以 1 比 1 的比分映射并传递到。ecs.RunTask

作为目标的 Incident Manager 响应计划

如果匹配的事件来自 CloudWatch 警报,则警报状态更改详细信息将填充到事件管理器 StartIncidentRequest 呼叫的触发器详细信息中。

作为目标的 Amazon SQS 队列

EventBridge 不支持使用使用加密的 Amazon SQS 队列。 AWS 拥有的密钥这包括目标,以及指定为目标死信队列的 Amazon SQS 队列。有关更多信息 AWS 拥有的密钥,请参阅《AWS Key Management Service 开发者指南》中的AWS 自有密钥