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

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

使用Amazon Lambda函数 URL 接收事件

注意

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

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

注意

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

要到的连接 EventBridge,您首先需要先依次选择 SaaS t 提供程序。然后,提供已向该提供商创建的签名密钥,然后选择要向其发送 EventBridge 事件的事件总线。最后,您可以使用Amazon CloudFormation模板并创建所需的资源来完成连接。

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

  • GitHub

  • Stripe

  • Twilio

设置到的连接GitHub

步骤 1:创建堆Amazon CloudFormation栈

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

  1. 通过 https://console.aws.amazon.com/events/ 打开亚马逊 EventBridge 控制台。

  2. 从导航窗格中,选择 With

  3. 在 “使用 Lambda FURL 的入站 Web 挂钩” 下,选择 “开始”。

  4. 在下方 GitHub,选择设置

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

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

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

  8. 输入堆栈的名称。

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

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

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

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

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

  11. 选择 Create stack(创建堆栈)。

步骤 2:创建一个GitHub Webhoom

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

设置与... 的连接Stripe

步骤 1:创建Stripe终端节点

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

注意

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

步骤 2:创建堆Amazon CloudFormation栈

  1. 通过 https://console.aws.amazon.com/events/ 打开亚马逊 EventBridge 控制台。

  2. 在导航窗格中,选择 Qicknowledge

  3. 在 “使用 Lambda FURL 的入站 Web 挂钩” 下,选择 “开始”。

  4. 在下方 Stripe,选择设置

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

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

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

  8. 输入堆栈的名称。

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

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

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

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

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

  11. 选择 Create stack(创建堆栈)。

步骤 3:更新Stripe终端

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

设置与... 的连接Twilio

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

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

步骤 2:创建堆Amazon CloudFormation栈

  1. 通过 https://console.aws.amazon.com/events/ 打开亚马逊 EventBridge 控制台。

  2. 在导航窗格中,选择 Qicknowledge

  3. 在 “使用 Lambda FURL 的入站 Web 挂钩” 下,选择 “开始”。

  4. 在下方 Twilio,选择设置

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

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

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

  8. 输入堆栈的名称。

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

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

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

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

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

  11. 选择 Create stack(创建堆栈)。

步骤 3:创建一个Twilio Webhoom

设置 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. 从导航窗格中,选择 Stacks

  4. 为包含要更新的密钥的堆栈。

  5. 选择 Update(更新)。

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

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

  8. 选择 Next(下一步)

  9. 选择 “更新堆栈”。

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

更新Stripe密钥

  1. 在Stripe仪表板的 Webhooks 部分中,选择 Roll secre t 并将过期延迟至少两 (2) 个小时。有关更多信息,请参阅Stripe文档中的 Roll终端节点密钥

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

  3. 从导航窗格中,选择 Stacks

  4. 为包含要更新的密钥的堆栈。

  5. 选择 Update(更新)。

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

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

  8. 选择 Next(下一步)

  9. 选择 “更新堆栈”。

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

更新Twilio密钥

注意

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

  1. 创建一个新Twilio密钥。有关更多信息,请参阅Twilio文档中的身份验证令牌和如何更改它们

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

  3. 从导航窗格中,选择 Stacks

  4. 为包含要更新的密钥的堆栈。

  5. 选择 Update(更新)。

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

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

  8. 选择 Next(下一步)

  9. 选择 “更新堆栈”。

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

更新 Lambda 函数

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

访问 Lambda 函数
  1. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 从导航窗格中,选择 Stacks

  3. 为包含要更新的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. 在文件选择器中,选择您更新的文件,然后依次选择 Open (保存)。

  7. 在 “操作” 下,选择 “发布新版本”。

可用的事件类型

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

配额、错误代码和重试交付

配额

对 webhook 的传入请求数量由底层Amazon服务上限。下表包括相关配额。

服务 配额

Amazon Lambda

默认值:10 次并行执行

有关这些配额的更多信息,包括请求增加配额,请参阅 Lambda 配额

Amazon Secrets Manager

默认值:每秒 5000 个请求

有关这些配额包括请求增加配额的更多信息,请参阅Amazon Secrets Manager配额

注意

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

亚马逊 EventBridge

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

EventBridge 强制执行基于区域的费率配额。有关更多信息,请参阅EventBridge 配额

错误代码

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

服务 错误代码 描述

Amazon Lambda

429 “TooManyRequestsExption”

已超过并发执行配额。

Amazon Secrets Manager

500 “内部服务器错误”

已超出每秒请求数配额。

亚马逊 EventBridge

500 “内部服务器错误”

该地区的费率配额已超过。

活动重新交付

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

GitHub

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

Stripe

Stripe尝试在长达三天的时间内提供您的 webhook,但会呈指数级退缩。有关更多信息,请参阅以下Stripe文档:

Twilio

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