如何刪除 CloudFormation 中停留在 DELETE_FAILED 狀態或 DELETE_IN_PROGRESS 狀態的 Lambda 支援的自訂資源?
我的 AWS Lambda 支援的自訂資源,在 AWS CloudFormation 中停留在 DELETE_FAILED 狀態或 DELETE_IN_PROGRESS 狀態。我想要刪除我的自訂資源。
簡短說明
選擇下列其中一種解決方案:
- 刪除停留在 DELETE_FAILED 狀態的自訂資源
- 刪除停留在 DELETE_IN_PROGRESS 狀態的自訂資源
解決方案
刪除停留在 DELETE_FAILED 狀態的自訂資源
如果您嘗試在 Lambda 支援的自訂資源缺少處理刪除請求的邏輯時刪除堆疊,則會收到錯誤訊息。如果您的自訂資源包含不正確的刪除邏輯,您也可能會收到錯誤訊息。錯誤訊息是: 「自訂資源無法在預期時間內穩定。」 堆疊的狀態會變更為 DELETE_FAILED。
若要刪除堆疊,請完成以下步驟:
1. 開啟 CloudFormation 主控台。
2. 選擇包含停留在 DELETE_FAILED 狀態之自訂資源的堆疊。
3. 選擇「動作」,然後選擇「刪除堆疊」。
4. 在提供「待保留資源」清單的彈出式視窗中,選擇停留在 DELETE_FAILED 狀態的自訂資源。然後,選擇「刪除」。
5. 選擇「動作」,然後選擇「刪除堆疊」。
堆疊的狀態會變更為 DELETE_COMPLETE。
**注意事項:**您的自訂資源不是實體資源,因此刪除堆疊後不必清理自訂資源。
刪除停留在 DELETE_IN_PROGRESS 狀態的自訂資源
如果您的堆疊在刪除自訂資源時停留在 DELETE_IN_PROGRESS 狀態,則您的堆疊可能缺少處理刪除請求的邏輯。或者,您的堆疊可能包含不正確的刪除邏輯。
如需強制刪除堆疊,您必須手動傳送 SUCCESS 訊號。訊號需要 ResponseURL 和 RequestId 值,這兩個值都包含在從 CloudFormation 傳送至 Lambda 的事件中。
1. 確認您的 Lambda 函數會記錄事件詳細資料。
如果您的 Lambda 函數不包含將事件列印至日誌的邏輯,則無法取得 ResponseURL 和 RequestId 值。傳送手動訊號時需要這些值。在此情況下,您必須等待大約一個小時,讓 CloudFormation 堆疊逾時,然後進入 DELETE_FAILED 狀態。然後,完成刪除停留在 DELETE_FAILED 狀態的自訂資源區段中的步驟,以刪除您的堆疊。
**注意事項:**如果您的 Lambda 函數中已有下列邏輯,請前往步驟 2。
範例邏輯:
exports.handler = function(event, context) { console.log("REQUEST RECEIVED:\n" + JSON.stringify(event)); ... }
2. 在您的 CloudFormation 範本中,識別自訂資源傳送請求的 Lambda 函數名稱。您可以從 AWS::CloudFormation::CustomResource 或 Custom::String 資源的 ServiceToken 屬性中找到函數名稱。例如:
MyCustomResource: Type: "Custom::PingTester" Properties: ServiceToken: !Sub | arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
3. 開啟 Lambda 主控台。
4. 在導覽窗格中,選擇「函數」,然後選擇您在步驟 1 中識別的函數。例如,awsexamplelambdafunction 是前述程式碼範例中的函數名稱。
5. 選擇「監控」索引標籤,然後選擇「在 CloudWatch 中檢視日誌」。
6. 在 Amazon CloudWatch 主控台,選擇最新的日誌。
**注意事項:**只有當您的函數能夠存取 Amazon CloudWatch Logs 進行日誌串流時,才能看到 CloudWatch 日誌。
7. 在最新的日誌中,識別 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"
8. 若要在回應物件中傳送 SUCCESS 回應訊號給刪除請求,請在本機命令列介面中執行下列命令。請務必包含您從步驟 7 複製的值。
$ 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 '
在 CloudFormation 堆疊事件中,自訂資源的狀態會變更為 DELETE_COMPLETE。
相關資訊
相關內容
- AWS 官方已更新 2 個月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前