Knowledge Center Monthly Newsletter - July 2025
Stay up to date with the latest from the Knowledge Center. See all new Knowledge Center articles published in the last month, and re:Post’s top contributors.
如何對 CloudFormation 中的自訂資源失敗進行疑難排解?
我想解決 AWS CloudFormation 中的自訂資源錯誤。
簡短說明
自訂資源之所以會失敗,是因為與資源關聯的 AWS Lambda 函數在執行時發生問題。然後,自訂資源會向 CloudFormation 傳送失敗狀態。
當 CloudFormation 在預期時間範圍內未收到來自自訂資源的回應並逾時時,自訂資源也會失敗。
若要解決自訂資源問題,請執行 AWSSupport-TroubleshootCFNCustomResource 執行手冊,或手動解決 CloudFormation 堆疊問題。
對於 Lambda 自訂資源,執行手冊會檢查 Lambda 是否已連線道 Amazon Simple Storage Service (Amazon S3),以向 CloudFormation 傳送回應。對 CloudFormation 的回應檢查 Lambda 網路組態和安全群組。
解決方法
執行 AWSSupport-TroubleshootCFNCustomResource 執行手冊
在開始之前,請確保您的 AWS Identity and Access Management (IAM) 使用者或角色具有所需的 IAM 權限。
若要執行自動化,請完成下列步驟:
- 開啟 AWS Systems Manager 主控台。
- 在導覽窗格中,選擇 Documents (文件)。
- 在搜尋列中,輸入 AWSSupport-TroubleshootCfnCustomResource。
- 選取 AWSSupport-TroubleshootCfnCustomResource 文件。
- 選擇 Execute automation (執行自動化)。
- 對於輸入參數,請輸入以下內容:
(選用) AutomationAssumeRole。輸入允許 Automation (AWS Systems Manager 的一項功能) 的 IAM 角色的 ARN,以代表您執行動作。如果您未指定角色,則自動化會使用啟動執行手冊之使用者的權限。
StackName。輸入自訂資源失敗之 CloudFormation 堆疊的名稱。 - 選擇 Execute (執行)。
- 請檢閱 Outputs (輸出) 區段以取得下列詳細結果:
validateCloudFormationStack 步驟可確認 CloudFormation 堆疊是否存在於同一個 AWS 帳號和 AWS 區域中。
checkCustomResource 步驟可分析 CloudFormation 堆疊,檢查失敗的自訂資源,並提供如何對失敗的自訂資源進行疑難排解的資訊。
手動對 CloudFormation 堆疊進行疑難排解
檢查 Amazon CloudWatch Logs
請完成下列步驟:
- 開啟 CloudFormation 主控台。
- 選擇失敗的堆疊,然後選擇 Resources (資源) 索引標籤,以取得與自訂資源關聯之 Lambda 函數的實體 ID。
- 選取您的 Lambda 函數。
- 選擇 Monitor (監控) 索引標籤,然後選擇 View CloudWatch logs (View CloudWatch 日誌)。
如果在 CloudFormation 復原期間刪除了 Lambda 函數,則日誌群組可能仍包含 CloudWatch 日誌。
若要取得日誌,請完成以下步驟:
- 開啟 CloudWatch 主控台。
- 在導覽窗格中,選擇 Log groups (日誌群組)。
- 在搜尋欄位中執行以下命令:
/aws/lambda/LambdaPhysicalName
注意: 將 LambdaPhysicalName 替換為您 Lambda 函數的名稱。
如果找不到日誌,請關閉復原功能並重新部署堆疊,以對 Lambda 函數的行為進行疑難排解。
對潛在失敗原因進行疑難排解
解決失敗狀態
您可能會收到以下錯誤訊息:
「從自訂資源接收到的回應狀態為『失敗』。傳回的訊息: <reason here>。」
當與自訂資源關聯的 Lambda 函數遇到問題且存在例外狀況處理邏輯時,就會收到上述錯誤訊息。
若要解決此問題,請查看錯誤訊息中包含的失敗原因以及 Lambda 的 CloudWatch 日誌。
CloudFormation 沒有收到回應
堆疊失敗,因為 CloudFormation 沒有收到自訂資源的回應。
若要解決此錯誤,請執行下列動作:
-
確保您正確使用自訂資源 Lambda 函數中的 cfn-response 模組,將回應傳送至 CloudFormation 堆疊。
-
查看 CloudWatch 日誌以確定程式碼執行時是否發生錯誤。
-
增加 Lambda 函數的逾時設定,以便函數有足夠的時間完成任務。可以設定的最長時間為 15 分鐘。
-
如果您的 Lambda 函數位於虛擬私有雲端 (VPC) 內,請確認它位於子網路中。子網路必須允許通過 NAT 閘道的傳出流量。子網路還必須路由到 Amazon S3 端點存取,以便自訂資源可以存取預先簽署的 Amazon S3 URL。
-
如果在逾時後傳送了回應,請檢查 Lambda 指標,以了解同一區域中是否存在大量並行函數執行。若要減少逾時,請為您的函數使用預留並行。
-
如果您的堆疊在自訂資源逾時之前一直處於進行中狀態,請使用 cURL 發出直接 HTTP 請求。當您發出直接請求時,也許能避免逾時。
curl 命令範例:curl -H 'Content-Type: ''' -X PUT -d '{ "Status": "SUCCESS", "PhysicalResourceId": "test-CloudWatchtrigger-1URTEVUHSKSKDFF", "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2 ", "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739", "LogicalResourceId": "CloudWatchtrigger" }' 'https://cloudformation-custom-resource-response-useast1.s3.us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A111122223333%3Astack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2%7CMyCustomResource%7Ce2fc8f5c-0391-4a65-a645-7c695646739?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170313T0212304Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=QWERTYUIOLASDFGBHNZCV%2F20190415%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=dgvg36bh23mk44nj454bjb54689bg43r8v011uerehiubrjrug5689ghg94hb '
注意: 若要發出請求,您必須包含請求物件的詳細資訊。您可以在 CloudWatch 日誌中找到 RequestID 和 Amazon S3 預簽章 URL。如需詳細資訊,請參閱如何刪除 CloudFormation 中卡在 DELETE_FAILED 狀態或 DELETE_IN_PROGRESS 狀態的 Lambda 支援的自訂資源?
相關資訊
相關內容
- 已提問 9 個月前