如何疑難排解 Lambda Kinesis 防火管整合問題?

2 分的閱讀內容
0

我已將 AWS Lambda 與 Amazon Kinesis 資料防火管整合在一起,以轉換傳入的來源資料,並將轉換後的資料交付到目的地。但是,Lambda 函數沒有調用或失敗。

簡短描述

使用 Amazon Kinesis 資料防火管設定的 Lambda 函數可能會因下列原因而失敗:

  • AWS 身分和存取管理 (IAM) 許可不足
  • Lambda 持續時間超過允許的超時上
  • 節流
  • 資料轉換錯誤
  • Lambda 函數錯誤

**注意:**如果您的 Lambda 函數呼叫有網路逾時或因為達到呼叫限制而失敗,Kinesis 資料 Firehose 會重試呼叫三次。如需詳細資訊,請參閱資料轉換失敗處理

解決方案

如果您尚未這麼做,請為您的 Kinesis 資料防火管開啟 Amazon CloudWatch 記錄功能。當資料轉換或資料傳遞的 Lambda 叫用失敗時,您可以檢視特定的錯誤記錄。您可以在建立交付串流時開啟 Kinesis 資料 Firehose 錯誤記錄功能。記錄群組名稱的格式為** /aws/動作防火/交付流名稱**。交付串流名稱是交付串流的名稱。

若要找出 Lambda 函數失敗的原因,請檢查亞馬遜雲觀察日誌群組中的** /aws/lambda /lambda 函數名稱**。失敗的資料轉換記錄會在處理失敗的資料夾中以備份形式傳送至 Amazon 簡單儲存體 (Amazon S3) 儲存貯體。S3 儲存貯體中的記錄也包含失敗叫用的錯誤訊息。如需解決 Lambda 叫用失敗的詳細資訊,請參閱資料轉換失敗處理

IAM 許可不足

「拒絕訪問-訪問被拒絕。確保提供的 IAM 角色的信任政策允許 Kinesis 資料防火軟管擔任該角色。「

當亞馬遜室運動資料防火管 IAM 角色不允許假設「火焰。請確定身分與存取權管理 (IAM) 信任政策具有假設類似下列內容的權限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "firehose.amazonaws.com"
      },
     "Action": "sts:AssumeRole"
    }
  ]
}

「調用訪問被拒絕-訪問被拒絕。確保存取原則允許存取 Lambda 函數。「

當 Amazon Kinesis 資料防火管 IAM 角色不允許呼叫用於資料轉換的 Lambda 函數的權限時,就會發生此錯誤。請確定 IAM 政策允許 Amazon Kinesis 資料防火管叫用類似下列內容的 Lambda 函數:

**注意:**將此範例中的資源 ARN 替換為您的變數。

{
  "Effect": "Allow",
  "Action": [
    "lambda:InvokeFunction",
    "lambda:GetFunctionConfiguration"
  ],
  "Resource": [
    "arn:aws:lambda:region:account-id:function:function-name:function-version"
  ]
}

Lambda 持續時間超過允許的超時上

「火管在調用 AWS Lambda 時遇到超時錯誤。支援的函數逾時時間上限為 5 分鐘。「

Lambda 函數需要 5 分鐘以上才能完成時,就會發生這個錯誤。若要使用 Kinesis 資料防火管疑難排解 Lambda 函數逾時錯誤,請參閱資料轉換失敗處理

節流

「調用限制已完成-超出 Lambda 並發執行限制。增加並發執行限制。「

超過 Lambda 並行執行限制時,就會發生這個錯誤。檢閱 CloudWatch 日誌中的 Lambda 並行指標 ,以判斷您的用量。若要要求增加並行執行,請參閱 要求增加配額

如需詳細資訊,請參閱 Lambda 函數擴展如何疑難排解 Lambda 函數節流的「超過速率」和 429 個「太多請求」錯誤?

資料轉換錯誤

「JSOON 處理異常-解析從 Lambda 函數返回的記錄時出錯。確保傳回的記錄遵循 Kinesis 資料防火管所要求的狀態模型。「

當 Lambda 傳回的轉換後的記錄不是必要的格式時,就會發生這個錯誤。從 Lambda 傳回的所有轉換記錄都必須包含 recordId結果數據。檢查 Lambda 函數程式碼和 CloudWatch 日誌,以確認這些記錄是否包含這些參數。

**注意:**若要刻意刪除記錄,請將值設定為 [已捨棄]

如需詳細資訊,請參閱資料轉換和狀態模型

「重複記錄 ID-使用相同的記錄 ID 返回多個記錄。確保 Lambda 函數針對每個記錄傳回唯一的記錄 ID。「

如果 Lambda 函數傳回給 Kinesis Firehose 的多個轉換記錄具有相同的記錄識別碼,就會發生此錯誤。記錄識別碼會在函數叫用期間從 Kinesis 資料防火管傳送至 Lambda。檢查 Lambda 函數程式碼和 CloudWatch 日誌,以確認每個記錄識別碼都是唯一的。

Lambda 函數錯誤

「Lambda 函數已成功調用,但返回錯誤結果。「

當 Amazon Kinesis 資料防火管能夠成功叫用 Lambda 函數,但 Lambda 函數執行因錯誤而失敗時,就會發生此錯誤。檢查資料轉換 CloudWatch 指標,以確認 Kinesis 資料防火軟管已呼叫您的函數。

如果 Kinesis 資料 Firehose 尚未叫用您的 Lambda 函數,請檢查叫用時間以查看其是否超出逾時參數。您的 Lambda 函數可能需要更大的逾時值,或需要更多記憶體才能完成。如需呼叫測量結果的詳細資訊,請參閱呼叫測量結果

「超過允許的最大裝載大小」或「LAMBDA\ _ 執行階段無法張貼處理常式成功回應。HTTP 響應代碼: 413.「

Amazon Kinesis 資料防火管會同步叫用 Lambda 函數,且每個請求和回應的呼叫承載限制為 6 MB。Lambda 承載限制是一個硬性限制,無法增加。確保每個請求和響應的緩衝區大小不超過 6 MB。

如需詳細資訊,請參閱 Lambda 配額

相關資訊

為什麼使用 Kinesis 資料防火管時遇到資料傳送失敗?

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