本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon 中的事件总线目标 EventBridge
目标是一种资源或端点,当事件与为规则定义的事件模式匹配时,它会向其 EventBridge 发送事件。规则会处理事件数据,并将相关信息发送给目标。要将事件数据传送到目标, EventBridge 需要访问目标资源的权限。您最多可以为每条规则定义五个目标。
当您将目标添加到规则,之后该规则很快运行,可能不会立即调用新的或更新的目标。请稍等片刻,以便更改生效。
EventBridge 控制台中提供事件总线目标
您可以在 EventBridge 控制台中为规则配置以下目标类型:
API 目标
API 目标属于 HTTPS 端点,您可以将其作为事件总线规则的目标进行调用。当您将 API 目标指定为规则目标时,会为任何与规则中指定的事件模式匹配的事件 EventBridge 调用 HTTPS 终端节点,然后随请求传送事件信息。有关更多信息,请参阅 API 目标。
事件总线
您可以将其他事件总线指定为规则的目标。这包括相同或不同 AWS 账户中的事件总线。
AWS 服务
您可以将事件 EventBridge 发送到多个 AWS 服务资源。这些方法包括:
-
CodePipeline
-
Amazon EBS
CreateSnapshotAPI 调用 -
EC2 Image Builder
-
EC2
RebootInstancesAPI 调用 -
EC2
StopInstancesAPI 调用 -
EC2
TerminateInstancesAPI 调用 -
Firehose 传输流
-
Glue 工作流
-
Inspector 评估模板
-
Kinesis 流
-
Lambda 函数(异步)
-
SageMaker AI 管道
-
亚马逊 SNS 主题
-
Step Functions 状态机(异步)
-
Systems Manager Automation
-
Systems Manager OpsItem
-
Systems Manager 运行命令
目标参数
有些目标不会将事件负载中的信息发送给目标,而是将事件视为调用特定 API 的触发器。 EventBridge 使用 Targe t 参数来确定该目标会发生什么。这些功能包括:
-
API 目标
发送到 API 目标的数据必须与 API 的结构相匹配。使用
InputTransformer对象可确保数据结构正确无误。如果要包含原始事件有效载荷,请在InputTransformer中引用它。 -
API Gateway
发送到 API Gateway 的数据必须与 API 的结构相匹配。使用
InputTransformer对象可确保数据结构正确无误。如果要包含原始事件有效载荷,请在InputTransformer中引用它。 -
Amazon EC2 Image Builder
-
Amazon Redshift 数据 API 集群
-
Amazon SageMaker 运行时模型构建管道
-
亚马逊 SQS 博览会和 FIFO 队列
使用
SqsParameters指定要用作目标的消息组。 -
Systems Manager 运行命令
用于
RunCommandParameters指定 SSM 文档和目标实例。有关更多信息,请参阅 Systems Manager 以目标方式运行命令。
注意
EventBridge 不支持所有 JSON 路径语法并在运行时对其进行评估。支持的语法包括:
点表示法(例如
$.detail)短划线
下划线
字母数字字符
数组索引
通配符 (*)
向前斜杠
动态路径参数
动态路径参数允许您在运行时使用 JSON 路径语法来引用事件数据,而不是静态值。
您可以使用带有目标参数的动态 JSON 路径语法来指定 JSON 路径而不是静态值(例如$.detail.state)。
要求
整个值必须是 JSON 路径,而不仅仅是其中的一部分。例如:
-
✓ 正确:
RedshiftParameters.Sql可以$.detail.state -
✗ 不正确:
RedshiftParameters.Sql不能"SELECT * FROM $.detail.state"
EventBridge 在运行时将这些路径替换为来自指定路径的事件负载的数据。
限制
动态路径参数不能引用输入转换中的新值或转换后的值。JSON 路径语法与输入转换语法相同。有关更多信息,请参阅 Amazon EventBridge 输入转换。
支持的参数
你可以对这些参数的所有字符串、非枚举字段使用动态语法:
-
HttpParameters(HeaderParameters键除外)
Permissions
要对您拥有的资源进行 API 调用, EventBridge 需要适当的权限。使用 EventBridge控制台或通过在中设置RoleARN参数来指定 IAM 执行角色PutTargets。
例如,以下策略定义了向 Amazon SQS 队列发送消息的权限:
以下信任策略允许代 EventBridge 入该角色:
您可以使用已配置的 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 呼叫的触发器详细信息中。
Systems Manager 将命令作为目标运行
当你将 Systems Manager Run Command 指定为目标时,会代表你 EventBridge 调用 SendCommandAPI。使用配置目标 RunCommandParameters,它指定要运行的 SSM 文档以及目标实例或标签。
RunCommandParameters包含以下字段:
-
RunCommandTargets—(必需)指定目标实例的键值对列表。Key将 set to 用于实例列表 IDs,或者将Key设置为 wtag:ith 标签值按标签来定位实例。tag-nameInstanceIds您可以指定 1 到 5 个运行命令目标。
要指定要运行的 SSM 文档并向其传递参数,请使用Target对象上的Input字段。该Input值必须是具有以下结构的 JSON 对象:
{
"DocumentName": "document-name",
"DocumentVersion": "version",
"Parameters": {
"parameter-key": ["parameter-value"]
}
}
其中:
-
DocumentName— 要运行的 SSM 文档的名称或 ARN。 -
DocumentVersion—(可选)文档的版本。如果省略,则使用默认版本。 -
Parameters—(可选)参数名称到值数组的映射,与 SSM 文档中定义的参数相匹配。
例如,以下 AWS CLI 命令创建一条规则,当 EventBridge 事件匹配时,该规则会在特定实例上运行AWS-RunShellScript文档:
aws events put-targets --rule "my-rule" --targets '[{ "Id": "ssm-target-1", "Arn": "arn:aws:ssm:region:account-id:document/AWS-RunShellScript", "RoleArn": "arn:aws:iam::account-id:role/EventBridgeSSMRole", "Input": "{\\"Parameters\\":{\\"commands\\":[\\"echo Hello from EventBridge\\"]}}", "RunCommandParameters": { "RunCommandTargets": [{ "Key": "InstanceIds", "Values": ["i-0123456789abcdef0"] }] } }]'
注意
Target对象上的Input字段用于将文档名称和参数传递给 Systems Manager 运行命令。这与转换事件负载的不同。InputTransformer使用 Systems Manager 运行命令作为目标时,请在中设置文档参数Input并在中指定目标实例RunCommandParameters。
作为目标的 Amazon SQS 队列
EventBridge 不支持使用使用加密的 Amazon SQS 队列。 AWS 拥有的密钥这包括目标,以及指定为目标死信队列的 Amazon SQS 队列。有关更多信息 AWS 拥有的密钥,请参阅《AWS Key Management Service 开发者指南》中的AWS 自有密钥。