我需要將 AWS Lambda 函數設定為 Application Load Balancer 的目標,並了解如何對可能會遇到的問題進行疑難排解。
解決方法
Elastic Load Balancing 支援使用 Lambda 函數作為目標來處理來自 Application Load Balancer 的請求。如需詳細資訊,請參閱搭配使用 AWS Lambda 與 Application Load Balancer。
步驟 1: 建立 Lambda 函數
-
開啟 Lambda 主控台的函數頁面。
-
選擇建立函數。
-
選擇從頭開始撰寫。
-
輸入函數名稱。
-
在執行期下拉式清單中,選擇 Python 3.9 作為此情境的執行期。
-
對於執行角色,請選擇使用基本 Lambda 許可建立新角色。
**注意:**如需執行角色的詳細資訊,請參閱 Lambda 執行角色。
-
選擇建立函數。
-
建立函數後,選擇**程式碼**索引標籤。在**程式碼來源**區段中,使用下列程式碼取代現有的函數程式碼:
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"statusDescription": "200 OK",
"headers": {
"Content-Type": "text/html"
},
"isBase64Encoded": False,
"body": "<h1>Hello from Lambda!</h1>"
}
9. 選擇部署。
步驟 2: 建立 Lambda 函數的目標群組
**注意:**如需詳細資訊,請參閱步驟 1: 設定目標群組。
1. 開啟 Amazon EC2 主控台。
2. 在導覽窗格的負載平衡下,選擇目標群組。
3. 選擇建立目標群組。
- 在基本組態的選擇目標類型中,選擇 ** Lambda 函數**。
5. 對於目標群組名稱,輸入目標群組名稱。
-
(選用) 若要啟用運作狀態檢查,請在運作狀態檢查區段中選擇啟用。
-
(選用) 新增一個或多個索引標籤,如下所示:
- 展開標籤區段。
- 選擇新增標籤。
- 輸入標籤金鑰和標籤值。
8. 選擇下一步。
- 選擇一個 Lambda 函數作為目標。
-或-
選擇稍後新增函數以稍後指定 Lambda 函數。
10. 選擇建立目標群組。
**注意:**根據用於建立目標群組和註冊函數的方法,授予叫用 Lambda 函數的負載平衡器權限也不同。如需詳細資訊,請參閱調用 Lambda 函數的權限。
步驟 3: 設定負載平衡器和接聽程式
若要設定負載平衡器和接聽程式,請依照步驟 3: 設定負載平衡器和接聽程式的步驟執行。
步驟 4: 測試負載平衡器
若要測試負載平衡器,請依照步驟 4: 測試負載平衡器的步驟執行。如果設定正常運作,則瀏覽器會顯示訊息**「Lambda 向您問好!」**
注意:如果您尚未啟用 Lambda 函數的運作狀態檢查,運作狀態將顯示為無法使用。您可以在沒有運作狀態檢查的情況下測試負載平衡器,因為這不會影響 Lambda 函數作為 Application Load Balancer 的目標。
Lambda 函數作為目標的限制
如需 Lambda 函數作為目標的限制的詳細資訊,請參閱 Lambda 函數作為目標,並檢閱限制部分的資訊。
Lambda 目標群組只能有一個 Lambda 函數目標。如需詳細資訊,請參閱準備 Lambda 函數。
Lambda 函數作為目標的常見錯誤
「連線逾時」
此錯誤表示負載平衡器的安全群組不允許接聽程式連接埠上的流量。若要解決此錯誤,請管理您的安全群組,並確保安全群組的傳入規則允許接聽程式連接埠上的傳入流量。安全群組不需要傳出規則,因為安全群組為具狀態。不論傳出規則為何,經允許的傳入流量的回應將被允許流出。
「找不到目標群組」
此錯誤表示該目標群組已被刪除。若要解決此錯誤,請刪除與已刪除目標群組相關的資源政策。刪除資源政策會移除觸發條件。
-
開啟 Lambda 主控台的函數頁面。
-
選擇與目標群組相關的 Lambda 函數。
-
選擇組態索引標籤,然後選擇許可。
-
向下捲動基於資源的政策聲明區對,然後選取您想要移除的政策。
-
選擇刪除,然後在警告提醒中選擇刪除,以確認您要永久刪除資源政策中的政策陳述式。
您也可以使用下列 remove-permission AWS Command Line Interface (AWS CLI) 命令來移除基於資源的政策:
**注意:**在下列命令中,使用您的 Lambda 函數名稱取代 EXAMPLE_FUNCTION,並使用您的陳述式 ID 取代 EXAMPLE_ID。
aws lambda remove-permission --function-name EXAMPLE_FUNCTION --statement-id EXAMPLE_ID
**注意:**如果您在執行 AWS CLI 命令時收到錯誤訊息,請確認您使用的是最新版本的 AWS CLI。
「調用 RegisterTargets 動作時發生錯誤(存取遭拒):elasticloadbalancing 主體沒有權限調用 <Lambda ARN> 目標群組的 ARN <Target Group ARN>」
當對 Lambda 函數的請求失敗時,負載平衡器會在存取日誌的 error_reason 欄位中儲存原因代碼。負載平衡器也會遞增相應的 Amazon CloudWatch 指標。如需詳細資訊,請參閱錯誤原因代碼。
使用 AWS CLI 將 Lambda 函數註冊為目標。使用 add-permission AWS CLI 命令為 Elastic Load Balancing 授予調用Lambda 函數的權限。
Lambda 函數作為目標的已知錯誤
「ELB 主控台監控面板中,與此功能相關的新指標 (LambdaUserError、LambdaInternalError、LambdaTargetProcessedBytes 和 StandardProcessedBytes) 無法使用。」
從 Amazon CloudWatch 主控台存取新的 Lambda 指標。
「新的 ModifyTargetGroup API 允許設定 120 秒運作狀態檢查逾時值,但 ELB 主控台不允許超過 60 秒的值。」
若要設定超過 60 秒的運作狀態檢查逾時,請透過 AWS CLI 調用 ModifyTargetGroup API。您可以將值設定為最高 120 秒。
modify-target-group 命令範例:
注意:在下列命令中,使用您的目標群組 ARN 取代EXAMPLE_TARGET_GROUP_ARN,並使用您的 AWS 區域代碼取代 EXAMPLE_REGION。
aws elbv2 modify-target-group \
--target-group-arn EXAMPLE_TARGET_GROUP_ARN \
--health-check-timeout-seconds 120 \
--region EXAMPLE_REGION
相關資訊
Lambda 函數作為目標
Lambda 函數版本控制和別名
使用別名進行流量轉移