Skip to content

如何對 CloudFormation 中的自訂資源失敗進行疑難排解?

2 分的閱讀內容
0

我想解決 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 權限

若要執行自動化,請完成下列步驟:

  1. 開啟 AWS Systems Manager 主控台
  2. 在導覽窗格中,選擇 Documents (文件)。
  3. 在搜尋列中,輸入 AWSSupport-TroubleshootCfnCustomResource
  4. 選取 AWSSupport-TroubleshootCfnCustomResource 文件。
  5. 選擇 Execute automation (執行自動化)。
  6. 對於輸入參數,請輸入以下內容:
    (選用) AutomationAssumeRole。輸入允許 Automation (AWS Systems Manager 的一項功能) 的 IAM 角色的 ARN,以代表您執行動作。如果您未指定角色,則自動化會使用啟動執行手冊之使用者的權限。
    StackName。輸入自訂資源失敗之 CloudFormation 堆疊的名稱。
  7. 選擇 Execute (執行)。
  8. 請檢閱 Outputs (輸出) 區段以取得下列詳細結果:
    validateCloudFormationStack 步驟可確認 CloudFormation 堆疊是否存在於同一個 AWS 帳號和 AWS 區域中。
    checkCustomResource 步驟可分析 CloudFormation 堆疊,檢查失敗的自訂資源,並提供如何對失敗的自訂資源進行疑難排解的資訊。

手動對 CloudFormation 堆疊進行疑難排解

檢查 Amazon CloudWatch Logs

請完成下列步驟:

  1. 開啟 CloudFormation 主控台
  2. 選擇失敗的堆疊,然後選擇 Resources (資源) 索引標籤,以取得與自訂資源關聯之 Lambda 函數的實體 ID。
  3. 選取您的 Lambda 函數。
  4. 選擇 Monitor (監控) 索引標籤,然後選擇 View CloudWatch logs (View CloudWatch 日誌)。

如果在 CloudFormation 復原期間刪除了 Lambda 函數,則日誌群組可能仍包含 CloudWatch 日誌。

若要取得日誌,請完成以下步驟:

  1. 開啟 CloudWatch 主控台
  2. 在導覽窗格中,選擇 Log groups (日誌群組)。
  3. 在搜尋欄位中執行以下命令:
    /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 支援的自訂資源?

相關資訊

執行簡單的自動化 (主控台)

設定自動化

Systems Manager Automation 執行手冊參考

使用 CloudFormation 實作 Lambda 支援之自訂資源的最佳實務有哪些?

AWS 官方已更新 6 個月前