

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

# Amazon 中的事件总线目标 EventBridge
<a name="eb-targets"></a>

*目标*是一种资源或端点，当[事件](eb-events.md)与为[规则](eb-rules.md)定义的事件模式匹配时，它会向其 EventBridge 发送事件。**规则会处理[事件](eb-events.md)数据，并将相关信息发送给目标。要将事件数据传送到目标， EventBridge 需要访问目标资源的权限。您最多可以为每条规则定义五个目标。

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

## EventBridge 控制台中提供事件总线目标
<a name="eb-console-targets"></a>

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

  API 目标属于 HTTPS 端点，您可以将其作为事件总线规则的目标进行调用。当您将 API 目标指定为规则目标时，会为任何与规则中指定的事件模式匹配的事件 EventBridge 调用 HTTPS 终端节点，然后随请求传送事件信息。有关更多信息，请参阅 [API 目标](eb-api-destinations.md)。
+ 事件总线

  您可以将其他事件总线指定为规则的目标。这包括相同或不同 AWS 账户中的事件总线。
  + [作为目标的跨账户事件总线](eb-cross-account.md)
  + [作为目标的同账户事件总线](eb-bus-to-bus.md)
+ AWS 服务

  您可以将事件 EventBridge 发送到多个 AWS 服务资源。这些方法包括：
  + [API Gateway](eb-api-gateway-target.md)
  + [AWS AppSync](target-appsync.md)
  + [批处理作业队列](#targets-specifics-batch)
  + [CloudWatch 日志组](#targets-specifics-cwl)
  + [CodeBuild 项目](#targets-specifics-codebuild)
  + CodePipeline
  + Amazon EBS `CreateSnapshot` API 调用
  + EC2 Image Builder
  + EC2 `RebootInstances` API 调用
  + EC2 `StopInstances` API 调用
  + EC2 `TerminateInstances` API 调用
  + [ECS 任务](#targets-specifics-ecs-task)
  + Firehose 传输流
  + Glue 工作流
  + [Incident Manager 响应计划](https://docs.aws.amazon.com//incident-manager/latest/userguide/incident-creation.html#incident-tracking-auto-eventbridge)
  + Inspector 评估模板
  + Kinesis 流
  + Lambda 函数（异步）
  + [Amazon Redshift 集群数据 API 查询](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-calling-event-bridge.html) 
  + [Amazon Redshift Serverless 工作组数据 API 查询](https://docs.aws.amazon.com/redshift/latest/mgmt/data-api-calling-event-bridge.html)
  + SageMaker AI 管道
  + 亚马逊 SNS 主题
  + [亚马逊 SQS 标准队列、公平队列和 FIFO 队列](#targets-specifics-sqs)
  + Step Functions 状态机（异步）
  + Systems Manager Automation
  + Systems Manager OpsItem
  + Systems Manager 运行命令

## 目标参数
<a name="targets-specific-parms"></a>

有些目标不会将事件负载中的信息发送给目标，而是将事件视为调用特定 API 的触发器。 EventBridge 使用 Targe [t](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Target.html) 参数来确定该目标会发生什么。这些功能包括：
+ API 目标

  发送到 API 目标的数据必须与 API 的结构相匹配。使用 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html) 对象可确保数据结构正确无误。如果要包含原始事件有效载荷，请在 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html) 中引用它。
+ API Gateway 

  发送到 API Gateway 的数据必须与 API 的结构相匹配。使用 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html) 对象可确保数据结构正确无误。如果要包含原始事件有效载荷，请在 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html) 中引用它。
+ Amazon EC2 Image Builder
+ Amazon Redshift 数据 API 集群

  使用 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RedshiftDataParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RedshiftDataParameters.html)。
+ Amazon SageMaker 运行时模型构建管道

  使用 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SageMakerPipelineParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SageMakerPipelineParameters.html)。
+ 亚马逊 SQS 博览会和 FIFO 队列

  使用 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SqsParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SqsParameters.html) 指定要用作目标的消息组。
+ Systems Manager 运行命令

  用于[https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RunCommandParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RunCommandParameters.html)指定 SSM 文档和目标实例。有关更多信息，请参阅 [Systems Manager 以目标方式运行命令](#targets-specifics-ssm-run-command)。

**注意**  
EventBridge 不支持所有 JSON 路径语法并在运行时对其进行评估。支持的语法包括：  
点表示法（例如 `$.detail`）
短划线
下划线
字母数字字符
数组索引
通配符 (\$1)
向前斜杠

### 动态路径参数
<a name="dynamic-path-parameters"></a>

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

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

#### 要求
<a name="requirements"></a>

整个值必须是 JSON 路径，而不仅仅是其中的一部分。例如：
+ ✓ 正确：`RedshiftParameters.Sql`可以 `$.detail.state`
+ ✗ 不正确：`RedshiftParameters.Sql`不能 `"SELECT * FROM $.detail.state"`

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

#### 限制
<a name="limitations"></a>

动态路径参数不能引用输入转换中的新值或转换后的值。JSON 路径语法与输入转换语法相同。有关更多信息，请参阅 [Amazon EventBridge 输入转换](eb-transform-target-input.md)。

#### 支持的参数
<a name="supported-parameters"></a>

你可以对这些参数的所有字符串、非枚举字段使用动态语法：
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EcsParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EcsParameters.html)
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_HttpParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_HttpParameters.html)（`HeaderParameters` 键除外）
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RedshiftDataParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RedshiftDataParameters.html)
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SageMakerPipelineParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SageMakerPipelineParameters.html)
+ [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SqsParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_SqsParameters.html)

## Permissions
<a name="targets-permissions"></a>

要对您拥有的资源进行 API 调用， EventBridge 需要适当的权限。[使用 EventBridge控制台或通过在中](eb-create-rule-wizard.md#eb-create-rule-target)设置`RoleARN`参数来指定 IAM 执行角色[https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutTargets.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutTargets.html)。

例如，以下策略定义了向 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](eb-iam.md)。

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

有关更多信息，请参阅 [在 Amazon AWS 账户之间发送和接收事件 EventBridge](eb-cross-account.md)。

如果您的目标（例如 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 任务队列作为目标
<a name="targets-specifics-batch"></a>

某些参数 AWS Batch `submitJob`可以通过进行配置[BatchParameters](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_BatchParameters.html)。

其他参数可以在事件负载中指定。如果事件负载（通过或通过 [InputTransformers](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html)）包含以下密钥，则它们将被映射到`submitJob`[请求参数](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html#API_SubmitJob_RequestSyntax)：
+ `ContainerOverrides: containerOverrides`
**注意**  
仅包括命令、环境、内存和 vCPU
+ `DependsOn: dependsOn`
**注意**  
仅包括 jobId
+ `Parameters: parameters`

## CloudWatch 将组记录为目标
<a name="targets-specifics-cwl"></a>

如果您不使用[InputTransformer](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html)带有 CloudWatch Logs 目标的，则事件负载将用作日志消息，将事件的源用作时间戳。如果您确实使用了 InputTransformer，则模板必须是：

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

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

## CodeBuild 以项目为目标
<a name="targets-specifics-codebuild"></a>

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

如果在将源事件传送到 CodeBuild 目标之前，使用[输入转换器](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html)对源事件进行整形以匹配[StartBuildRequest](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#API_StartBuild_RequestSyntax)结构，则默认情况下，参数将以 1 比 1 的比`codeBuild.StartBuild`分映射并传递到。

要`codeBuild.StartBuildBatch`改为将参数传递给，请转换源事件以匹配[StartBuildBatchRequest](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuildBatch.html#API_StartBuildBatch_RequestSyntax)结构，然后将以下 key/value 一对添加到已转换事件的根中：

`"buildType": "BATCH"`

## 作为目标的 Amazon ECS 任务
<a name="targets-specifics-ecs-task"></a>

如果您使用[InputTransformers](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html)将输入事件塑造成目标以匹配 Amazon ECS RunTask [TaskOverride](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_TaskOverride.html)结构，则参数将以 1 比 1 的比分映射并传递到。`ecs.RunTask`

## 作为目标的 Incident Manager 响应计划
<a name="targets-specifics-incident-manager"></a>

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

## Systems Manager 将命令作为目标运行
<a name="targets-specifics-ssm-run-command"></a>

当你将 Systems Manager Run Command 指定为目标时，会代表你 EventBridge 调用 [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_SendCommand.html)API。使用配置目标 [https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RunCommandParameters.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_RunCommandParameters.html)，它指定要运行的 SSM 文档以及目标实例或标签。

`RunCommandParameters`包含以下字段：
+ `RunCommandTargets`—（必需）指定目标实例的键值对列表。`Key`将 set to 用于实例列表 IDs，或者将`Key`设置为 w `tag:tag-name` ith 标签值按标签来定位实例。`InstanceIds`您可以指定 1 到 5 个运行命令目标。

要指定要运行的 SSM 文档并向其传递参数，请使用[https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Target.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Target.html)对象上的`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 运行命令。这与转换事件负载的不同。[https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html)使用 Systems Manager 运行命令作为目标时，请在中设置文档参数`Input`并在中指定目标实例`RunCommandParameters`。

## 作为目标的 Amazon SQS 队列
<a name="targets-specifics-sqs"></a>

EventBridge 不支持使用使用加密的 Amazon SQS 队列。 AWS 拥有的密钥这包括目标，以及指定为目标死信队列的 Amazon SQS 队列。有关更多信息 AWS 拥有的密钥，请参阅《*AWS Key Management Service 开发者指南》*中的[AWS 自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。

# 亚马逊 API Gateway 以亚马逊规则为目标 EventBridge
<a name="eb-api-gateway-target"></a>

您可以使用 Amazon API Gateway 来创建、发布、维护和监控 APIs。亚马逊 EventBridge支持向 API Gateway 终端节点发送事件。当您将 API Gateway 端点指定为[目标](eb-targets.md)时，发送到该目标的每个[事件](eb-events.md)都将映射一个发送到该端点的请求。

**重要**  
EventBridge 支持使用 API Gateway *边缘优化*和*区域*端点作为目标。目前不支持*私有端点*。要了解端点的更多信息，请参阅 [https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-endpoint-types.html](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-endpoint-types.html)。

可以将 API Gateway 目标用于以下使用场景：
+ 根据第三方事件调用 API Gateway 中托管的客户指定 AWS 的 API。
+ 按计划定期调用端点。

 EventBridge JSON 事件信息将作为 HTTP 请求的正文发送到您的终端节点。您可以在目标的 `HttpParameters` 字段中指定其他请求属性，如下所示：
+ `PathParameterValues` 列出了与您的端点 ARN 中的任何路径变量顺序对应的值，例如 `"arn:aws:execute-api:us-east-1:112233445566:myapi/dev/POST/pets/*/*"`。
+ `QueryStringParameters`表示 EventBridge 附加到被调用端点的查询字符串参数。
+ `HeaderParameters` 定义要添加到请求中的 HTTP 标头。

**注意**  
出于安全考虑，不允许使用以下 HTTP 标头密钥：  
任何以 `X-Amz` 或 `X-Amzn` 为前缀的标头密钥
`Authorization`
`Connection`
`Content-Encoding`
`Content-Length`
`Host`
`Max-Forwards`
`TE`
`Transfer-Encoding`
`Trailer`
`Upgrade`
`Via`
`WWW-Authenticate`
`X-Forwarded-For`

## 动态参数
<a name="eb-targets-apigateway-dynamic"></a>

在调用 API Gateway 目标时，您可以向发送到目标的事件动态添加数据。有关更多信息，请参阅 [目标参数](eb-targets.md#targets-specific-parms)。

## 调用重试
<a name="eb-targets-apigateway-retries"></a>

与所有目标一样， EventBridge 会重试一些失败的调用。对于 API Gateway， EventBridge 重试以 5xx 或 429 HTTP 状态码发送的响应长达 24 小时，并出现[指数级退](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)缩和抖动。之后，在 Amazon 上 EventBridge 发布一个`FailedInvocations`指标 CloudWatch。 EventBridge 不会重试其他 4xx HTTP 错误。

## Timeout
<a name="eb-targets-apigateway-timeout"></a>

EventBridge 规则 API Gateway 请求的最大客户端执行超时时间必须为 5 秒。如果 API Gateway 的响应 EventBridge 时间超过 5 秒，则会超时请求然后重试。

EventBridge Pipes API Gateway 请求的最大超时时间为 29 秒，这是 API Gateway 的最大超时值。

# AWS AppSync 亚马逊规则的目标 EventBridge
<a name="target-appsync"></a>

AWS AppSync 使开发人员能够使用安全、无服务器和高性能的 GraphQL 将他们的应用程序和服务连接到数据和事件。 Pub/Sub APIs借助 AWS AppSync，您可以通过 GraphQL 突变将实时数据更新发布到您的应用程序。 EventBridge 支持为匹配的事件调用有效的 GraphQL 突变操作。当你将 AWS AppSync API 突变指定为目标时，会通过突变操作 AWS AppSync 处理事件，然后突变操作可以触发与该突变相关的订阅。

**注意**  
EventBridge 支持 AWS AppSync 公共 GraphQL APIs。 EventBridge 目前不支持 AWS AppSync 私人 APIs。

您可以将 AWS AppSync GraphQL API 目标用于以下用例：
+ 推送、转换事件数据以及将其存储到您配置的数据源中。
+ 向连接的应用程序客户端发送实时通知。

**注意**  
AWS AppSync 目标仅支持 APIs 使用[`AWS_IAM`授权](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html#aws-iam-authorization)类型调用 AWS AppSync GraphQL。

*有关 AWS AppSync GraphQL 的更多信息 APIs，请参阅《开发者指南》中的 G [raphQL 和 AWS AppSync 架构](https://docs.aws.amazon.com/appsync/latest/devguide/graphql-overview.html)。AWS AppSync *

**使用控制台为 EventBridge 规则指定 AWS AppSync 目标**

1. [创建或编辑规则。](eb-create-rule-visual.md)

1. 在**目标**下，通过依次选择 **AWS 服务**和 **AWS AppSync** 来[指定目标](eb-create-rule-wizard.md#eb-create-rule-target)。

1. 指定要解析和执行的突变操作以及选择集。
   + 选择 AWS AppSync API，然后选择要调用的 GraphQL API 突变。
   + 在**配置参数和选择集**下，选择使用键值映射或输入转换器创建选择集。

------
#### [ Key-value mapping ]

     要使用键值映射来创建选择集，请执行以下操作：
     + 为 API 参数指定变量。每个变量可以是静态值，也可以是事件负载的动态 JSON 路径表达式。
     + 在**选择集**下，选择要包含在响应中的变量。

------
#### [ Input transformer ]

     要使用输入转换器创建选择集，请执行以下操作：
     + 指定用于定义要使用的变量的输入路径。
     + 指定输入模板来定义要传递给目标的信息并为其设置格式。

     有关更多信息，请参阅 [在中创建规则时配置输入变压器 EventBridge](eb-transform-input-rule.md)。

------

1. 对于**执行角色**，选择是创建新的角色还是使用现有角色。

1. 完成规则的创建或编辑。

## 示例：Amazon 的 AWS AppSync 目标 EventBridge
<a name="target-appsync-walkthrough"></a>

在以下示例中，我们将介绍如何为 EventBridge 规则指定 AWS AppSync 目标，包括定义输入转换以格式化要交付的事件。

假设你有一个 AWS AppSync GraphQL API`Ec2EventAPI`，由以下架构定义：

```
type Event {
    id: ID!
    statusCode: String
    instanceId: String
}

type Mutation {
    pushEvent(id: ID!, statusCode: String!, instanceId: String): Event
}

type Query {
    listEvents: [Event]
}

type Subscription {
    subscribeToEvent(id: ID, statusCode: String, instanceId: String): Event
        @aws_subscribe(mutations: ["pushEvent"])
}
```

使用此 API 的应用程序客户端可以订阅由 `pushEvent` 突变触发的 `subscribeToEvent` 订阅。

你可以创建一个带有通过`pushEvent`突变向 AppSync API 发送事件的目标的 EventBridge 规则。当调用突变时，任何订阅的客户端都将收到该事件。

要将此 API 指定为 EventBridge 规则的目标，您需要执行以下操作：

1. 将规则目标的 Amazon 资源名称（ARN）设置为 `Ec2EventAPI` API 的 GraphQL 端点 ARN。

1. 将突变 GraphQL 操作指定为目标参数：

   ```
   mutation CreatePushEvent($id: ID!, $statusCode: String, $instanceId: String) {
     pushEvent(id: $input, statusCode: $statusCode, instanceId: $instanceId) {
       id
       statusCode
       instanceId
     }
   }
   ```

   您的突变选择集必须包含您希望在 GraphQL 订阅中订阅的所有字段。

1. 配置输入转换器以指定在操作中如何使用来自匹配事件的数据。

   假设您选择了 `“EC2 Instance Launch Successful”` 示例事件：

   ```
   {
     "version": "0",
     "id": "3e3c153a-8339-4e30-8c35-687ebef853fe",
     "detail-type": "EC2 Instance Launch Successful",
     "source": "aws.autoscaling",
     "account": "123456789012",
     "time": "2015-11-11T21:31:47Z",
     "region": "us-east-1",
     "resources": ["arn:aws:autoscaling:us-east-1:123456789012:autoScalingGroup:eb56d16b-bbf0-401d-b893-d5978ed4a025:autoScalingGroupName/sampleLuanchSucASG", "arn:aws:ec2:us-east-1:123456789012:instance/i-b188560f"],
     "detail": {
       "StatusCode": "InProgress",
       "AutoScalingGroupName": "sampleLuanchSucASG",
       "ActivityId": "9cabb81f-42de-417d-8aa7-ce16bf026590",
       "Details": {
         "Availability Zone": "us-east-1b",
         "Subnet ID": "subnet-95bfcebe"
       },
       "RequestId": "9cabb81f-42de-417d-8aa7-ce16bf026590",
       "EndTime": "2015-11-11T21:31:47.208Z",
       "EC2InstanceId": "i-b188560f",
       "StartTime": "2015-11-11T21:31:13.671Z",
       "Cause": "At 2015-11-11T21:31:10Z a user request created an AutoScalingGroup changing the desired capacity from 0 to 1.  At 2015-11-11T21:31:11Z an instance was started in response to a difference between desired and actual capacity, increasing the capacity from 0 to 1."
     }
   }
   ```

   您可以使用目标输入转换器的输入路径，定义以下变量供模板使用：

   ```
   {
     "id": "$.id",
     "statusCode": "$.detail.StatusCode",
     "EC2InstanceId": "$.detail.EC2InstanceId"
   }
   ```

   编写输入转换器模板以定义 EventBridge 传递给 AWS AppSync 突变操作的变量。模板的计算结果必须为 JSON。根据我们的输入路径，您可以编写以下模板：

   ```
   {
     "id": <id>,
     "statusCode": <statusCode>,
     "instanceId": <EC2InstanceId>
   }
   ```

# 将事件发送到另一个账户中的某项 AWS 服务 EventBridge
<a name="eb-service-cross-account"></a>

EventBridge 可以将事件从一个 AWS 账户中的事件总线发送到另一个账户中支持的 AWS 服务，从而简化事件驱动解决方案的架构并减少延迟。

例如，假设您有一组托管在多个账户中的事件总线，您需要将与安全相关的事件发送到集中式账户中的一个 Amazon SQS 队列，以进行进一步的异步处理和分析。

EventBridge 支持向同一地区的跨账户目标发送事件。

## 受支持的服务
<a name="eb-service-cross-account-services"></a>

EventBridge 支持向其他 AWS 账户中的以下目标发送事件：
+ Amazon API Gateway APIs
+ Amazon Kinesis Data Streams 直播
+ Lambda 函数
+ Amazon SNS 主题
+ Amazon SQS 队列

有关定价，请参阅 [Amazon EventBridge 定价](https://aws.amazon.com/eventbridge/pricing/)。

## Permissions
<a name="eb-service-cross-account-permissions"></a>

启用对作为目标的 AWS 服务的跨账户事件交付的访问权限涉及以下步骤：
+ 指定执行角色
+ 将资源策略附加到目标

### 指定执行角色
<a name="eb-service-cross-account-permissions-role"></a>

指定在触发 EventBridge 规则时向目标发送事件时使用的执行角色。

此执行角色必须与事件总线位于同一个账户中。 EventBridge 尝试调用目标时担任此角色，并且会应用影响此帐户的所有服务控制策略 (SCPs)。

SCPs 是一种组织策略，可用于管理组织中的权限。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。

例如，以下策略允许 EventBridge 服务担任执行角色：

------
#### [ JSON ]

****  

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

------

此外，以下策略允许该角色向 Amazon SQS 队列发送消息：

------
#### [ JSON ]

****  

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

------

对于使用的账户 AWS Organizations，您可以应用 SCP 来防止调用不属于您的组织的资源，如以下示例所示：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
          {
            "Action": [
                "*"
            ],
            "Resource": "*",
            "Effect": "Deny",
            "Condition": {
                "StringNotEquals": {
                    "aws:ResourceOrgID": "o-1234567890"
                }
            }
        }
    ]
}
```

------

**注意**  
对于事件总线以外的跨账户目标，不支持从与事件总线所属账户不同的账户调用 `PutTarget`，即便提供了该调用账户中的执行角色。

### 将资源访问策略附加到目标
<a name="eb-service-cross-account-permissions-policy"></a>

可以接收跨账户事件的 AWS 服务支持基于 IAM 资源的策略。这意味着，您可以将资源访问策略附加到目标，从而明确指定哪些账户有权访问该目标。

基于我们之前的示例，以下策略允许事件总线账户访问目标账户中的 Amazon SQS 队列：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "SQS:SendMessage"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:sqs:us-east-1:123456789012:queue-name",
      "Principal": {
      "AWS": "123456789012"
     }
    }
  ]
}
```

------

有关更多信息，请参见《AWS Identity and Access Management 用户指南》**中的[基于身份的策略和基于资源的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)。

## 创建向其他账户中的 AWS 服务发送事件的规则
<a name="eb-service-cross-account"></a>

将其他账户中的 AWS 服务指定为目标是创建事件总线规则的一部分。

**使用控制台创建向不同 AWS 账户中的 AWS 服务发送事件的规则**

1. 遵循[在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)过程中的步骤。

1. 在[选择目标](eb-create-rule-wizard.md#eb-create-rule-target)步骤中，当系统提示您选择目标类型时：

   1. 选择**AWS 服务**。

   1. 选择支持跨账户目标的 AWS 服务。

      有关更多信息，请参阅 [受支持的服务](#eb-service-cross-account-services)。

   1. 对于**目标位置**，选择**其他 AWS 账户中的目标**。

   1. 输入要将事件发送到的目标资源的 ARN。

   1. 从下拉列表中选择要使用的执行角色的名称。

   1. 为所选服务提供要求补充的其他相关信息。显示的字段因所选服务而异。

1. 根据过程步骤，完成规则创建。

# 在 Amazon AWS 账户之间发送和接收事件 EventBridge
<a name="eb-cross-account"></a>

您可以配置 EventBridge 为在 AWS 账户中的[[事件总线](eb-event-bus.md)之间发送和接收事件](eb-events.md)。当您配置 EventBridge 为在账户之间发送或接收事件时，可以指定哪些 AWS 账户可以向您的账户中的事件总线发送事件或从事件总线接收事件。您还可以允许或拒绝事件，它们来自与事件总线关联的特定[规则](eb-rules.md)，或来自特定来源的事件。有关更多信息，请参阅使用 [Amazon EventBridge 资源策略简化跨账户访问](https://aws.amazon.com/blogs//compute/simplifying-cross-account-access-with-amazon-eventbridge-resource-policies/)

**注意**  
如果使用 AWS Organizations，则可以指定组织并向该组织中的所有账户授予访问权限。此外，在向其他账户发送事件时，发送事件总线必须附加 IAM 角色。有关更多信息，请参阅《[AWS Organizations用户指南](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)》中的*什么是AWS Organizations *。

**注意**  
如果您使用 Incident Manager 响应计划作为目标，则在默认情况下，与您的账户共享的所有响应计划都可用。

只要目标区域是支持的[跨](eb-cross-region.md)区域目标区域，您就可以在所有区域的同一区域的账户中的事件总线之间以及不同区域的账户之间发送和接收事件。 AWS 

配置 EventBridge 为向不同账户中的事件总线发送事件或从事件总线接收事件的步骤包括以下内容：
+ 在*接收者*账户上，编辑事件总线上的权限，以允许指定 AWS 账户、组织或所有 AWS 账户向接收者账户发送事件。
+ 在*发送方* 账户中，设置一个或多个将接收方账户的事件总线作为目标的规则。

  如果发送者账户继承了从 AWS 组织发送事件的权限，则发送者账户还必须具有 IAM 角色，其策略使其能够向接收者账户发送事件。如果您使用创建 AWS 管理控制台 以接收者账户中的事件总线为目标的规则，则该角色将自动创建。如果使用 AWS CLI，则必须手动创建角色。
+ 在*接收方* 账户中，设置一个或多个匹配来自发送方账户的事件的规则。

从一个账户发送到另一个账户的事件将作为自定义事件向发送账户收取费用。不向接收账户收费。有关更多信息，请参阅 [Amazon EventBridge 定价](https://aws.amazon.com/eventbridge/pricing/)。

如果接收方账户设置了一条将从发送方账户接收的事件发送到第三个账户的规则，则这些事件不会发送到第三个账户。

如果您在同一个账户中有三个事件总线，并且在第一个事件总线上设置了将事件从第二个事件总线转发到第三个事件总线的规则，则这些事件不会发送到第三个事件总线。

 以下视频介绍了如何在账户之间路由事件：




## 授予权限以允许来自其他 AWS 账户的事件
<a name="eb-receiving-events-from-another-account"></a>

要接收来自其他账户或组织的事件，您必须先编辑将要接收事件的事件总线的权限。默认事件总线接受来自 AWS 服务、其他授权 AWS 账户和`PutEvents`呼叫的事件。需使用附加到事件总线的基于资源的策略来授予或拒绝事件总线的权限。在该策略中，您可以使用账户 ID 向其他 AWS 账户授予权限，也可以向使用 AWS 组织 ID 的组织授予权限。要了解有关事件总线权限的更多信息，包括示例策略，请参阅 [在 Amazon 中使用活动总线的权限 EventBridge](eb-event-bus-perms.md)。

**注意**  
EventBridge 现在要求所有新的跨账户事件总线目标添加 IAM 角色。这仅适用于 2023 年 3 月 2 日之后创建的事件总线目标。在该日期之前创建的没有 IAM 角色的应用程序不受影响。但是，我们建议添加 IAM 角色以授予用户访问其他账户中资源的权限，因为这样可以确保使用服务控制策略 (SCPs) 的组织边界来确定谁可以从您的组织中的账户发送和接收事件。

**重要**  
如果您选择接收来自所有 AWS 账户的事件，请谨慎创建规则，使其仅匹配要从其他账户接收的事件。要创建更安全的规则，请确保每条规则的事件模式都包含一个`Account`字段， IDs其中包含用于接收事件的一个或多个账户的帐户。其事件模式包含“账户”字段的规则与从在 `Account` 字段中未列出的账户发送的事件不匹配。有关更多信息，请参阅 [Amazon 上的活动 EventBridge](eb-events.md)。

## AWS 账户间事件规则
<a name="eb-writing-rules-that-match-events-from-another-account"></a>

如果您的账户设置为接收来自其他 AWS 账户的事件总线的事件，则可以编写与这些事件相匹配的规则。将规则的[事件模式](eb-event-patterns.md)设置为与您从其他账户的事件总线接收的事件相匹配。

除非您在规则的事件模式中指定 `account`，否则您的账户中与您从其他账户事件总结收到的事件进行匹配的任何规则（包括新规则和现有规则）都基于这些事件触发。如果您要从另一账户的事件总线接收事件，并且希望仅对从您自己的账户生成的事件模式触发规则，则必须添加 `account` 并将您自己的账户 ID 指定为规则的事件模式。

如果您将账户设置为在所有 AWS 账户中接受来自活动总线的事件，我们强烈建议您在 AWS 账户中的每 EventBridge 条规则中添加`account`相应规则。这样可以防止您的账户中的规则触发来自未知 AWS 账户的事件。在规则中指定`account`字段时，可以在该字段中指定多个 AWS 账户的账户。 IDs 

要在您已授予权限的 AWS 账户中任何事件总线的匹配事件上触发规则，请不要在规则`account`字段中指定\$1。这样做不会匹配任何事件，因为 \$1 从不显示在事件的 `account` 字段中。相反，只需忽略规则的 `account` 字段即可。

## 创建在 AWS 账户之间发送事件的规则
<a name="eb-create-rule-cross-account-target"></a>

将其他账户中的事件总线指定为目标，是创建规则的一部分。

**使用控制台创建向其他 AWS 账户发送事件的规则**

1. 遵循[在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)过程中的步骤。

1. 在[选择目标](eb-create-rule-wizard.md#eb-create-rule-target)步骤中，当系统提示您选择目标类型时：

   1. 选择**EventBridge 活动总线**。

   1. 选择**不同账户或区域中的事件总线**。

   1. 对于**事件总线作为目标**，请输入要使用的事件总线的 ARN。

1. 根据过程中的步骤，完成规则创建。

# 在 Amazon 的 AWS 区域之间发送和接收事件 EventBridge
<a name="eb-cross-region"></a>

您可以配置 EventBridge 为在 AWS 区域之间发送和接收[事件](eb-events.md)。您还可以允许或拒绝事件，它们来自特定区域、与事件总线关联的特定[规则](eb-rules.md)或特定来源。有关更多信息，请参阅 Ama [zon 引入跨区域事件路由 EventBridge](https://aws.amazon.com/blogs//compute/introducing-cross-region-event-routing-with-amazon-eventbridge/)

 以下视频介绍了使用[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) AWS CloudFormation、和在区域之间路由事件 AWS Serverless Application Model：




## 创建将事件发送到其他 AWS 区域的规则
<a name="eb-create-rule-cross-region-target"></a>

将另一个 AWS 区域的事件总线指定为目标是创建规则的一部分。

**使用控制台创建向其他 AWS 账户发送事件的规则**

1. 遵循[在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)过程中的步骤。

1. 在[选择目标](eb-create-rule-wizard.md#eb-create-rule-target)步骤中，当系统提示您选择目标类型时：

   1. 选择**EventBridge 活动总线**。

   1. 选择**不同账户或区域中的事件总线**。

   1. 对于**事件总线作为目标**，请输入要使用的事件总线的 ARN。

1. 根据过程中的步骤，完成规则创建。

# 在同一账户和亚马逊区域的事件总线之间发送事件 EventBridge
<a name="eb-bus-to-bus"></a>

您可以配置 EventBridge 为在同一 AWS 账户和区域[的事件[总线](eb-event-bus.md)之间发送和接收事件](eb-events.md)。

当您配置 EventBridge 为在事件总线之间发送或接收事件时，您可以在发送*者*事件总线上使用 IAM 角色向*发送者*事件总线授予向*接收器*事件总线发送事件的权限。您可以在*接收方*事件总线上使用[基于资源的](eb-use-resource-based.md)策略，授予*接收方*事件总线权限，接收来自*发送方*事件总线的事件。您还可以允许或拒绝事件，它们来自特定事件总线、与事件总线关联的特定[规则](eb-rules.md)或特定来源。有关事件总线权限的更多信息，包括示例策略，请参阅 [在 Amazon 中使用活动总线的权限 EventBridge](eb-event-bus-perms.md)。

配置 EventBridge 为向您的账户中的事件总线发送事件或在事件总线之间接收事件的步骤包括以下内容：
+ 要使用现有 IAM 角色，您需要向发送方事件总线授予对接收方事件总线的权限，或向接收方事件总线授予对发送方事件总线的权限。
+ 在*发送方* 事件总线中，设置一个或多个规则，将接收方事件总线作为目标并创建 IAM 角色。如需应附加到该角色的策略示例，请参阅[策略示例：向 Amazon 中同一账户中的事件总线发送事件 EventBridge](eb-event-bus-example-policy-same-account.md)。
+ 在*接收方* 事件总线上，编辑权限，允许从另一个事件总线传递事件。
+ 在*接收方* 事件中，设置一个或多个规则，匹配来自发送方事件总线的事件。
**注意**  
EventBridge 无法将从发送者事件总线接收的事件路由到第三条事件总线。

从一条事件总线发送到另一条事件总线的事件，按自定义事件收费。有关更多信息，请参阅 [Amazon EventBridge 定价](https://aws.amazon.com/eventbridge/pricing/)。

## 创建规则，将事件发送到同一 AWS 账户和区域中的不同事件总线
<a name="eb-create-rule-same-account-region-target"></a>

要将事件发送到另一事件总线，您需要创建一个规则，以该事件总线作为目标。将同一 AWS 账户和区域中的事件总线指定为目标是创建规则的一部分。

**使用控制台创建规则，将事件发送到同一 AWS 账户和区域中的不同事件总线**

1. 遵循[在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)过程中的步骤。

1. 在[选择目标](eb-create-rule-wizard.md#eb-create-rule-target)步骤中，当系统提示您选择目标类型时：

   1. 选择**EventBridge 活动总线**。

   1. **在同一个 AWS 账户和地区中选择事件总线**。

   1. 对于**事件总线作为目标**，从下拉列表中选择一个事件总线。

1. 根据过程步骤，完成规则创建。

# 亚马逊 EventBridge 输入转换
<a name="eb-transform-target-input"></a>

在将信息 EventBridge传递给[规则](eb-rules.md)[目标](eb-targets.md)之前，您可以自定义[事件](eb-events.md)中的文本。可以使用控制台或 API 中的输入转换器定义变量，使用 JSON 路径来引用原始事件源中的值。转换后的事件将发送到目标，而不是原始事件。但是，[动态路径参数](eb-targets.md#dynamic-path-parameters)必须引用原始事件，而不是转换后的事件。您最多可以定义 100 个变量，同时从输入中为每个变量分配一个值。然后你可以在*输入模板*中将这些变量用作 < *variable-name* >。

使用输入转换器的教程请参阅[教程：在 EventBridge 中使用输入转换器转换事件](eb-input-transformer-tutorial.md)。

**注意**  
EventBridge 不支持所有 JSON 路径语法并在运行时对其进行评估。支持的语法包括：  
点表示法（例如 `$.detail`）
短划线
下划线
字母数字字符
数组索引
通配符 (\$1)
向前斜杠

**Topics**
+ [预定义变量](#eb-transform-input-predefined)
+ [输入转换示例](#eb-transform-input-examples)
+ [使用 EventBridge API 转换输入](#eb-transform-input-api)
+ [使用转换输入 AWS CloudFormation](#eb-transform-input-cfn)
+ [转换输入的常见问题](#eb-transform-input-issues)
+ [在中创建规则时配置输入变压器 EventBridge](eb-transform-input-rule.md)
+ [使用 EventBridge 沙盒测试目标输入变压器](eb-sandbox-input-trans.md)

## 预定义变量
<a name="eb-transform-input-predefined"></a>

您可以在不定义 JSON 路径的情况下使用预定义的变量。这些变量是保留的，您不能使用这些名称创建变量。
+ ****`aws.events.rule-arn`— 规则的亚马逊资源名称 (ARN)。 EventBridge 
+ ****`aws.events.rule-name`— EventBridge 规则的名称。
+ ****`aws.events.event.ingestion-time`— 接收事件的时间 EventBridge。这是 ISO 8601 时间戳。此变量由生成 EventBridge ，不能被覆盖。
+ ****`aws.events.event` - 作为 JSON 的原始事件负载（不带 `detail` 字段）。只能用作 JSON 字段的值，因为其内容不会被转义。
+ ****`aws.events.event.json` - 作为 JSON 的完整原始事件负载。（带 `detail` 字段）。只能用作 JSON 字段的值，因为其内容不会被转义。

## 输入转换示例
<a name="eb-transform-input-examples"></a>

以下是 Amazon EC2 事件示例。

```
{
  "version": "0",
  "id": "7bf73129-1428-4cd3-a780-95db273d1602",
  "detail-type": "EC2 Instance State-change Notification",
  "source": "aws.ec2",
  "account": "123456789012",
  "time": "2015-11-11T21:29:54Z",
  "region": "us-east-1",
  "resources": [
    "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"
  ],
  "detail": {
    "instance-id": "i-0123456789",
    "state": "RUNNING"
  }
}
```

在控制台中定义规则时，选择**配置输入**下的**输入转换器**选项。此选项显示两个文本框：一个用于 *Input Path (输入路径)* ，一个用于 *Input Template (输入模板)*。

### 输入路径
<a name="eb-transform-target-input-path"></a>

*输入路径* 用于定义变量。使用 JSON 路径来引用事件中的项目，并将这些值存储在变量中。例如，您可以通过在第一个文本框中输入以下内容来创建一个*输入路径*，以引用示例事件中的值。您也可以使用方括号和索引从数组中获取项目。

**注意**  
EventBridge 在运行时替换输入转换器以确保有效的 JSON 输出。因此，请在引用 JSON 路径参数的变量前后加引号，但不要在引用 JSON 对象或数组的变量前后加引号。

```
{
  "timestamp" : "$.time",
  "instance" : "$.detail.instance-id", 
  "state" : "$.detail.state",
  "resource" : "$.resources[0]"
}
```

这些代码会定义四个变量，`<timestamp>`、`<instance>`、`<state>` 和 `<resource>`。您可以在创建*输入模板* 时引用这些变量。

**注意**  
Ama CloudWatch zon Logs 和 SSM 目标不支持在其输入转换器`InputPath`中使用`Input`和。

### 输入模板
<a name="eb-transform-target-input-template"></a>

*输入模板* 是您要传递给目标的信息的模板。您可以创建将字符串或 JSON 传递到目标的模板。使用上一个事件和*输入路径*，以下*输入模板* 示例将事件转换为示例输出，然后再将其路由到目标。


| 说明 | 模板 | Output | 
| --- | --- | --- | 
| 简单字符串 |  <pre>"instance <instance> is in <state>"</pre> |  <pre>"instance i-0123456789 is in RUNNING"</pre>  | 
|  **带转义引号的字符串**  |  <pre>"instance \"<instance>\" is in <state>"</pre> |  <pre>"instance \"i-0123456789\" is in RUNNING"</pre> 请注意，这是 EventBridge 控制台中的行为。 AWS CLI 对斜杠字符进行转义，结果为 `"instance "i-0123456789" is in RUNNING"`。  | 
|  **简单的 JSON**  |  <pre>{<br />  "instance" : <instance>,<br />  "state": <state><br />}</pre> |  <pre>{<br />  "instance" : "i-0123456789",<br />  "state": "RUNNING"<br />}</pre>  | 
|  **带有字符串和变量的 JSON**  |  <pre>{<br /> "instance" : <instance>,<br /> "state": "<state>",<br /> "instanceStatus": "instance \"<instance>\" is in <state>"<br />}</pre>  |  <pre>{<br /> "instance" : "i-0123456789",<br /> "state": "RUNNING",<br /> "instanceStatus": "instance \"i-0123456789\" is in RUNNING"<br />}</pre>  | 
|  **混合变量和静态信息的 JSON**  |  <pre>{<br />  "instance" : <instance>,<br />  "state": [ 9, <state>, true ],<br />  "Transformed" : "Yes"<br />}<br /></pre> |  <pre>{<br />  "instance" : "i-0123456789",<br />  "state": [<br />    9,<br />    "RUNNING",<br />    true<br />  ],<br />  "Transformed" : "Yes"<br />}</pre>  | 
|  **在 JSON 中包含保留变量**  |  <pre>{<br />  "instance" : <instance>,<br />  "state": <state>,<br />  "ruleArn" : <aws.events.rule-arn>,<br />  "ruleName" : <aws.events.rule-name>,<br />  "originalEvent" : <aws.events.event.json><br />}</pre> |  <pre>{<br />  "instance" : "i-0123456789",<br />  "state": "RUNNING",<br />  "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example",<br />  "ruleName" : "example",<br />  "originalEvent" : {<br />    ... // commented for brevity<br />  }<br />}</pre>  | 
|  **在字符串中包含保留变量**  | <pre>"<aws.events.rule-name> triggered"</pre> |  <pre>"example triggered"</pre>  | 
|  **亚马逊 CloudWatch 日志组**  | <pre>{<br />  "timestamp" : <timestamp>,<br />  "message": "instance \"<instance>\" is in <state>"<br />}</pre> |  <pre>{<br />  "timestamp" : 2015-11-11T21:29:54Z,<br />  "message": "instance "i-0123456789" is in RUNNING<br />}</pre>  | 

## 使用 EventBridge API 转换输入
<a name="eb-transform-input-api"></a>

有关使用 EventBridge API 转换输入的信息，请参阅[使用输入转换器从事件中提取数据并将该数据输入到目标](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutTargets.html#API_PutTargets_Example_2)。

## 使用转换输入 AWS CloudFormation
<a name="eb-transform-input-cfn"></a>

有关使用 AWS CloudFormation 转换输入的信息，请参见[AWS::Events::Rule InputTransformer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-inputtransformer.html)。

## 转换输入的常见问题
<a name="eb-transform-input-issues"></a>

以下是转换输入时的一些常见问题 EventBridge：
+  对于字符串，需要引号。
+  为模板创建 JSON 路径时不进行验证。
+  如果您指定一个变量，匹配在事件中不存在的 JSON 路径，则不会创建该变量，并且不会在输出中显示该变量。
+ 像 `aws.events.event.json` 这样的 JSON 属性只能用作 JSON 字段的值，不能在其他字符串中内联。
+  EventBridge 填充目标的*输入*模板时，不会转义输入*路径*提取的值。
+ 如果 JSON 路径引用了 JSON 对象或数组，但变量是在字符串中引用的，则 EventBridge 删除所有内部引号以确保字符串有效。例如，对于`<detail>`指向的变量`$.detail`，“Detail is<detail>” 将导致从对象中 EventBridge 删除引号。

  因此，如果要根据单个 JSON 路径变量输出 JSON 对象，则必须将其作为键。在本示例中，`{"detail": <detail>}`。
+ 表示字符串的变量不需要引号。允许使用它们，但在转换过程中 EventBridge 会自动为字符串变量值添加引号，以确保转换输出是有效的 JSON。 EventBridge 不会为表示 JSON 对象或数组的变量添加引号。不要为表示 JSON 对象或数组的变量添加引号。

  例如，以下输入模板包含的变量表示字符串和 JSON 对象：

  ```
  {
    "ruleArn" : <aws.events.rule-arn>,
    "ruleName" : <aws.events.rule-name>,
    "originalEvent" : <aws.events.event.json>
  }
  ```

  生成带有正确引号的有效 JSON：

  ```
  {
    "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example",
    "ruleName" : "example",
    "originalEvent" : {
      ... // commented for brevity
    }
  }
  ```
+ 对于多行字符串（非 JSON）文本输出，请用双引号将输入模板中的每行单独括起来。

  例如，在将 [Amazon Inspector Finding](https://docs.aws.amazon.com/inspector/latest/user/eventbridge-integration.html#event-finding) 事件与以下事件模式进行匹配：

  ```
  {
    "detail": {
      "severity": ["HIGH"],
      "status": ["ACTIVE"]
    },
    "detail-type": ["Inspector2 Finding"],
    "source": ["inspector2"]
  }
  ```

  并使用以下输入路径：

  ```
  {
    "account": "$.detail.awsAccountId",
    "ami": "$.detail.resources[0].details.awsEc2Instance.imageId",
    "arn": "$.detail.findingArn",
    "description": "$.detail.description",
    "instance": "$.detail.resources[0].id",
    "platform": "$.detail.resources[0].details.awsEc2Instance.platform",
    "region": "$.detail.resources[0].region",
    "severity": "$.detail.severity",
    "time": "$.time",
    "title": "$.detail.title",
    "type": "$.detail.type"
  }
  ```

  您可以使用下面的输入模板来生成多行字符串输出：

  ```
  "<severity> severity finding <title>"
  "Description: <description>"
  "ARN: \"<arn>\""
  "Type: <type>"
  "AWS Account: <account>"
  "Region: <region>"
  "EC2 Instance: <instance>"
  "Platform: <platform>"
  "AMI: <ami>"
  ```

# 在中创建规则时配置输入变压器 EventBridge
<a name="eb-transform-input-rule"></a>

作为创建规则的一部分，您可以指定一个输入转换器，用于 EventBridge 在将匹配事件发送到指定目标之前处理这些事件。您可以为 AWS 服务或 API 目标的目标配置输入转换器。

**创建目标输入转换器，作为规则的一部分**

1. 按[在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)中的步骤操作，创建一条规则。

1. 在**步骤 3 - 选择目标**中，展开**其他设置**。

1. 对于**配置目标输入**，在下拉列表中选择**输入转换器**。

   单击**配置输入转换器**。

   EventBridge 显示**配置输入变压器**对话框。

1. 在**示例事件**部分，选择要测试事件模式的**示例事件类型**。您可以选择 AWS 活动、合作伙伴活动或输入自己的自定义活动。

------
#### [ AWS events ]

   从支持的 AWS 服务发出的事件中进行选择。

   1. 选择 **AWS 事件**。

   1. 在**示例事件**下，选择所需 AWS 的事件。活动按 AWS 服务组织。

      当您选择一个事件时， EventBridge 会填充示例事件。

      例如，如果您选择 **S3 对象已创建**，则 EventBridge 会显示示例 S3 对象已创建事件。

   1. （可选）您也可以选择**复制**，将示例事件复制到设备的剪贴板。

------
#### [ Partner events ]

   从支持的 EventBridge第三方服务（例如 Salesforce）发出的事件中进行选择。

   1. 选择**EventBridge 合作伙伴活动**。

   1. 在**示例事件**下，选择所需合作伙伴事件。事件是按合作伙伴组织的。

      当您选择一个事件时， EventBridge 会填充示例事件。

   1. （可选）您也可以选择**复制**，将示例事件复制到设备的剪贴板。

------
#### [ Enter your own ]

   以 JSON 文本输入您自己的事件。

   1. 选择**输入您自己的**。

   1. EventBridge 使用必需事件属性的模板填充示例事件。

   1. 根据需要编辑示例事件并添加内容。示例事件必须是有效的 JSON。

   1. （可选）您还可以选择以下任何选项：
      + **复制** - 将示例事件复制到设备的剪贴板。
      + **修饰** - 添加换行符、制表符和空格，使 JSON 文本更易于阅读。

------

1. （可选）展开**示例输入路径、模板和输出**部分，查看以下示例：
   + 如何使用 JSON 路径来定义表示事件数据的变量
   + 如何在输入转换器模板中使用这些变量
   +  EventBridge 发送到目标的结果输出

   有关输入转换的更多详细示例，请参阅[输入转换示例](eb-transform-target-input.md#eb-transform-input-examples)。

1. 在**目标输入转换器**部分，定义要在输入模板中使用的任何变量。

   变量使用 JSON 路径引用原始事件源中的值。然后，您可以在输入模板中引用这些变量，以便在 EventBridge 传递到目标的转换事件中包含来自原始源事件的数据。您最多可以定义 100 个变量。输入转换器必须是有效的 JSON。

   例如，假设您选择了 AWS 事件 **S3 Object** Created 作为此输入转换器的示例事件。然后，您可以定义以下变量，在模板中使用：

   ```
   {
     "requester": "$.detail.requester",
     "key": "$.detail.object.key",
     "bucket": "$.detail.bucket.name"
   }
   ```

   （可选）您也可以选择**复制**，将输入转换器复制到设备的剪贴板。

1. 在 “**模板**” 部分中，撰写要用于确定 EventBridge 传递给目标的内容的模板。

   您可以使用 JSON 字符串、静态信息、您定义的变量以及保留变量。有关输入转换的更多详细示例，请参阅[输入转换示例](eb-transform-target-input.md#eb-transform-input-examples)。

   例如，假设您在前一个示例中定义了变量。然后，您可以撰写以下模板，引用这些变量，以及保留变量和静态信息。

   ```
   {
       "message": "<requester> has created the object \"<key>\" in the bucket \"<bucket>\"",
       "RuleName": <aws.events.rule-name>,
       "ruleArn" : <aws.events.rule-arn>,
       "Transformed": "Yes"
   }
   ```

   （可选）您也可以选择**复制**，将模板复制到设备的剪贴板。

1. 要测试您的模板，请选择**生成输出**。

   EventBridge 根据输入模板处理示例事件，并显示在 Output 下生成的转换后的**输出**。这些信息 EventBridge 将代替原始源事件传递给目标。

   上述示例输入模板生成的输出将如下所示：

   ```
   {
       "message": "123456789012 has created the object "example-key" in the bucket "amzn-s3-demo-bucket"",
       "RuleName": rule-name,
       "ruleArn" : arn:aws:events:us-east-1:123456789012:rule/rule-name,
       "Transformed": "Yes"
   }
   ```

   （可选）您也可以选择**复制**，将生成的输出复制到设备的剪贴板。

1. 选择**确认**

1. 按[在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)中的其余步骤操作，创建一条规则。

# 使用 EventBridge 沙盒测试目标输入变压器
<a name="eb-sandbox-input-trans"></a>

在将信息 EventBridge传递给[规则](eb-rules.md)[目标](eb-targets.md)之前，您可以使用输入转换器自定义[事件](eb-events.md)中的文本。

在[创建新规则](eb-create-rule-visual.md)或编辑现有规则时，配置输入转换器通常是指定目标这一大型过程中的一环。但是 EventBridge，使用中的沙盒，您可以快速配置输入变压器并使用示例事件来确认您获得了所需的输出，而无需创建或编辑规则。

有关输入转换的更多信息，请参阅 [亚马逊 EventBridge 输入转换](eb-transform-target-input.md)。

**测试目标输入转换器**

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在**开发人员资源**下，选择**沙盒**，然后在**沙盒**页面上选择**目标输入转换器**选项卡。

1. 在**示例事件**部分，选择要测试事件模式的**示例事件类型**。您可以选择 AWS 活动、合作伙伴活动或输入自己的自定义活动。

------
#### [ AWS events ]

   从支持的 AWS 服务发出的事件中进行选择。

   1. 选择 **AWS 事件**。

   1. 在**示例事件**下，选择所需 AWS 的事件。活动按 AWS 服务组织。

      当您选择一个事件时， EventBridge 会填充示例事件。

      例如，如果您选择 **S3 对象已创建**，则 EventBridge 会显示示例 S3 对象已创建事件。

   1. （可选）您也可以选择**复制**，将示例事件复制到设备的剪贴板。

------
#### [ Partner events ]

   从支持的 EventBridge第三方服务（例如 Salesforce）发出的事件中进行选择。

   1. 选择**EventBridge 合作伙伴活动**。

   1. 在**示例事件**下，选择所需合作伙伴事件。事件是按合作伙伴组织的。

      当您选择一个事件时， EventBridge 会填充示例事件。

   1. （可选）您也可以选择**复制**，将示例事件复制到设备的剪贴板。

------
#### [ Enter your own ]

   以 JSON 文本输入您自己的事件。

   1. 选择**输入您自己的**。

   1. EventBridge 使用必需事件属性的模板填充示例事件。

   1. 根据需要编辑示例事件并添加内容。示例事件必须是有效的 JSON。

   1. （可选）您还可以选择以下任何选项：
      + **复制** - 将示例事件复制到设备的剪贴板。
      + **修饰** - 添加换行符、制表符和空格，使 JSON 文本更易于阅读。

------

1. （可选）展开**示例输入路径、模板和输出**部分，查看以下示例：
   + 如何使用 JSON 路径来定义表示事件数据的变量
   + 如何在输入转换器模板中使用这些变量
   +  EventBridge 发送到目标的结果输出

   有关输入转换的更多详细示例，请参阅[输入转换示例](eb-transform-target-input.md#eb-transform-input-examples)。

1. 在**目标输入转换器**部分，定义要在输入模板中使用的任何变量。

   变量使用 JSON 路径引用原始事件源中的值。然后，您可以在输入模板中引用这些变量，以便在 EventBridge 传递到目标的转换事件中包含来自原始源事件的数据。您最多可以定义 100 个变量。输入转换器必须是有效的 JSON。

   例如，假设您选择了 AWS 事件 **S3 Object** Created 作为此输入转换器的示例事件。然后，您可以定义以下变量，在模板中使用：

   ```
   {
     "requester": "$.detail.requester",
     "key": "$.detail.object.key",
     "bucket": "$.detail.bucket.name"
   }
   ```

   （可选）您也可以选择**复制**，将输入转换器复制到设备的剪贴板。

1. 在 “**模板**” 部分中，撰写要用于确定 EventBridge 传递给目标的内容的模板。

   您可以使用 JSON 字符串、静态信息、您定义的变量以及保留变量。有关输入转换的更多详细示例，请参阅[输入转换示例](eb-transform-target-input.md#eb-transform-input-examples)。

   例如，假设您在前一个示例中定义了变量。然后，您可以撰写以下模板，引用这些变量，以及保留变量和静态信息。

   ```
   {
       "message": "<requester> has created the object \"<key>\" in the bucket \"<bucket>\"",
       "RuleName": <aws.events.rule-name>,
       "ruleArn" : <aws.events.rule-arn>,
       "Transformed": "Yes"
   }
   ```

   （可选）您也可以选择**复制**，将模板复制到设备的剪贴板。

1. 要测试您的模板，请选择**生成输出**。

   EventBridge 根据输入模板处理示例事件，并显示在 Output 下生成的转换后的**输出**。这些信息 EventBridge 将代替原始源事件传递给目标。

   上述示例输入模板生成的输出将如下所示：

   ```
   {
       "message": "123456789012 has created the object "example-key" in the bucket "amzn-s3-demo-bucket"",
       "RuleName": rule-name,
       "ruleArn" : arn:aws:events:us-east-1:123456789012:rule/rule-name,
       "Transformed": "Yes"
   }
   ```

   （可选）您也可以选择**复制**，将生成的输出复制到设备的剪贴板。