Como resolvo o erro “Falha ao receber sinais de recursos X dentro da duração especificada” no AWS CloudFormation?

6 minuto de leitura
0

No AWS CloudFormation, recebo a seguinte mensagem de erro: “Falha ao receber sinais do recurso X dentro da duração especificada.” Como posso resolver esse erro?

Breve descrição

Você recebe esse erro quando uma instância do Amazon Elastic Compute Cloud (Amazon EC2), um grupo do Auto Scaling ou um WaitCondition não recebe sinais de sucesso de uma ou mais instâncias no período especificado pelo atributo CreationPolicy.

Esse erro pode ocorrer em um dos cenários a seguir:

  • Cenário 1: O script cfn-signal não está instalado em uma ou mais instâncias da pilha do AWS CloudFormation.
  • Cenário 2: Há erros de sintaxe ou valores incorretos no modelo do AWS CloudFormation.
  • Cenário 3: O valor da propriedade Tempo limite para o atributo CreationPolicy é muito baixo.
  • Cenário 4: O cfn-signal não é enviado da instância do Amazon EC2.

Observação: os cenários de solução de problemas para esse erro se aplicam somente às pilhas do AWS CloudFormation criadas com instâncias do Linux. Os cenários não se aplicam às instâncias do Windows. Para obter mais informações, consulte Como solucionar problemas de criação de pilhas.

Resolução

Antes de seguir as etapas nos cenários de solução de problemas, defina a opção Reversão em caso de falha para sua pilha do AWS CloudFormation como Não.

Cenário 1: O script cfn-signal não está instalado em uma ou mais instâncias da pilha do AWS CloudFormation

Para confirmar que o script cfn-signal está instalado na instância configurada para enviar sinais aos recursos do AWS CloudFormation, conclua as etapas a seguir:

1.Conecte-se à sua instância Linux usando SSH.

2.Confirme se o script cfn-signal está instalado usando um dos comandos a seguir.

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-signal

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-bootstrap
aws-cfn-bootstrap-1.4-30.amzn2.noarch

Importante: o comando anterior funciona somente em distribuições que usam o RPM Package Manager.

Observação: por padrão, os scripts auxiliares do AWS CloudFormation são instalados na imagem de máquina da Amazon (AMI) do Amazon Linux. Se os scripts auxiliares do AWS CloudFormation não estiverem instalados, consulte a referência de scripts auxiliares do CloudFormation para obter instruções de instalação.

Cenário 2: Há erros de sintaxe ou valores incorretos no modelo do AWS CloudFormation

Para confirmar que a propriedade UserData está configurada para sinalizar os recursos do AWS CloudFormation especificados pelo atributo CreationPolicy, conclua as seguintes etapas:

1.Em um editor de código, abra o modelo do AWS CloudFormation para sua pilha e, em seguida, encontre a seção de propriedades UserData.

2.Verifique se há erros, incluindo erros de sintaxe, espaços ausentes, erros ortográficos e outros erros de digitação.

3.Confirme se os valores das propriedades de pilha, recurso e região estão corretos.

Observação: se você usa um script de reinicialização que inclui a propriedade UserData e chama o script cfn-signal, verifique se há erros de sintaxe ou valores incorretos no script de reinicialização.

Se você sinalizar na tecla de comandos cfn-init, procure informações sobre o sinal nos logs cfn-init. Para pesquisar erros nos logs cloud-init ou cfn-init, conecte-se à sua instância do Amazon EC2 usando SSH. Em seguida, procure mensagens detalhadas de erro ou falha pesquisando a palavra-chave “erro” ou “falha” nos logs a seguir:

/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.

Cenário 3: O valor da propriedade Tempo limite para o atributo CreationPolicy é muito baixo

O valor da propriedade Tempo limiteé definido pelo atributo CreationPolicy. Para confirmar que o valor é alto o suficiente para que as tarefas sejam executadas antes que o script cfn-signal envie sinais aos recursos do AWS CloudFormation, conclua as etapas a seguir.

Importante: as etapas a seguir funcionam somente se a instância não for encerrada (por exemplo, por um grupo de Auto Scaling). Você já definiu a opção Reversão em caso de falha da sua pilha do AWS CloudFormation como Não. Essa opção significa que não há reversão de falhas e que a instância não será encerrada até que você exclua a pilha. Você pode se conectar à instância usando SSH e continuar com as seguintes etapas de solução de problemas.

1.Em um editor de código, abra o modelo do AWS CloudFormation para sua pilha e, em seguida, encontre o valor da propriedade Tempo limite.

Observação: o valor da propriedade Tempo limite é a quantidade máxima de tempo que o AWS CloudFormation espera por um sinal antes de retornar um erro.

2.Para obter uma estimativa de quando o script cfn-signal é acionado, conecte-se à instância usando SSH e execute o comando a seguir:

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. Veja o exemplo a seguir:

2019-01-11 12:46:40,101 [DEBUG] Signaling resource EC2Instance in stack XXXX with unique ID i-045a536a3dfc8ccad and status SUCCESS

3.Abra o console do AWS CloudFormation.

4.Para ver o carimbo de data e hora da falha do recurso para o evento “Falha ao receber sinais do recurso X dentro da duração especificada”, selecione a visualização Eventos.

5.Em Motivo do status, expanda a linha do evento com o motivo do status “Falha ao receber sinais do recurso X dentro da duração especificada”.

6.Compare o carimbo de data e hora de sinalização com o de falha do recurso.

Observação: observe que o sinal foi enviado após a falha na criação do recurso do Amazon EC2. O sinal é enviado antes que o recurso do Amazon EC2 seja criado ou falhe ao ser criado.

Cenário 4: O cfn-signal não é enviado da instância do Amazon EC2

A API SignalResource é útil quando você deseja enviar sinais de qualquer lugar que não seja de uma instância do Amazon EC2.

Por exemplo, você pode usar uma função do AWS Lambda para chamar a API SignalResource e, em seguida, enviar o sinal para a pilha do AWS CloudFormation. Nesse cenário, verifique os logs Lambda com o Amazon CloudWatch Logs. Esses logs ajudam você a descobrir por que o sinal não é enviado para a pilha do AWS CloudFormation.


AWS OFICIAL
AWS OFICIALAtualizada há um ano