Skip to content

Como soluciono falhas de recursos personalizados no CloudFormation?

5 minuto de leitura
0

Quero resolver erros de recursos personalizados no AWS CloudFormation.

Breve descrição

As falhas de recursos personalizados ocorrem porque a função do AWS Lambda associada ao recurso encontrou um problema ao ser executada. Em seguida, o recurso personalizado envia um status FALHA para o CloudFormation.

Um recurso personalizado também pode falhar quando o CloudFormation não recebe uma resposta do recurso personalizado dentro do prazo esperado e atinge o tempo limite.

Para solucionar os problemas de recursos personalizados, execute o runbook AWSSupport-TroubleshootCFNCustomResource ou solucione manualmente sua pilha do CloudFormation.

Para recursos personalizados do Lambda, o runbook verifica se o Lambda chega ao Amazon Simple Storage Service (Amazon S3) para enviar uma resposta ao CloudFormation. A resposta ao CloudFormation verifica a configuração da rede do Lambda e os grupos de segurança.

Resolução

Executar o runbook AWSSupport-TroubleshootCFNCustomResource

Antes de começar, certifique-se de que seu usuário ou perfil do AWS Identity and Access Management (AWS IAM) tenha as permissões de IAM necessárias.

Para executar a automação, conclua as seguintes etapas:

  1. Abra o console do AWS Systems Manager.
  2. No painel de navegação, escolha Documentos.
  3. Na barra de pesquisa, digite AWSSupport-TroubleshootCfnCustomResource.
  4. Selecione o documento AWSSupport-TroubleshootCfnCustomResource.
  5. Selecione Executar automação.
  6. Para os parâmetros de entrada, insira o seguinte:
    (Opcional) AutomationAssumeRole. Insira o ARN do perfil do IAM que permite que o Automation, um recurso do AWS Systems Manager, realize as ações em seu nome. Se você não especificar um perfil, a Automação usará as permissões do usuário que inicia o runbook.
    StackName. Insira o nome da pilha do CloudFormation em que o recurso personalizado falhou.
  7. Selecione Executar.
  8. Consulte a seção Saídas para ver os seguintes resultados detalhados:
    A etapa validateCloudFormationStack verifica se a pilha do CloudFormation existe na mesma conta da AWS e região da AWS.
    A etapa checkCustomResource analisa a pilha do CloudFormation, verifica o recurso personalizado que falhou e fornece informações sobre como solucionar o problema do recurso personalizado que falhou.

Solucionar problemas manualmente na pilha do CloudFormation

Verificar os Amazon CloudWatch Logs

Conclua as seguintes etapas:

  1. Abra o console do CloudFormation.
  2. Selecione a pilha que falhou e, em seguida, escolha a guia Recursos para obter a ID física da função do Lambda associada ao recurso personalizado.
  3. Selecione sua função do Lambda.
  4. Escolha a guia Monitor e, em seguida, escolha Exibir CloudWatch Logs.

Se a função do Lambda foi excluída durante a reversão do CloudFormation, o grupo de logs ainda pode conter os CloudWatch Logs.

Para obter os registros, conclua as seguintes etapas:

  1. Abra o console do CloudWatch.
  2. Escolha Grupos de logs no painel de navegação.
  3. No campo de pesquisa, execute o seguinte comando:
    /aws/lambda/LambdaPhysicalName

Observação: Substitua LambdaPhysicalName pelo nome da sua função do Lambda.

Se não for possível encontrar os registros, desative o atributo de reversão e reimplante a pilha para solucionar problemas de comportamento da função do Lambda.

Solucionar possíveis causas de falha

Resolver o status FALHA

Você pode receber a seguinte mensagem de erro:

“Received response status FAILED from custom resource. Message returned: <reason here>.”

Você recebe a mensagem de erro anterior quando a função do Lambda associada ao recurso personalizado encontra um problema e a lógica de tratamento de exceções está em vigor.

Para solucionar esse problema, revise o motivo da falha que está incluído na mensagem de erro e nos CloudWatch Logs para Lambda.

O CloudFormation não recebe uma resposta

A pilha falha porque o CloudFormation não recebe uma resposta do recurso personalizado.

Para resolver esse problema, execute as seguintes ações:

  • Verifique se você está usando corretamente o módulo cfn-response na função do Lambda do seu recurso personalizado para enviar uma resposta à pilha do CloudFormation.

  • Analise os CloudWatch Logs para determinar se ocorrem erros quando o código é executado.

  • Aumente a configuração de tempo limite da função do Lambda para que a função tenha tempo suficiente para concluir a tarefa. O tempo máximo que você pode definir é de 15 minutos.

  • Se sua função do Lambda estiver em uma nuvem privada virtual (VPC), confirme se ela está em uma sub-rede. A sub-rede deve permitir tráfego de saída por meio de um gateway NAT. A sub-rede também deve rotear para um endpoint de acesso do Amazon S3 para que os recursos personalizados possam acessar a URL pré-assinada do Amazon S3.

  • Se uma resposta foi enviada após um tempo limite, verifique suas métricas do Lambda para ver se há um grande número de execuções simultâneas de funções na mesma região. Para reduzir os tempos limite, use a simultaneidade reservada para sua função.

  • Se sua pilha permanecer no status EM ANDAMENTO até que o recurso personalizado expire, use cURL para fazer uma solicitação HTTP direta. Quando você faz uma solicitação direta, você potencialmente evita o tempo limite.
    Exemplo de comando curl:

    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
      '

    Observação: Para fazer a solicitação, você deve incluir os detalhes do objeto de solicitação. É possível encontrar o RequestID e a URL pré-assinada do Amazon S3 em seus CloudWatch Logs. Para mais informações, consulte Como excluo um recurso personalizado com suporte do Lambda que está preso no status DELETE_FAILED ou no status DELETE_IN_PROGRESS no CloudFormation?

Informações relacionadas

Executar uma automação simples (console)

Configurar a automação

Referência do runbook do Systems Manager Automation

Quais são algumas das práticas recomendadas para implantar recursos personalizados com suporte do Lambda com o CloudFormation?

AWS OFICIALAtualizada há 5 meses