Ir para o conteúdo

Como resolvo o erro “Failed to receive X resource signal(s) within the specified duration” no AWS CloudFormation?

5 minuto de leitura
0

Recebo a seguinte mensagem de erro: “Failed to receive X resource signal(s) within the specified duration” para instâncias Linux do Amazon Elastic Compute Cloud (Amazon EC2) no AWS CloudFormation.

Breve descrição

Você vê esse erro quando o CloudFormation não recebe sinais de sucesso para recursos que têm um atributo CreationPolicy especificado com um ResourceSignal nele. O erro pode ocorrer em uma instância do Amazon EC2, grupo do Auto Scaling ou AWS::CloudFormation::WaitCondition.

Observação: a resolução a seguir se aplica somente às pilhas do CloudFormation que você cria com instâncias do Linux. Para instâncias do Windows, consulte How do I resolve the error “Failed to receive X resource signal(s) within the specified duration” for EC2 Windows instances in AWS CloudFormation?

Resolução

Com base no seu caso de uso, use as seguintes etapas de solução de problemas para resolver seu problema.

Observação: para evitar a reversão da pilha, escolha Preservar recursos provisionados com sucesso para as opções de falha da pilha no console do CloudFormation. Essa opção significa que não há reversão de falhas e a instância não será encerrada até que você exclua a pilha.

O script cfn-signal não está instalado na instância da pilha CloudFormation

Para confirmar que o script cfn-signal está instalado na instância configurada para enviar sinais à pilha, conclua as etapas a seguir:

  1. Usar SSH para se conectar à sua instância Linux.
  2. Use um dos scripts a seguir para confirmar se o script cfn-signal está instalado.
    Para confirmar se o script cfn-signal está localizado em seu diretório, execute o comando a seguir:
    $ sudo find / -name cfn-signal/opt/aws/bin/cfn-signal/opt/aws/apitools/cfn-init-1.4-30.amzn2/bin/cfn-sign
    Para confirmar se o pacote de scripts auxiliares do AWS CloudFormation que contém o script cfn-signal está instalado, execute o comando a seguir:
    $ sudo rpm -q aws-cfn-bootstrapaws-cfn-bootstrap-1.4-30.amzn2.noarch
    Importante: o comando anterior funciona somente em distribuições que usam o RPM Package Manager (RPM). Para obter mais informações sobre o RPM Package Manager, consulte o Capítulo 1. Introdução ao RPM no site da Red Hat. Por padrão, os scripts auxiliares do AWS CloudFormation são instalados na imagem de máquina da Amazon (AMI) do Amazon Linux. Para instalar os scripts auxiliares, consulte CloudFormation referência de scripts auxiliares.

Há erros de sintaxe ou valores incorretos no modelo do AWS CloudFormation

Para encontrar os erros e os valores incorretos, conclua as seguintes etapas:

  1. Em um editor de código, abra o modelo da sua pilha. Em seguida, localize a seção de propriedades UserData.
  2. Verifique se há erros de sintaxe, falta de espaços, erros ortográficos e outros erros de digitação.
  3. Confirme se os valores das propriedades de pilha, recurso e região da AWS estão corretos.
    Observação: verifique o script de bootstrap incluído na propriedade UserData. O script chama cfn-signal. Verifique se há erros de sintaxe ou valores incorretos.

Se você sinalizar nos comandos cfn-init, procure informações sobre o sinal nos logs do cfn-init. Para pesquisar erros nos logs do cloud-init ou cfn-init, use SSH para se conectar à sua instância. Em seguida, use a palavra-chave erro ou falha para pesquisar mensagens detalhadas de erro ou falha nos seguintes logs:

/var/log/cloud-init-output.log
/var/log/cloud-init.log
/var/log/cfn-init.log
/var/log/cfn-init-cmd.log
/var/log/cfn-wire.log

Para analisar todas as instâncias das palavras erro ou falha em qualquer arquivo /var/log/cfn ou /var/log/cloud-init, execute o comando a seguir:

grep -ni 'error\|failure' $(sudo find /var/log -name cfn\* -or -name cloud-init\*)

Observação: o comando anterior retorna o nome do arquivo, número da linha e mensagem de erro.

O valor da propriedade timeout para o atributo CreationPolicy é muito baixo

O atributo CreationPolicy define o valor da propriedade timeout. Confirme se o valor é alto o suficiente para executar tarefas antes que o script cfn-signal envie sinais aos recursos do CloudFormation.

Para verificar o valor da propriedade timeout e comparar os carimbos de hora de sinalização e falha de recursos, conclua as seguintes etapas:

  1. Em um editor de código, abra o modelo do CloudFormation para sua pilha para encontrar o valor da propriedade de timeout.
    Observação: o valor da propriedade timeout é o tempo máximo que o CloudFormation espera por um sinal antes de retornar um erro.
  2. Para obter uma estimativa de quando o script cfn-signal foi ativado, use SSH para se conectar à instância. Em seguida, execute o seguinte comando:
    less /var/log/cfn-init.log
    O arquivo de log mostra um carimbo de data e hora quando o sinal SUCCESS é enviado aos recursos do AWS CloudFormation.
  3. Abra o console do CloudFormation.
  4. Escolha a visualização Eventos.
  5. Escolha o Motivo do status. Expanda a linha do evento com o motivo do status “Failed to receive X resource signal(s) within the specified duration.”
  6. Compare o carimbo de data e hora de sinalização com o de falha do recurso.
    Observação: para uma conclusão bem-sucedida, o script deve enviar o sinal antes que a instância seja criada ou falhe na criação.

O sinal cfn não é enviado da instância

Verifique se o sinal que o CloudFormation recebeu veio da instância. Verifique o log de conexão cfn que está disponível em /var/log/cfn-wire.log. Se a resposta não for 200, talvez haja um problema de conectividade entre sua instância e o endpoint do CloudFormation.

Ao enviar sinais de algum lugar que não seja sua instância, use a API SignalResource. Por exemplo, é possível usar uma função do AWS Lambda para chamar a API SignalResource e, em seguida, enviar o sinal para a pilha. Se você receber um erro, use o CloudWatch Logs para verificar seus registros do Lambda e entender por que o sinal não foi enviado para a pilha.

AWS OFICIALAtualizada há 8 meses