在 Amazon EventBridge 中使用 Amazon Lambda 函数 URL 接收 SaaS 事件 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon EventBridge 中使用 Amazon Lambda 函数 URL 接收 SaaS 事件

注意

为了让我们的合作伙伴能够访问入站 Webhook,我们要在您的 Amazon 账户中创建一个 Open Lambda,通过验证第三方合作伙伴发送的身份验证签名,在 Lambda 应用程序级别提供保护。请与您的安全团队一起检查此配置。有关更多信息,请参阅 Lambda 函数 URL 的安全性和身份验证模型

您的 Amazon EventBridge 事件总线可以使用由 Amazon CloudFormation 模板创建的 Amazon Lambda 函数 URL,从支持的 SaaS 提供商接收事件。使用函数 URL,事件数据将发送到 Lambda 函数。然后,该函数将这些数据转换为事件,该事件可由 EventBridge 提取并发送到事件总线进行处理。事件进入事件总线后,您可以使用规则来筛选事件,应用任何已配置的输入转换,然后将其路由到正确的目标。

注意

创建 Lambda 函数 URL 会增加您的月度成本。有关更多信息,请参阅Amazon Lambda定价

要设置与 EventBridge 的连接,您首先要选择建立连接的 SaaS 提供商。然后,提供您与该提供商共同创建的签名密钥,并选择要接收事件的 EventBridge 事件总线。最后,使用 Amazon CloudFormation 模板创建完成连接所需的资源。

以下 SaaS 提供商目前可使用 Lambda 函数 URL 与 EventBridge 配合使用:

  • GitHub

  • Twilio

步骤 1:创建 Amazon CloudFormation 堆栈

首先,使用 Amazon EventBridge 控制台创建一个 CloudFormation 堆栈:

  1. 访问 https://console.aws.amazon.com/events/,打开 Amazon EventBridge 控制台。

  2. 从导航窗格中选择快速入门

  3. 使用 Lambda fURL 的入站 Webhook下,选择开始使用

  4. GitHub 下,选择设置

  5. 步骤 1:选择事件总线下,从下拉列表中选择一个事件总线。此事件总线从您提供给 GitHub 的 Lambda 函数 URL 接收数据。您也可以选择新建事件总线来创建事件总线。

  6. 步骤 2:使用 CloudFormation 进行设置下,选择新建 GitHub Webhook

  7. 选择我确认我创建的入站 Webhook 可以公开访问。然后选择确认

  8. 输入堆栈的名称。

  9. 在参数下,验证是否列出了正确的事件总线,然后为 GitHubWebhookSecret 指定安全令牌。有关创建安全令牌的更多信息,请参阅 GitHub 文档中的设置您的密钥令牌

  10. 功能和转换下,选择以下各项:

    • 我确认 Amazon CloudFormation 可能会创建 IAM 资源。

    • 我确认 Amazon CloudFormation 可能使用自定义名称创建 IAM 资源。

    • 我确认 Amazon CloudFormation 可能需要以下功能:CAPABILITY_AUTO_EXPAND

  11. 选择创建堆栈

步骤 2:创建 GitHub Webhook

接下来,在 GitHub 中创建 Webhook。要完成此步骤,您需要安全令牌和在步骤 2 中创建的 Lambda 函数 URL。有关更多信息,请参阅 GitHub 文档中的创建 Webhook

设置 Twilio 连接

步骤 1:查找您的 Twilio 身份验证令牌

要在 Twilio 和 EventBridge 之间建立连接,请先使用您的 Twilio 账户的身份验证令牌或密钥设置与 Twilio 的连接。有关更多信息,请参阅 Twilio 文档中的身份验证令牌及其更改方法

步骤 2:创建 Amazon CloudFormation 堆栈

  1. 访问 https://console.aws.amazon.com/events/,打开 Amazon EventBridge 控制台。

  2. 在导航窗格中选择快速入门

  3. 使用 Lambda fURL 的入站 Webhook下,选择开始使用

  4. Twilio 下,选择设置

  5. 步骤 1:选择事件总线下,从下拉列表中选择一个事件总线。此事件总线从您提供给 Twilio 的 Lambda 函数 URL 接收数据。您也可以选择新建事件总线来创建事件总线。

  6. 步骤 2:使用 CloudFormation 进行设置下,选择新建 Twilio Webhook

  7. 选择我确认我创建的入站 Webhook 可以公开访问。然后选择确认

  8. 输入堆栈的名称。

  9. 在参数下,验证是否列出了正确的事件总线,然后输入您在步骤 1 中创建的 TwilioWebhookSecret

  10. 功能和转换下,选择以下各项:

    • 我确认 Amazon CloudFormation 可能会创建 IAM 资源。

    • 我确认 Amazon CloudFormation 可能使用自定义名称创建 IAM 资源。

    • 我确认 Amazon CloudFormation 可能需要以下功能:CAPABILITY_AUTO_EXPAND

  11. 选择创建堆栈

步骤 3:创建 Twilio Webhook

设置 Lambda 函数 URL 后,您需要将其提供给 Twilio,以便发送事件数据。有关更多信息,请参阅 Twilio 文档中的使用 Twilio 配置您的公共 URL

更新 Webhook 密钥或身份验证令牌

更新 GitHub 密钥

注意

GitHub 不支持同时拥有两个密钥。当 GitHub 密钥和 Amazon CloudFormation 堆栈中的密钥不同步时,您可能会遇到资源停机的情况。由于签名不正确,在密钥不同步时发送的 GitHub 消息将失败。请等待 GitHub 和 CloudFormation 密钥同步后重试。

  1. 新建 GitHub 密钥。有关更多信息,请参阅 GitHub 文档中加密机密

  2. 通过以下网址打开 Amazon CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  3. 从导航窗格中,选择堆栈

  4. 为 Webhook 选择堆栈,其中包含要更新的密钥。

  5. 选择更新

  6. 确保选中使用当前模板,然后选择下一步

  7. GitHubWebhookSecret 下,清除使用现有值,输入您在步骤 1 中创建的新 GitHub 密钥,然后选择下一步

  8. 选择下一步

  9. 选择更新堆栈

密钥传播可能最多需要一个小时。为了缩短停机时间,您可以刷新 Lambda 执行上下文。

更新 Twilio 密钥

注意

Twilio 不支持同时拥有两个密钥。当 Twilio 密钥和 Amazon CloudFormation 堆栈中的密钥不同步时,您可能会遇到资源停机的情况。由于签名不正确,在密钥不同步时发送的 Twilio 消息将失败。请等待 Twilio 和 CloudFormation 密钥同步后重试。

  1. 新建 Twilio 密钥。有关更多信息,请参阅 Twilio 文档中的身份验证令牌及其更改方法

  2. 通过以下网址打开 Amazon CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  3. 从导航窗格中,选择堆栈

  4. 为 Webhook 选择堆栈,其中包含要更新的密钥。

  5. 选择更新

  6. 确保选中使用当前模板,然后选择下一步

  7. TwilioWebhookSecret 下,清除使用现有值,输入您在步骤 1 中创建的新 Twilio 密钥,然后选择下一步

  8. 选择下一步

  9. 选择更新堆栈

密钥传播可能最多需要一个小时。为了缩短停机时间,您可以刷新 Lambda 执行上下文。

更新 Lambda 函数

由 CloudFormation 堆栈创建的 Lambda 函数创建了基本 Webhook。如果您想针对特定使用场景(例如自定义日志记录)自定义 Lambda 函数,请使用 CloudFormation 控制台访问该函数,然后使用 Lambda 控制台更新 Lambda 函数代码。

访问 Lambda 函数
  1. 通过以下网址打开 Amazon CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  2. 从导航窗格中,选择堆栈

  3. 为 Webhook 选择堆栈,其中包含要更新的 Lambda 函数。

  4. 选择资源选项卡。

  5. 要在 Lambda 控制台中打开 Lambda 函数,请在物理 ID 下选择 Lambda 函数的 ID。

现在您已获得了 Lambda 函数,请使用 Lambda 控制台更新函数代码。

更新 Lambda 函数代码
  1. 操作下,选择导出函数

  2. 选择下载部署包并将文件保存到您的计算机中。

  3. 解压缩部署包 .zip 文件,更新 app.py 文件,然后压缩更新后的部署包,确保包含原始 .zip 文件中的所有文件。

  4. 在 Lambda 控制台中,选择代码选项卡。

  5. Code source(代码源)下,选择 Upload from(上载自)。

  6. 选择 .zip file (.zip 文件),然后选择 Upload file (上载文件)。

    1. 在文件选择器中,选择您更新的文件,然后依次选择打开保存

  7. 操作下,选择发布新版本

可用事件类型

CloudFormation 事件总线目前支持以下事件类型:

配额、错误代码和传送重试

限额

Webhook 的传入请求数量受底层 Amazon 服务的限制。下表包括相关的配额。

服务 配额

Amazon Lambda

默认:10 个并发执行

有关配额的更多信息(包括如何请求增加配额),请参阅 Lambda 配额

Amazon Secrets Manager

默认:每秒 5,000 个请求

有关配额的更多信息(包括如何请求增加配额),请参阅 Amazon Secrets Manager 配额

注意

使用 Amazon Secrets Manager Python 缓存客户端可以最大限度地减少每秒的请求数。

Amazon EventBridge

PutEvents 操作的条目大小上限为 256KB。

EventBridge 强制实施基于区域的费率配额。有关更多信息,请参阅 EventBridge 事件总线配额

错误代码

发生错误时,每项 Amazon 服务都会返回特定的错误代码。下表包括相关的错误代码。

服务 错误代码 描述

Amazon Lambda

429 “TooManyRequestsExption”

超出并发执行配额。

Amazon Secrets Manager

500 “Internal Server Error”

超出每秒请求数配额。

Amazon EventBridge

500 “Internal Server Error”

超出该区域的费率配额。

活动重新传送

发生错误时,您可以重试传送受影响的事件。每个 SaaS 提供商都有不同的重试步骤。

GitHub

可使用 GitHub Webhook API 检查任何 Webhook 调用的传送状态,并在需要时重新传送事件。有关更多信息,请参阅 GitHub 文档:

Twilio

Twilio 用户可以使用连接覆盖来自定义事件重试选项。有关更多信息,请参阅 Twilio 文档中的 Webhook(HTTP 回调):连接覆盖