Como excluo um recurso personalizado com suporte do Lambda que está preso no status DELETE_FAILED ou no status DELETE_IN_PROGRESS no CloudFormation?
Meu recurso personalizado com suporte do AWS Lambda está preso no status DELETE_FAILED ou no status DELETE_IN_PROGRESS no AWS CloudFormation. Quero excluir meu recurso personalizado.
Resolução
Escolha uma das soluções a seguir com base no status do seu recurso.
Exclua um recurso personalizado que está preso no status DELETE_FAILED
Você recebe uma mensagem de erro ao tentar excluir uma pilha com um recurso personalizado com suporte do Lambda que não tem a lógica para lidar com solicitações de exclusão. Você também pode receber a seguinte mensagem de erro se seu recurso personalizado contiver uma lógica de exclusão incorreta: “O CloudFormation não recebeu uma resposta do seu recurso personalizado. Verifique seus registros para obter o ID de solicitação [652961ca-f24e-42e0-8f74-3f4846ba282d]. Se você usa o módulo cfn-response do Python, talvez seja necessário atualizar seu código de função do Lambda para que o CloudFormation possa anexar a versão atualizada.”
O status da pilha muda para DELETE\ _FAILED e, em seguida, você recebe a seguinte mensagem de erro: “O recurso personalizado não conseguiu se estabilizar no tempo esperado.”
Para excluir a pilha, conclua as seguintes etapas:
- Abra o console do CloudFormation.
- Selecione a pilha que contém seu recurso personalizado que está preso no status DELETE_FAILED.
- Selecione Ações e, em seguida, selecione Excluir pilha.
- Na janela pop-up que fornece uma lista de recursos a serem retidos, selecione o recurso personalizado que está preso no status DELETE_FAILED. Em seguida, selecione Excluir.
- Selecione Ações e, em seguida, selecione Excluir pilha.
O status da sua pilha mudará para DELETE_COMPLETE.
Observação: seu recurso personalizado não é um recurso físico, então você não precisa limpar seu recurso personalizado após a exclusão da pilha.
Exclua um recurso personalizado que está preso no status DELETE_IN_PROGRESS
Quando sua pilha exclui um recurso personalizado e ele fica preso no status DELETE_IN_PROGRESS, sua pilha pode não ter a lógica para lidar com solicitações de exclusão. Ou a pilha pode incluir uma lógica de exclusão incorreta.
Para forçar a exclusão da pilha, você deve enviar manualmente um sinal de SUCCESS. O sinal requer os valores ResponseURL e RequestId que estão incluídos no evento enviado do CloudFormation para o Lambda.
-
Em seu modelo do CloudFormation, identifique o nome da função do Lambda para a qual seu recurso personalizado está enviando solicitações. Você pode encontrar o nome da função na propriedade ServiceToken do recurso AWS::CloudFormation::CustomResource ou Custom::String.
Por exemplo:
MyCustomResource: Type: "Custom::PingTester" Properties: ServiceToken: !Sub | arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
-
Abra o console do Lambda.
-
No painel de navegação, selecione Funções e, em seguida, selecione a função que você identificou na etapa 1. Por exemplo, awsexamplelambdafunction é o nome da função no exemplo de código anterior.
-
Verifique se sua função do Lambda registra os detalhes do evento no grupo de logs do Amazon CloudWatch chamado /aws/lambda/function_name.
Exemplo de lógica:exports.handler = function(event, context) { console.log("REQUEST RECEIVED:\n" + JSON.stringify(event)); ... }
Observação: Se a função do Lambda não incluir a lógica para imprimir o evento nos logs do CloudWatch, você não poderá obter os valores ResponseURL e RequestId. Você precisa ter esses valores para enviar um sinal manual. Espere aproximadamente uma hora para que a pilha do CloudFormation atinja o tempo limite e vá para o status DELETE_FAILED. Em seguida, conclua as etapas na seção Excluir um recurso personalizado que está preso no status DELETE_FAILED para excluir sua pilha.
-
Selecione a guia Monitoramento e, em seguida, selecione Visualizar logs no CloudWatch.
-
No console do Amazon CloudWatch, selecione o log mais recente.
Observação: você pode ver os logs do CloudWatch somente se a função tiver acesso ao Amazon CloudWatch Logs para fluxo de logs.
-
No log mais recente, identifique o evento em que RequestType está definido como Excluir e copie os valores de RequestId, ResponseURL, StackId, LogicalResourceId e PhysicalResourceId. Por exemplo:
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"
-
Para enviar um sinal de resposta de SUCCESS no objeto de resposta para a solicitação de exclusão, execute o comando a seguir em sua interface de linhas de comando local. Certifique-se de incluir os valores que você copiou da etapa 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"
O status de seus recursos personalizados muda para DELETE_COMPLETE nos eventos da pilha do CloudFormation.
Informações relacionadas
Crie uma lógica de provisionamento personalizada com recursos personalizados
Conteúdo relevante
- feita há um mêslg...
- Resposta aceitafeita há 14 diaslg...
- feita há 16 diaslg...
- feita há 11 horaslg...
- feita há 16 diaslg...
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 meses