我已將 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 資料防火管時遇到資料傳送失敗?