

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

# 選取一種使用 HTTP 請求調用 Lambda 函數的方法
<a name="apig-http-invoke-decision"></a>

Lambda 的許多常見使用案例涉及使用 HTTP 請求調用您的函數。例如，您可能希望 Web 應用程式透過瀏覽器請求調用您的函式。Lambda 函式也可用於建立完整的 REST API、處理來自行動應用程式的使用者互動、透過 HTTP 呼叫處理來自外部服務的資料，或建立自訂 Webhook。

以下各節說明透過 HTTP 調用 Lambda 的選擇，並提供資訊以協助您針對特定使用案例做出正確決策。

## 選取 HTTP 調用方法時，您有哪些選擇？
<a name="w2aad101c29c46b9"></a>

Lambda 提供兩種主要方法來使用 HTTP 請求調用函數 - [函數 URL](urls-configuration.md) 和 [API Gateway](services-apigateway.md)。這兩種選項的主要差異如下所示：
+ **Lambda 函數 URL** 可為 Lambda 函數提供簡單、直接的 HTTP 端點。已針對簡單性和成本效益對其進行最佳化，並提供透過 HTTP 公開 Lambda 函數的最快路徑。
+ **API Gateway** 是一種更進階的服務，用於建置功能完整的 API。API Gateway 已針對大規模建置和管理生產 API 進行最佳化，並提供完整的安全、監控和流量管理工具。

## 您已知道自己需求時的建議
<a name="w2aad101c29c46c11"></a>

如果您已經清楚自己的需求，以下是基本建議：

建議**[函數 URL](urls-configuration.md)** 用於簡單的應用程式或原型設計，其中您只需要基本的身分驗證方法和請求/回應處理，並想要將成本和複雜性降至最低。

**[API Gateway](services-apigateway.md)** 是大規模生產應用程式或需要更進階功能的情況的更佳選擇，例如 [OpenAPI Description](https://www.openapis.org/) 支援、身分驗證選項、自訂網域名稱或豐富的請求/回應處理，包括限流、快取和請求/回應轉換。

## 選擇調用 Lambda 函數的方法時應考慮的事項
<a name="w2aad101c29c46c13"></a>

在函數 URL 和 API Gateway 之間選取時，需要考慮下列因素：
+ 您的身分驗證需要，例如是否需要 OAuth 或 Amazon Cognito 來驗證使用者
+ 您的擴展需求以及您要實作之 API 的複雜性
+ 您是否需要進階功能，例如請求驗證和請求/回應格式化
+ 您的監控需求
+ 您的成本目標

透過了解這些因素，可以選擇最能平衡您的安全性、複雜性和成本需求的選項。

下列資訊摘要說明兩個選項之間的主要差異。

### 身分驗證
<a name="w2aad101c29c46c13c11b1"></a>
+ **函數 URLs**提供基本身分驗證選項。 AWS Identity and Access Management 可以將端點設定為公有 (無身分驗證) 或需要 IAM 身分驗證。透過 IAM 身分驗證，您可以使用標準 AWS 登入資料或 IAM 角色來控制存取。雖然設定簡單，但相較於其他驗證方法，此方法提供的選項有限。
+ **API Gateway** 可存取更全面的身分驗證選項。除了 IAM 身分驗證之外，也可以使用 [Lambda 授權工具](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (自訂身分驗證邏輯)、[Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) 使用者集區和 OAuth2.0 流程。此彈性可讓您實作複雜的身分驗證機制，包括第三方身分驗證提供者、權杖型身分驗證和多重要素身分驗證。

### 請求/回應處理
<a name="w2aad101c29c46c13c11b3"></a>
+ **函數 URL** 提供基本的 HTTP 請求和回應處理。它們支援標準 HTTP 方法，並包含內建的跨來源資源共用 (CORS) 支援。雖然他們可以自然處理 JSON 承載和查詢參數，但它們不提供請求轉換或驗證功能。回應處理同樣簡單 – 用戶端接收來自 Lambda 函數的回應，就像 Lambda 傳回它一樣。
+ **API Gateway** 可提供複雜的請求和回應處理功能。您可以定義請求驗證器，使用映射範本轉換請求和回應，設定請求/回應標頭，以及實作回應快取。API Gateway 也支援二進位承載和自訂網域名稱，並且可以在回應到達用戶端之前對其進行修改。可以使用 JSON 結構描述來設定請求/回應驗證和轉換的模型。

### 擴展
<a name="w2aad101c29c46c13c11b5"></a>
+ **函數 URL** 會根據 Lambda 函數的並行限制直接擴展，並透過將函數擴展到其設定的並行限制上限來處理流量尖峰。達到該限制後，Lambda 會使用 HTTP 429 回應來回應其他請求。沒有內建佇列機制，因此處理擴展完全取決於 Lambda 函數的組態。根據預設，Lambda 函數每個 有 1，000 個並行執行的限制 AWS 區域。
+ 除了 Lambda 自己的擴展之外，**API Gateway** 還提供其他擴展功能。它包含內建的請求佇列和限流控制，可讓您更輕鬆地管理流量尖峰。根據預設，API Gateway 每秒最多可以處理 10,000 個請求，高載容量為每秒 5,000 個請求。它也提供在不同層級調節請求的工具 (API、階段或方法)，以保護後端。

### 監控
<a name="w2aad101c29c46c13c11b7"></a>
+ **函數 URL** 透過 Amazon CloudWatch 指標提供基本監控，包括請求計數、延遲和錯誤率。可以存取標準 Lambda 指標和日誌，它們會顯示傳入函數的原始請求。雖然這可提供基本的操作可見性，但指標主要著重於函數執行。
+ **API Gateway** 提供全面的監控功能，包括詳細的指標、記錄和追蹤選項。可以透過 CloudWatch 來監控 API 呼叫、延遲、錯誤率和快取命中率/遺失率。API Gateway 也會整合 與 AWS X-Ray 以進行分散式追蹤，並提供可自訂的記錄格式。

### Cost
<a name="w2aad101c29c46c13c11b9"></a>
+ **函數 URL** 遵循標準 Lambda 定價模型 – 您只需支付函數調用和運算時間的費用。URL 端點本身不收取額外費用。如果您不需要 API Gateway 的其他功能，這對於簡單的 API 或低流量應用程式而言是一個具成本效益的選擇。
+ **API Gateway** 提供[免費方案](https://aws.amazon.com/api-gateway/pricing/#Free_Tier)，其中包含針對 REST API 收到的一百萬個 API 呼叫，以及針對 HTTP API 收到的一百萬個 API 呼叫。之後，API Gateway 會針對 API 呼叫、資料傳輸和快取 (如果啟用) 收取費用。請參閱 API Gateway [定價頁面](https://aws.amazon.com/api-gateway/pricing/)，了解您自己的使用案例費用。

### 其他功能
<a name="w2aad101c29c46c13c11c11"></a>
+ **函數 URL** 旨在實現簡便性和直接 Lambda 整合。它們支援 HTTP 和 HTTPS 端點，提供內建 CORS 支援，並提供雙堆疊 (IPv4 和 IPv6) 端點。雖然它們缺乏進階功能，但它們在您需要快速、直接地透過 HTTP 公開 Lambda 函數時表現卓越。
+ **API Gateway** 包含許多其他功能，例如 API 版本控制、階段管理、用於用量計劃的 API 金鑰、透過 Swagger/OpenAPI 的 API 文件、WebSocket API、VPC 中的私有 API 以及 WAF 整合，以提供額外的安全性。它還支援 Canary 部署、用於測試的模擬整合，以及與 Lambda AWS 服務 以外的其他 整合。

## 選取調用 Lambda 函數的方法
<a name="w2aad101c29c46c15"></a>

現在您已了解在 Lambda 函數 URL 和 API Gateway 之間進行選擇的條件，以及它們之間的主要差異，您可以選擇最符合您需求的選項，並使用下列資源來協助您開始使用。

------
#### [ Function URLs ]

**使用下列資源開始使用函數 URL**
+ 遵循教學課程[建立具有函數 URL 的 Lambda 函數](urls-webhook-tutorial.md)
+ 在本指南的 [建立及管理 Lambda 函數 URL](urls-configuration.md) 章節中進一步了解 函數 URL
+ 透過執行以下操作，嘗試主控台內的引導式教學課程**建立簡單的 Web 應用程式**：

1. 開啟 Lambda 主控台中的[函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇畫面右上角的圖示以開啟說明面板。  
![\[\]](http://docs.aws.amazon.com/zh_tw/lambda/latest/dg/images/console_help_screenshot.png)

1. 選取**教學課程**。

1. 在**建立簡單的 Web 應用程式中**，選擇**開始教學課程**。

------
#### [ API Gateway ]

**使用下列資源開始使用 Lambda 和 API Gateway**
+ 依照教學課程[搭配使用 Lambda 與 API Gateway](services-apigateway-tutorial.md) 來建立與後端 Lambda 函數整合的 REST API。
+ 在 *Amazon API Gateway 開發人員指南*的下列章節中，進一步了解 API Gateway 提供的不同類型 API：
  + [API Gateway REST API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html)
  + [API Gateway HTTP API](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html)
  + [API Gateway WebSocket API](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)
+ 請嘗試 *Amazon API Gateway 開發人員指南*的[教學課程和研討會](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-tutorials.html)一節中的一個或多個範例。

------