如何刪除 CloudFormation 中停留在 DELETE_FAILED 狀態或 DELETE_IN_PROGRESS 狀態的 Lambda 支援的自訂資源?
我的 AWS Lambda 支援的自訂資源,在 AWS CloudFormation 中停留在 DELETE_FAILED 狀態或 DELETE_IN_PROGRESS 狀態。我想要刪除我的自訂資源。
解決方法
根據資源狀態選擇下列其中一個解決方法。
刪除停留在 DELETE_FAILED 狀態的自訂資源
如果您嘗試使用缺少處理刪除請求邏輯的 Lambda 支援的自訂資源刪除堆疊,則會收到錯誤。如果您的自訂資源包含錯誤的刪除邏輯,您也可能會收到下列錯誤: 「CloudFormation 沒有收到自訂資源的回應。請檢查您的日誌是否有 requestId [652961ca-f24e-42e0-8f74-3f4846ba282d]。如果您使用 Python cfn-response 模組,則可能需要更新 Lambda 函數程式碼,以便 CloudFormation 連接更新版本。」
堆疊的狀態變更為 DELETE\ _FAILED,然後您會收到下列錯誤訊息: 「自訂資源無法在預期時間內穩定。」
若要刪除堆疊,請完成以下步驟:
- 開啟 CloudFormation 主控台。
- 選擇包含停留在 DELETE_FAILED 狀態之自訂資源的堆疊。
- 選擇 Actions (動作),然後選擇 Delete Stack (刪除堆疊)。
- 在提供待保留資源清單的彈出式視窗中,選擇停留在 DELETE_FAILED 狀態的自訂資源。然後,選擇 Delete (刪除)。
- 選擇 Actions (動作),然後選擇 Delete Stack (刪除堆疊)。
堆疊的狀態變更為 DELETE_COMPLETE。
**注意事項:**您的自訂資源不是實體資源,因此刪除堆疊後不必清理自訂資源。
刪除停留在 DELETE_IN_PROGRESS 狀態的自訂資源
當您刪除堆疊自訂資源時,停留在 DELETE_IN_PROGRESS 狀態,則您的堆疊可能缺少處理刪除請求的邏輯。或者,您的堆疊可能包含不正確的刪除邏輯。
如需強制刪除堆疊,您必須手動傳送 SUCCESS 訊號。訊號需要 ResponseURL 和 RequestId 值,兩者都包含在從 CloudFormation 傳送至 Lambda 的事件中。
-
在您的 CloudFormation 範本中,識別自訂資源傳送請求的 Lambda 函數名稱。您可以從 AWS::CloudFormation::CustomResource 或 Custom::String 資源的 ServiceToken 屬性中找到函數名稱。
例如:
MyCustomResource: Type: "Custom::PingTester" Properties: ServiceToken: !Sub | arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
-
開啟 Lambda 主控台。
-
在導覽窗格中,選擇 Functions (函數),然後選擇您在步驟 1 中識別的函數。例如,awsexamplelambdafunction 是前述程式碼範例中的函數名稱。
-
確認您的 Lambda 函數是否將事件詳細資料記錄到名為** /aws/lambda/function_name** 的 Amazon CloudWatch 日誌群組。
範例邏輯:exports.handler = function(event, context) { console.log("REQUEST RECEIVED:\n" + JSON.stringify(event)); ... }
注意事項:如果您的 Lambda 函數不包含將事件列印至 CloudWatch 日誌的邏輯,則無法取得 ResponseURL 和 RequestId 值。必須有這些值才能傳送手動訊號。等待大約一個小時,讓 CloudFormation 堆疊逾時,然後進入 DELETE_FAILED 狀態。然後,完成前往刪除停留在 DELETE_FAILED 狀態的自訂資源區段中的步驟,以刪除您的堆疊。
-
選擇 Monitoring (監控) 索引標籤,然後選擇 View logs in CloudWatch (在 CloudWatch 中檢視日誌)。
-
在 Amazon CloudWatch 主控台,選擇最新的日誌。
**注意事項:**只有當您的函數能夠存取 Amazon CloudWatch Logs 進行日誌串流時,才能看到 CloudWatch 日誌。
-
在最新的日誌中,識別 RequestType 設為 Delete 的事件,然後複製 RequestId、ResponseURL、StackId、LogicalResourceId 和 PhysicalResourceId 的值。例如:
Received event: { "RequestType": "Delete", "ServiceToken": "arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction", "ResponseURL": "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", "StackId": "arn:aws:cloudformation:us-east-1:111122223333:stack/awsexamplecloudformation/33ad60e0-5f25-11e9-a734-0aa6b80efab2", "RequestId": "e2fc8f5c-0391-4a65-a645-7c695646739", "LogicalResourceId": "MyCustomResource", "PhysicalResourceId": "test-MyCustomResource-1URTEVUHSKSKDFF", "ResourceType": "Custom::PingTester"
-
若要在回應物件中傳送 SUCCESS 回應訊號給刪除請求,請在本機命令列介面中執行下列命令。請務必包含您從步驟 7 複製的值。
curl -H "Content-Type: ''" -X PUT -d "{\"Status\": \"SUCCESS\",\"PhysicalResourceId\": \"test-CloudWatchtrigger-1URTEVUHSKSKDFF\",\"StackId\": \"arn:aws:cloudformation:us-west-2:111122223333:stack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb\",\"RequestId\": \"dca731ad-18ad-496c-8c77-459d904fd36b\",\"LogicalResourceId\": \"MyCustomResource\"}" "https://cloudformation-custom-resource-response-uswest2.s3-us-west-2.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A111122223333%3Astack/CRStack/5105e4b0-4a29-11ef-8c42-067744df1edb%7CCustomResource%7Cdca731ad-18ad-496c-8c77-459d904fd36b?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240725T020141Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Credential=AKIA54RCMT6SJPHCTM4H%2F20240725%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=3b1567adb5ec9415526251a26bac3a6c861ac77aa090a3ada0a4a4d109a7273d"
在 CloudFormation 堆疊事件中,自訂資源的狀態會變更為 DELETE_COMPLETE。
相關資訊
相關內容
- 已提問 3 個月前lg...
- 已提問 1 個月前lg...
- AWS 官方已更新 3 個月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前