

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

# AWS AppSync JavaScript EventBridge 数据源的解析器函数参考
<a name="resolver-reference-eventbridge-js"></a>

与 EventBridge 数据源一起使用的 AWS AppSync 解析器函数请求和响应允许您向 Amazon EventBridge 总线发送自定义事件。

## 请求
<a name="request-js"></a>

请求处理程序允许您将多个自定义事件发送到 EventBridge 事件总线：

```
export function request(ctx) {
  return {
    "operation" : "PutEvents",
    "events" : [{}]
  }
}
```

 EventBridge `PutEvents`请求的类型定义如下：

```
type PutEventsRequest = {
  operation: 'PutEvents'
  events: {
    source: string
    detail: { [key: string]: any }
    detailType: string
    resources?: string[]
    time?: string // RFC3339 Timestamp format
  }[]
}
```

## 响应
<a name="response-js"></a>

如果`PutEvents`操作成功， EventBridge 则来自的响应将包含在`ctx.result`：

```
export function response(ctx) {
  if(ctx.error)
    util.error(ctx.error.message, ctx.error.type, ctx.result)
  else
    return ctx.result
}
```

执行 `PutEvents` 操作时发生的错误（例如 `InternalExceptions` 或 `Timeouts`）将出现在 `ctx.error` 中。有关常见错误 EventBridge的列表，请参阅[EventBridge 常见错误参考](https://docs.aws.amazon.com/eventbridge/latest/APIReference/CommonErrors.html)。

`result` 将具有以下类型定义：

```
type PutEventsResult = {
  Entries: {
    ErrorCode: string
    ErrorMessage: string
    EventId: string
  }[]
  FailedEntryCount: number
}
```
+ **Entries**

  摄取的事件结果（成功和失败）。如果摄取成功，则在该条目中包含 `EventID`。否则，您可以使用 `ErrorCode` 和 `ErrorMessage` 找出条目的问题。

  对于每条记录，响应元素的索引与请求数组中的索引相同。
+ **FailedEntryCount**

  失败条目数。该值表示为一个整数。

有关响应的更多信息`PutEvents`，请参阅[PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html#API_PutEvents_ResponseElements)。

**示例响应 1**

以下示例是具有两个成功事件的 `PutEvents` 操作：

```
{
    "Entries" : [ 
        {
            "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860"
        }, 
        {
            "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82"
        }
    ],
    "FailedEntryCount" : 0
}
```

**示例响应 2**

以下示例是具有三个事件的 `PutEvents` 操作，其中的两个事件是成功事件，一个是失败事件：

```
{
    "Entries" : [ 
        {
            "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860"
        }, 
        {
            "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82"
        },
        {
            "ErrorCode" : "SampleErrorCode",
            "ErrorMessage" : "Sample Error Message"
        }
    ],
    "FailedEntryCount" : 1
}
```

## `PutEvents` 字段
<a name="putevents-field"></a>

`PutEvents` 包含以下映射模板字段：
+ **版本**

  `version` 字段是所有请求映射模板通用的，用于定义模板使用的版本。该字段为必填。该值`2018-05-29`是 EventBridge 映射模板支持的唯一版本。
+ **操作**

  唯一支持的操作是 `PutEvents`。通过执行该操作，您可以将自定义事件添加到事件总线中。
+ **Events**

  将添加到事件总线的事件数组。应该为该数组分配 1-10 个项目。

  `Event` 对象具有以下字段：
  + `"source"`：定义事件源的字符串。
  + `"detail"`：可用于附加事件相关信息的 JSON 对象。该字段可以是空映射 (`{ }`)。
  + `"detailType`：指定事件类型的字符串。
  + `"resources"`：指定事件中涉及的资源的 JSON 字符串数组。该字段可以是空数组。
  + `"time"`：以字符串形式提供的事件时间戳。这应遵循[RFC3339](https://www.rfc-editor.org/rfc/rfc3339.txt)时间戳格式。

以下片段是一些有效 `Event` 对象示例：

**示例 1**

```
{
    "source" : "source1",
    "detail" : {
        "key1" : [1,2,3,4],
        "key2" : "strval"
    },
    "detailType" : "sampleDetailType",
    "resources" : ["Resouce1", "Resource2"],
    "time" : "2022-01-10T05:00:10Z"
}
```

**示例 2**

```
{
    "source" : "source1",
    "detail" : {},
    "detailType" : "sampleDetailType"
}
```

**示例 3**

```
{
    "source" : "source1",
    "detail" : {
        "key1" : 1200
    },
    "detailType" : "sampleDetailType",
    "resources" : []
}
```