如何將 Lambda 函數設定為 Application Load Balancer 的目標,並對相關問題進行疑難排解?

2 分的閱讀內容
0

我需要將 AWS Lambda 函數設定為 Application Load Balancer 的目標,並了解如何對可能會遇到的問題進行疑難排解。

解決方法

Elastic Load Balancing 支援使用 Lambda 函數作為目標來處理來自 Application Load Balancer 的請求。如需詳細資訊,請參閱搭配使用 AWS Lambda 與 Application Load Balancer

步驟 1: 建立 Lambda 函數

  1. 開啟 Lambda 主控台的函數頁面

  2. 選擇建立函數

  3. 選擇從頭開始撰寫

  4. 輸入函數名稱

  5. 執行期下拉式清單中,選擇 Python 3.9 作為此情境的執行期。

  6. 對於執行角色,請選擇使用基本 Lambda 許可建立新角色

**注意:**如需執行角色的詳細資訊,請參閱 Lambda 執行角色

  1. 選擇建立函數

  2. 建立函數後,選擇**程式碼**索引標籤。在**程式碼來源**區段中,使用下列程式碼取代現有的函數程式碼:
    
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.    選擇建立目標群組

  1. 基本組態選擇目標類型中,選擇 ** Lambda 函數**。

5.    對於目標群組名稱,輸入目標群組名稱。

  1. (選用) 若要啟用運作狀態檢查,請在運作狀態檢查區段中選擇啟用

  2. (選用) 新增一個或多個索引標籤,如下所示:

  • 展開標籤區段。
  • 選擇新增標籤
  • 輸入標籤金鑰和標籤值。

8.    選擇下一步

  1. 選擇一個 Lambda 函數作為目標。
    -或-
    選擇稍後新增函數以稍後指定 Lambda 函數。

10.    選擇建立目標群組

**注意:**根據用於建立目標群組和註冊函數的方法,授予叫用 Lambda 函數的負載平衡器權限也不同。如需詳細資訊,請參閱調用 Lambda 函數的權限

步驟 3: 設定負載平衡器和接聽程式

若要設定負載平衡器和接聽程式,請依照步驟 3: 設定負載平衡器和接聽程式的步驟執行。

步驟 4: 測試負載平衡器

若要測試負載平衡器,請依照步驟 4: 測試負載平衡器的步驟執行。如果設定正常運作,則瀏覽器會顯示訊息**「Lambda 向您問好!」**

注意:如果您尚未啟用 Lambda 函數的運作狀態檢查,運作狀態將顯示為無法使用。您可以在沒有運作狀態檢查的情況下測試負載平衡器,因為這不會影響 Lambda 函數作為 Application Load Balancer 的目標。

Lambda 函數作為目標的限制

如需 Lambda 函數作為目標的限制的詳細資訊,請參閱 Lambda 函數作為目標,並檢閱限制部分的資訊。

Lambda 目標群組只能有一個 Lambda 函數目標。如需詳細資訊,請參閱準備 Lambda 函數

Lambda 函數作為目標的常見錯誤

「連線逾時」

此錯誤表示負載平衡器的安全群組不允許接聽程式連接埠上的流量。若要解決此錯誤,請管理您的安全群組,並確保安全群組的傳入規則允許接聽程式連接埠上的傳入流量。安全群組不需要傳出規則,因為安全群組為具狀態。不論傳出規則為何,經允許的傳入流量的回應將被允許流出。

「找不到目標群組」

此錯誤表示該目標群組已被刪除。若要解決此錯誤,請刪除與已刪除目標群組相關的資源政策。刪除資源政策會移除觸發條件。

  1. 開啟 Lambda 主控台的函數頁面

  2. 選擇與目標群組相關的 Lambda 函數。

  3. 選擇組態索引標籤,然後選擇許可

  4. 向下捲動基於資源的政策聲明區對,然後選取您想要移除的政策。

  5. 選擇刪除,然後在警告提醒中選擇刪除,以確認您要永久刪除資源政策中的政策陳述式。

您也可以使用下列 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 函數版本控制和別名

使用別名進行流量轉移

AWS 官方
AWS 官方已更新 1 年前