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

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

使用 Amazon Lambda 函数 URL 接收事件

注意

为了让我们的合作伙伴能够访问入站 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 提供商目前可用于 EventBridge 使用 Lambda 函数网址:

  • GitHub

  • Stripe

  • Twilio

设置 GitHub 连接

步骤 1:创建 Amazon CloudFormation 堆栈

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

  1. 打开亚马逊 EventBridge 控制台,网址为 https://console.aws.amazon.com/events/

  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

设置 Stripe 连接

步骤 1:创建 Stripe 端点

要在 EventBridge 和 Stripe 之间建立连接,请先创建一个 Stripe 端点并记下终端节点的密钥。在步骤 2 中设置堆栈时,您将使用此端点密钥。有关更多信息,请参阅 Stripe 文档中的交互式 Webhook 端点生成器

注意

您需要一个虚拟 URL 来设置 Stripe 端点。例如,www.example.com

步骤 2:创建 Amazon CloudFormation 堆栈

  1. 打开亚马逊 EventBridge 控制台,网址为 https://console.aws.amazon.com/events/

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

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

  4. Stripe 下,选择设置

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

  6. 在 “步骤 2:使用进行设置” 下 CloudFormation,选择 “新建 Stripe webhook”。

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

  8. 输入堆栈的名称。

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

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

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

    • 我承认这 Amazon CloudFormation 可能会创建带有自定义名称的 IAM 资源。

    • 我承认这 Amazon CloudFormation 可能需要以下能力:CAPABILITY_AUTO_EXPAND

  11. 选择创建堆栈

步骤 3:更新 Stripe 端点

现在,您已经创建了 Lambda 函数 URL,请更新 Stripe 端点以向 Lambda 函数 URL 发送事件。

设置 Twilio 连接

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

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

步骤 2:创建 Amazon CloudFormation 堆栈

  1. 打开亚马逊 EventBridge 控制台,网址为 https://console.aws.amazon.com/events/

  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 不支持同时拥有两个密钥。当 Amazon CloudFormation 堆栈中的GitHub密钥和密钥不同步时,您可能会遇到资源停机情况。 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 执行上下文。

更新 Stripe 密钥

  1. 在 Stripe 控制面板的 Webhooks 部分,选择滚动密钥,并将到期时间至少延迟两 (2) 小时。有关更多信息,请参阅 Stripe 文档中部署端点密钥

  2. 打开 Amazon CloudFormation 控制台,网址为 https://console.aws.amazon.com/cloudformation

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

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

  5. 选择更新

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

  7. 在下方 StripeWebhookSecret,清除 “使用现有值”,输入您在步骤 1 中创建的新Stripe密钥,然后选择 “下一步”。

  8. 选择下一步

  9. 选择更新堆栈

Stripe 将在轮换期间同时发送旧签名和新签名。

更新 Twilio 密钥

注意

Twilio 不支持同时拥有两个密钥。当 Amazon CloudFormation 堆栈中的Twilio密钥和密钥不同步时,您可能会遇到资源停机情况。 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

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

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 文档:

Stripe

Stripe 尝试在长达三天的时间内传送 Webhook,并呈指数级退避。有关更多信息,请参阅 Stripe 文档:

Twilio

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