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.
Breve descrição
Escolha uma das seguintes soluções:
- Exclua um recurso personalizado que está preso no status DELETE_FAILED
- Exclua um recurso personalizado que está preso no status DELETE_IN_PROGRESS
Resolução
Exclua um recurso personalizado que está preso no status DELETE_FAILED
Você recebe uma mensagem de erro ao tentar excluir uma pilha quando seu recurso personalizado com suporte do Lambda não tem a lógica para lidar com solicitações de exclusão. Você também pode receber um erro se seu recurso personalizado contiver uma lógica de exclusão incorreta. A mensagem de erro é: “O recurso personalizado não conseguiu se estabilizar no tempo esperado.” O status da pilha muda para DELETE_FAILED.
Para excluir a pilha, conclua as seguintes etapas:
1.Abra o console do CloudFormation.
2.Selecione a pilha que contém seu recurso personalizado que está preso no status DELETE_FAILED.
3.Selecione Ações e, em seguida, selecione Excluir pilha.
4.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.
5.Selecione Ações e, em seguida, selecione Excluir pilha.
O status da pilha muda 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
Se a pilha ficar presa no status DELETE_IN_PROGRESS ao excluir um recurso personalizado, talvez a pilha não tenha 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.
1.Confirme se a função do Lambda registra os detalhes do evento.
Se a função do Lambda não incluir a lógica para imprimir o evento nos logs, você não poderá obter os valores ResponseURL e RequestId. Esses valores são necessários para enviar um sinal manual. Nesse caso, você deve esperar 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.
**Observação:**Se você já tem a lógica a seguir na a função do Lambda, vá para a etapa 2.
Exemplo de lógica:
exports.handler = function(event, context) { console.log("REQUEST RECEIVED:\n" + JSON.stringify(event)); ... }
2.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::CustomResourceou Custom::String. Por exemplo:
MyCustomResource: Type: "Custom::PingTester" Properties: ServiceToken: !Sub | arn:aws:lambda:us-east-1:111122223333:function:awsexamplelambdafunction
3.Abra o console do Lambda.
4.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.
5.Selecione a guia Monitoramento e, em seguida, selecione Visualizar logs no CloudWatch.
6.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.
7.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"
8.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-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 '
O status de seus recursos personalizados muda para DELETE_COMPLETE nos eventos da pilha do CloudFormation.
Informações relacionadas
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano