Como excluo um recurso personalizado com suporte do Lambda que está preso no status DELETE_FAILED ou no status DELETE_IN_PROGRESS no CloudFormation?

4 minuto de leitura
0

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

Recursos personalizados

ServiceToken

Quais são algumas das melhores práticas para implementar recursos personalizados com suporte do AWS Lambda com o AWS CloudFormation?

AWS OFICIAL
AWS OFICIALAtualizada há 3 anos