Como soluciono problemas na inclusão de metadados em uma instância do EC2 no CloudFormation?

Última atualização: 12/04/2022

Usei AWS::CloudFormation::Init para incluir metadados em uma instância do Amazon Elastic Cloud Compute (Amazon EC2), mas não vejo as alterações na instância.

Descrição breve

Os seguintes motivos podem resultar em problemas com metadados de instância do EC2 em uma pilha do AWS CloudFormation:

  • O script auxiliar cfn-init não está instalado em uma ou mais instâncias da pilha do CloudFormation. Para resolver esse problema, conclua as etapas da seção Verificar se o script auxiliar cfn-init está instalado.
  • A instância não está conectada à Internet. Para resolver esse problema, conclua as etapas na seção Verificar se a instância está conectada à Internet.
  • O modelo do CloudFormation contém erros de sintaxe ou valores incorretos. Para resolver esse problema, conclua as etapas na seção Procurar por erros nos logs cloud-init ou cfn-init.

Importante: antes de concluir as seguintes resoluções, defina a opção Rollback on failure (Reverter em caso de falha) para sua pilha do CloudFormation como No (Não).

Observação: as seguintes resoluções são específicas para pilhas do CloudFormation criadas com instâncias do Linux.

Resolução

Verificar se o script auxiliar cfn-init está instalado

Para confirmar se o cfn-init está instalado na instância configurada para enviar sinais aos recursos do CloudFormation:

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

2.    Execute um dos seguintes comandos para verificar se o pacote cfn-init ou aws-cfn-bootstrap está instalado em seu diretório.

cfn-init:

$ sudo find / -name cfn-init
/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init

-ou-

pacote aws-cfn-bootstrap:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-34.24.amzn1.noarch

Importante: o comando anterior funciona somente em distribuições que usam o Gerenciador de pacotes RPM.

Observação: por padrão, os scripts auxiliares do CloudFormation são instalados na imagem de máquina da Amazon (AMI) do Amazon Linux. Se os scripts auxiliares do CloudFormation não estiverem instalados, consulte Referência de scripts auxiliares do CloudFormation para obter instruções sobre como instalá-los.

Verificar se a instância está conectada à Internet

Se a instância estiver em uma Amazon Virtual Private Cloud (Amazon VPC), ela poderá se conectar à Internet por meio de:

  • Um dispositivo NAT em uma sub-rede privada
  • Um gateway da Internet em uma sub-rede pública

Para testar a conexão da instância com a Internet, acesse uma página pública da Web, como a da AWS, e execute um comando curl na instância. Por exemplo:

curl -I https://aws.amazon.com

Observação: se a instância estiver conectada à Internet, o comando retornará um código de status HTTP 200.

Se você estiver usando um endpoint de VPC de interface, o endpoint e a instância deverão estar localizados na mesma região da AWS. Além disso, o grupo de segurança anexado ao endpoint de interface deve permitir conexões de entrada na porta 443 provenientes da sub-rede privada da Amazon VPC.

Procurar por erros nos logs cloud-init ou cfn-init

Para procurar por erros nos logs cloud-init ou cfn-init:

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

2.    Procure por mensagens detalhadas de erro ou falha pesquisando as palavras-chave “error” (erro) ou “failure” (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

Para analisar todas as ocorrências das palavras “error” ou “failure” nos arquivos /var/log/cfn ou /var/log/cloud-init, execute o seguinte comando:

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

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

Procure por cfn-init.log. Se não conseguir encontrá-lo, o cfn-init não foi executado. Você também deve verificar cloud-init-output.log e cloud-init.log para ver se houve uma falha ao executar os dados do usuário. Após identificar o erro, corrija-o com base na mensagem de erro e recrie a pilha.

Se cfn-init.log existir, o cfn-init foi executado, mas ocorreu uma falha. Verifique cfn-init.log para ver o que deu errado e corrija o problema com base na mensagem de erro.

Para confirmar se a propriedade UserData está configurada para executar cfn-init, 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 propriedade 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.
  4. Para a função intrínseca Fn::Join da propriedade UserData, use a opção -v para executar cfn-init no modo detalhado. Veja os modelos de exemplo em JSON e YAML.