本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊的事件总线目标 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 人工智能管道
-
亚马逊 SNS 话题
-
Step Functions 状态机(异步)
-
Systems Manager Automation
-
系统经理 OpsItem
-
Systems Manager 运行命令
目标参数
有些目标不会将事件负载中的信息发送给目标,而是将事件视为调用特定 API 的触发器。 EventBridge 使用 Target 参数来确定该目标会发生什么。这些功能包括:
-
API 目标
发送到 API 目标的数据必须与 API 的结构相匹配。使用
InputTransformer对象可确保数据结构正确无误。如果要包含原始事件有效载荷,请在InputTransformer中引用它。 -
API Gateway
发送到 API Gateway 的数据必须与 API 的结构相匹配。使用
InputTransformer对象可确保数据结构正确无误。如果要包含原始事件有效载荷,请在InputTransformer中引用它。 -
Amazon EC2 Image Builder
-
Amazon Redshift 数据 API 集群
-
亚马逊 SageMaker 运行时模型构建管道
-
亚马逊 SQS 公平和 FIFO 队列
使用
SqsParameters指定要用作目标的消息组。 -
Systems Manager 运行命令
用于
RunCommandParameters指定 SSM 文档和目标实例。有关更多信息,请参阅系统管理器以目标身份运行命令。
注意
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。
如果另一账户在同一区域中,并且已授予您权限,您可以向该账户发送事件。
有关更多信息,请参阅 在两者之间发送和接收事件 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 将群组记录为目标
如果您不将与 CloudWatch 日志目标InputTransformer一起使用,则事件负载将用作日志消息,将事件的源用作时间戳。如果您确实使用 InputTransformer,则模板必须是:
{"timestamp":<timestamp>,"message":<message>}
EventBridge 批处理发送到日志流的条目;因此, EventBridge 可能会将单个或多个事件传送到日志流,具体取决于流量。
CodeBuild 以项目为目标
EventBridge 支持将标准和批量构建作为目标。
如果您在将源事件传送到 CodeBuild 目标之前使用输入转换器来调整源事件以匹配其StartBuildRequest结构,则默认情况下,参数将codeBuild.StartBuild按一对一映射并传递到。
要codeBuild.StartBuildBatch改为将参数传递给,请转换源事件以匹配StartBuildBatchRequest结构,并将以下 key/value 对添加到转换后事件的根中:
"buildType": "BATCH"
作为目标的 Amazon ECS 任务
如果您使用InputTransformers调整目标的输入事件以匹配 Amazon ECS RunTask TaskOverride 结构,则参数将按一对一映射并传递到。ecs.RunTask
作为目标的 Incident Manager 响应计划
如果匹配的事件来自 CloudWatch 警报,则警报状态更改详细信息将填充到事件管理器 StartIncidentRequest 呼叫的触发器详细信息中。
系统管理器将命令作为目标运行
当您将系统管理器运行命令指定为目标时,将代表您 EventBridge 调用 SendCommand API。使用配置目标 RunCommandParameters,它指定要运行的 SSM 文档以及目标实例或标签。
RunCommandParameters包含以下字段:
-
RunCommandTargets—(必需)指定目标实例的键值对列表。将Keyset tInstanceIdso 用于实例 ID 列表,或Key将设置为 wittag:h to 设置为按标签定位实例。您可以指定 1 到 5 个运行命令目标。tag-name
要指定要运行哪个 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字段用于将文档名称和参数传递给系统管理器运行命令。这不同于InputTransformer转换事件负载的。使用 Systems Manager 运行命令作为目标时,请在中设置文档参数Input并在中指定目标实例RunCommandParameters。
作为目标的 Amazon SQS 队列
EventBridge 不支持使用使用加密的 Amazon SQS 队列。 AWS 拥有的密钥这包括目标,以及指定为目标死信队列的 Amazon SQS 队列。有关更多信息 AWS 拥有的密钥,请参阅《AWS Key Management Service 开发者指南》中的AWS 自有密钥。