

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從 Amazon EventBridge 中的 AWS Lambda 函數 URLs 接收 SaaS 事件
<a name="eb-saas-furls"></a>

**注意**  
為了讓合作夥伴能夠存取傳入 Webhook，我們會在 AWS 您的帳戶中建立 Open Lambda，並透過驗證第三方合作夥伴傳送的身分驗證簽章來保護 Lambda 應用程式層級。請與您的安全團隊一起檢閱此組態。如需詳細資訊，請參閱 [Lambda 函數 URL 的安全性和驗證模型](https://docs.aws.amazon.com/lambda/latest/dg/urls-auth.html#urls-auth-none)。

您的 Amazon EventBridge [事件匯流排](eb-event-bus.md)可以使用 CloudFormation 範本建立的 [AWS Lambda 函數 URL](https://docs.aws.amazon.com/lambda/latest/dg/lambda-urls.html)，從支援的 SaaS 提供者接收[事件](eb-events.md)。在函數 URL，事件資料會傳送至 Lambda 函數。然後，函數會將此資料轉換成可由 EventBridge 擷取並傳送至事件匯流排進行處理的事件。事件位於事件匯流排上之後，您可以使用規則來篩選事件、套用任何已設定的輸入轉換，然後將其路由至正確的目標。

**注意**  
建立 Lambda 函數 URL 網址會增加您的每月成本。如需詳細資訊，請參閱 [AWS Lambda 定價](https://aws.amazon.com/lambda/pricing)。

若要設定與 EventBridge 的連線，請先選取要設定連線的 SaaS 提供者。然後，您提供使用該提供者建立的*簽署機密*，然後選取要傳送事件的 EventBridge 事件匯流排。最後，您可以使用 CloudFormation 範本並建立所需的資源來完成連線。

下列 SaaS 提供者目前可在 Lambda 函數 URL 網址與 EventBridge 搭配使用：
+ GitHub
+ Twilio

**Topics**
+ [步驟 1：建立 CloudFormation 堆疊](#create-gh-cfn-stack)
+ [步驟 2：建立 GitHub Webhook](#create-gh-webhook)
+ [設定與 Twilio 的連線](#furls-connection-twilio)
+ [更新 Webhook 機密或身分驗證權杖](#furls-update-secret)
+ [更新 Lambda 函數](#furls-update-function)
+ [可用事件類型](#furls-event-types)
+ [配額、錯誤碼和重試傳送](#furls-quotas-errors)

## 步驟 1：建立 CloudFormation 堆疊
<a name="create-gh-cfn-stack"></a>

 首先，使用 Amazon EventBridge 主控台建立 CloudFormation 堆疊：

1. 前往 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 開啟 Amazon EventBridge 主控台。

1. 從導覽窗格選擇**快速入門**。

1. 在**使用 Lambda fURLs 的傳入 Webhook**下，選擇**開始使用**。

1. 在 **GitHub** 下，選擇**設定**。

1. 在**步驟 1：選取事件匯流排**下，從下拉式清單中選取事件匯流排。此事件匯流排會從您提供給 GitHub 的 Lambda 函數 URL 接收資料。您也可以選取**新事件匯流排**来建立事件匯流排。

1. 在**步驟 2 中：使用 CloudFormation 設定**，選擇**新 GitHub Webhook**。

1. 選取**我確認我建立的傳入 Webhook 將可公開存取。**然後選擇**確認**。

1. 輸入堆疊名稱。

1. 在參數下，確認已列出正確的事件匯流排，然後為 **GitHubWebhookSecret** 確定安全字符。有關建立安全字符的更多信息，請參閱 GitHub 文件中的[設定私密字符](https://docs.github.com/en/developers/webhooks-and-events/webhooks/securing-your-webhooks#setting-your-secret-token)。

1. 在**功能和轉換**下，選取下列每一項：
   + **我確認 CloudFormation 可能會建立 IAM 資源。**
   + **我確認 CloudFormation 可能會建立具有自訂名稱的 IAM 資源。**
   + **我確認 CloudFormation 可能需要下列功能： `CAPABILITY_AUTO_EXPAND`**

1. 選擇**建立堆疊**。

## 步驟 2：建立 GitHub Webhook
<a name="create-gh-webhook"></a>

接下來，建立 GitHub 上的 Webhook。您需要使用在步驟 2 中建立的安全權杖和 Lambda 函數 URL完成該步驟。如需詳細資訊，請參閱文件 GitHub 中的[建立 Webhook](https://docs.github.com/en/developers/webhooks-and-events/webhooks/creating-webhooks)。

## 設定與 Twilio 的連線
<a name="furls-connection-twilio"></a>

### 步驟 1：尋找您的 Twilio 身分驗證權杖
<a name="create-twilio-secret"></a>

若要在 Twilio 和 EventBridge 之間設定連線，請首先為 Twilio 帳戶設定使用身分驗證權杖或機密與 Twilio 進行連線。如需詳細資訊，請參閱 Twilio 文件中的[身分驗證權杖和變更方法](https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-How-to-Change-Them)。

### 步驟 2：建立 CloudFormation 堆疊
<a name="create-twilio-cfn-stack"></a>

1. 造訪 [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/) 以啟用 Amazon EventBridge 主控台。

1. 在導覽窗格中，選擇**快速入門**。

1. 在**使用 Lambda fURLs 的傳入 Webhook**下，選擇**開始使用**。

1. 在 **Twilio** 下，選擇**設定**。

1. 在**步驟 1：選取和啟用事件匯流排**下，從下拉式清單中選取事件匯流排。此事件匯流排會從提供給 Twilio 的 Lambda 函數 URL 接收資料。您也可以選取**新事件匯流排**来建立事件匯流排。

1. 在**步驟 2 中：使用 CloudFormation 設定**，選擇**新 Twilio Webhook**。

1. 選取**我確認我建立的傳入 Webhook 將可公開存取。**然後選擇**確認**。

1. 輸入堆疊名稱。

1. 在參數設定中，確認已列出正確的事件匯流排，然後輸入您在步驟 1 中建立的 **TwilioWebhookSecret**。

1. 在**功能和轉換**下，選取下列每一項：
   + **我確認 CloudFormation 可能會建立 IAM 資源。**
   + **我確認 CloudFormation 可能會建立具有自訂名稱的 IAM 資源。**
   + **我確認 CloudFormation 可能需要下列功能：CAPABILITY\_AUTO\_EXPAND**

1. 選擇**建立堆疊**。

### 步驟 3：建立 Twilio Webhook
<a name="create-twilio-webhook"></a>

在設定 Lambda 函數 URL 之後，您需要將其提供給 Twilio，以便能夠傳送事件資料。如需詳細資訊，請參閱 Twilio 文件中的[使用 Twilio 設定公用 URL](https://www.twilio.com/docs/usage/webhooks/getting-started-twilio-webhooks#configure-your-public-url-with-twilio)。

## 更新 Webhook 機密或身分驗證權杖
<a name="furls-update-secret"></a>

### 更新 GitHub 機密
<a name="update-gh-secret"></a>

**注意**  
GitHub 不支援同時擁有兩個機密。當GitHub秘密和 CloudFormation 堆疊中的秘密不同步時，您可能會遇到資源停機時間。當秘密不同步時傳送GitHub的訊息將會失敗，因為簽章不正確。請等待 GitHub 機密和 CloudFormation 機密同步，然後再試一次。

1. 建立新 GitHub 機密。如需詳細資訊，請參閱 GitHub 文件中的[加密機密](https://docs.github.com/en/actions/security-guides/encrypted-secrets)。

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇**堆疊**。

1. 選擇用於 Webhook 的堆疊，該 Webhook 包含您準備更新的機密。

1. 選擇**更新**。

1. 確保已選取**使用目前範本**，然後選擇**下一步**。

1. 在 **GitHubWebhookSecret** 下，清除**使用現有值**，輸入在步驟 1 中建立的新 GitHub 機密，然後選擇**下一步**。

1. 選擇**下一步**。

1. 請選擇**更新堆疊**。

機密的傳播可能需要長達一小時的時間。若要減少停機時間，可更新 Lambda 執行內容。

### 更新 Twilio 機密
<a name="update-twilio-secret"></a>

**注意**  
Twilio 不支援同時擁有兩個機密。當Twilio秘密和 CloudFormation 堆疊中的秘密不同步時，您可能會遇到資源停機時間。當秘密不同步時傳送Twilio的訊息會因為簽章不正確而失敗。請等待 Twilio 機密和 CloudFormation 機密同步，然後再試一次。

1. 建立新 Twilio 機密。如需詳細資訊，請參閱 Twilio 文件中的[身分驗證權杖和變更方法](https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-How-to-Change-Them)。

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇**堆疊**。

1. 選擇用於 Webhook 的堆疊，該 Webhook 包含您準備更新的機密。

1. 選擇**更新**。

1. 確保已選取**使用目前範本**，然後選擇**下一步**。

1. 在 **TwilioWebhookSecret** 下，清除**使用現有值**，輸入在步驟 1 中建立的新 Twilio 機密，然後選擇**下一步**。

1. 選擇**下一步**。

1. 請選擇**更新堆疊**。

機密的傳播可能需要長達一小時的時間。若要減少停機時間，可更新 Lambda 執行內容。

## 更新 Lambda 函數
<a name="furls-update-function"></a>

由 CloudFormation 堆疊所建立的 Lambda 函數能建立基本的 Webhook。如果想要針對自訂記錄等特定使用案例自訂 Lambda 函數，請使用 CloudFormation 主控台存取該函數，然後使用 Lambda 主控台更新 Lambda 函數程式碼。

**存取 Lambda 函數**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 從導覽窗格選擇**堆疊**。

1. 選擇用於 Webhook 的堆疊，該 Webhook 包含您準備更新的 Lambda 函數。

1. 選擇**資源**標籤。

1. 若要在 Lambda 主控台中開啟 Lambda 函數，請在**實體 ID** 下選擇 Lambda 函數的 ID。

現在您已存取 Lambda 函數，請使用 Lambda 主控台更新函數程式碼。

**更新 Lambda 函數程式碼**

1. 在**動作**下，選擇**匯出函數**。

1. 選擇**下載部署套件**並將檔案儲存至電腦。

1. 解壓縮部署套件.zip 檔案，更新 `app.py` 檔案，然後壓縮更新的部署套件，確保原始 .zip 檔案中的所有檔案均包含在內。

1. 在 Lambda 主控台中，選擇**程式碼**標籤。

1. 在**程式碼來源**下，選擇**上傳自**。

1. 選擇 **.zip 檔案**，然後選擇 **上傳**。

   1. 在檔案選擇器中，選取已更新檔案，選擇**開啟**，然後選擇**儲存**。

1. 在**動作**下，選擇**發佈新版本**。

## 可用事件類型
<a name="furls-event-types"></a>

CloudFormation 事件匯流排目前支援下列事件類型：
+ **GitHub**：支援[所有事件類型](https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads)。
+ **Twilio**：支援[事件後 Webhook](https://www.twilio.com/docs/chat/webhook-events)。

## 配額、錯誤碼和重試傳送
<a name="furls-quotas-errors"></a>

### 配額
<a name="furls-quotas"></a>

傳入 Webhook 的請求數量由基礎 AWS 服務限制。下表包含相關配額。


| 服務 | 配額 | 
| --- | --- | 
| AWS Lambda | 預設值：10 個並行執行<br />如需有關配額的詳細資訊，包括請求增加配額，請參閱 [Lambda 配額](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)。 | 
| AWS Secrets Manager | 預設值：5,000 (每秒請求數)<br />如需有關配額的詳細資訊，包括請求增加配額，請參閱 [AWS Secrets Manager 配額](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_limits.html)。使用 [AWS Secrets Manager Python 緩存客戶端](https://github.com/aws/aws-secretsmanager-caching-python#cache-configuration)，以使每秒請求數量最小。 | 
| Amazon EventBridge | PutEvents 動作的項目大小上限為 1 MB。<br />EventBridge 強制執行以區域為基礎的費率配額。如需詳細資訊，請參閱 [EventBridge 事件匯流排配額](eb-quota.md#eb-limits)。 | 

### 錯誤代碼
<a name="furls-errors"></a>

發生錯誤時，每個 AWS 服務都會傳回特定的錯誤代碼。下表包含相關錯誤代碼。


| 服務 | 錯誤碼 | Description | 
| --- | --- | --- | 
| AWS Lambda | 429「TooManyRequestsExption」 | 超過並行執行配額。 | 
| AWS Secrets Manager | 500「內部伺服器錯誤」 | 超過每秒配額的請求數。 | 
| Amazon EventBridge | 500「內部伺服器錯誤」 | 超過基於區域的費率配額。 | 

### 重新傳遞事件
<a name="furls-redelivery"></a>

發生錯誤時，您可以重新傳遞受影響的事件。每個 SaaS 提供者都有不同的重新傳遞程序。

#### GitHub
<a name="furls-redelivery-github"></a>

使用 GitHub Webhook API 檢查任何 Webhook 呼叫的傳遞狀態，並視需要重新傳遞事件。如需詳細資訊，請參閱下列 GitHub 文件：
+ **組織**：[重新傳遞組織 Webhook](https://docs.github.com/en/rest/orgs/webhooks#redeliver-a-delivery-for-an-organization-webhook)
+ **儲存庫**：[重新傳遞儲存庫 Webhook](https://docs.github.com/en/rest/webhooks/repo-deliveries#redeliver-a-delivery-for-a-repository-webhook)
+ **應用程式**：[重新傳遞應用程式 Webhook](https://docs.github.com/en/rest/apps/webhooks#redeliver-a-delivery-for-an-app-webhook)

#### Twilio
<a name="furls-redelivery-twilio"></a>

Twilio 使用者可以使用連線覆寫來自訂事件重試選項。如需詳細資訊，請參閱 Twilio 文件中的 [Webhook (HTTP 回呼)：連線覆寫](https://www.twilio.com/docs/usage/webhooks/webhooks-connection-overrides)。