Solução de problemas do CloudFormation - AWS CloudFormation

Solução de problemas do CloudFormation

Ao usar o AWS CloudFormation, você pode encontrar problemas ao criar, atualizar ou excluir pilhas do CloudFormation. As seções a seguir podem ajudar a solucionar alguns problemas comuns que você pode encontrar.

Se houver dúvidas gerais sobre o CloudFormation, consulte as Perguntas frequentes sobre o AWS CloudFormation. Também é possível pesquisar respostas e postar perguntas no Fóruns do AWS CloudFormation.

Guia de solução de problemas

Se houver falha no AWS CloudFormation ao criar, atualizar ou excluir a pilha, você pode visualizar mensagens de erro ou logs para ajudar a saber mais sobre o problema. As tarefas a seguir descrevem métodos gerais para a solução de um problema do CloudFormation. Para obter mais informações sobre erros específicos e soluções, consulte a seção Solucionar erros.

  • Use o console do CloudFormation para exibir o status da pilha. No console, você pode visualizar uma lista de eventos de pilha enquanto sua pilha está sendo criada, atualizada ou excluída. Nessa lista, encontre o evento de falha e, em seguida, visualize o motivo do status desse evento. O motivo do status pode conter uma mensagem de erro do AWS CloudFormation ou de um serviço específico que pode ajudá-lo a resolver o problema. Para obter mais informações sobre a exibição de eventos de pilha, consulte Visualizar dados e recursos da pilha do AWS CloudFormation no AWS Management Console.

  • Para problemas do Amazon EC2, visualize os logs do cfn e do cloud-init. Esses logs são publicados na instância do Amazon EC2, no diretório /var/log/. Esses logs capturam processos e saídas de comandos enquanto o AWS CloudFormation está configurando sua instância. No Windows, visualize o serviço EC2Configure e os logs do cfn em %ProgramFiles%\Amazon\EC2ConfigService e C:\cfn\log.

    Você também pode configurar o modelo do AWS CloudFormation para que os logs sejam publicados no Amazon CloudWatch que exibe os logs no AWS Management Console para que você não precise se conectar à sua instância do Amazon EC2. Para obter mais informações, consulte Visualizar logs do CloudFormation no console no blog de gerenciamento de aplicações.

Solucionar erros

Ao encontrar os seguintes erros na pilha do AWS CloudFormation, você pode usar as seguintes soluções para ajudá-lo a encontrar a origem dos problemas e corrigi-los.

Falha na exclusão da pilha

Para resolver essa situação, tente o seguinte:

  • Alguns recursos devem estar vazios para que possam ser excluídos. Por exemplo, você deve excluir todos os objetos de um bucket do Amazon S3 ou remover todas as instâncias de um grupo de segurança do Amazon EC2 para poder excluir o bucket ou o grupo de segurança.

  • Certifique-se de que você tem as permissões necessárias do IAM para excluir os recursos da pilha. Além das permissões do AWS CloudFormation, você deve ter permissão para usar os serviços subjacentes, como o Amazon S3 ou o Amazon EC2.

  • Quando as pilhas estiverem no estado DELETE_FAILED porque o AWS CloudFormation não pôde excluir um recurso, execute novamente a exclusão com o parâmetro RetainResources e especifique o recurso que o AWS CloudFormation não pode excluir. O AWS CloudFormation exclui a pilha sem excluir o recurso retido. A retenção de recursos é útil quando você não pode excluir um recurso, como um bucket do S3 que contém objetos que você deseja manter, mas você ainda deseja excluir a pilha.

    Depois de excluir a pilha, você pode excluir os recursos retidos manualmente usando o produto da AWS associado a eles.

  • Você não pode excluir pilhas que têm a proteção contra encerramento ativada. Se você tentar excluir uma pilha com proteção contra encerramento ativada, a exclusão falhará e a pilha, incluindo seu status, permanecerá inalterada. Desative a proteção contra encerramento na pilha e, em seguida, execute a operação de exclusão novamente.

    Isso inclui pilhas aninhadas cujas pilhas raiz têm proteção contra encerramento ativada. Desative a proteção contra encerramento na pilha raiz e, em seguida, execute a operação de exclusão novamente. É altamente recomendável que você não exclua pilhas aninhadas diretamente, mas as exclua apenas como parte da exclusão da pilha raiz e de todos os recursos dela.

    Para obter mais informações, consulte Proteger uma pilha contra exclusão.

  • Para todos os outros problemas, se você tiver AWS Support, pode criar um caso de AWS Support. Consulte Entrar em contato com o suporte.

Erro de dependência

Para resolver um erro de dependência, adicione um atributo DependsOn aos recursos que dependem de outros recursos em seu modelo. Em alguns casos, você deve declarar dependências explicitamente para que o AWS CloudFormation possa criar ou excluir recursos na ordem correta. Por exemplo, se você criar um IP elástico e uma VPC com um Internet gateway na mesma pilha, o IP elástico deverá depender do anexo do Internet Gateway. Para obter informações adicionais, consulte Atributo DependsOn.

Erro ao analisar parâmetros ao passar uma lista

Ao usar a AWS Command Line Interface ou o AWS CloudFormation para passar uma lista, adicione o caractere de escape (\) antes de cada vírgula. O exemplo a seguir mostra como você especifica um parâmetro de entrada ao usar a AWS CLI.

ParameterKey=CIDR,ParameterValue='10.10.0.0/16\,10.10.0.0/24\,10.10.1.0/24'

Permissões insuficientes do IAM

Ao trabalhar com uma pilha do AWS CloudFormation, você não precisa só de permissões para usar o AWS CloudFormation, você também deve ter permissão para usar os serviços subjacentes que são descritos em seu modelo. Por exemplo, se estiver criando um bucket do Amazon S3 ou iniciando uma instância do Amazon EC2, você precisa de permissões para o Amazon S3 ou para o Amazon EC2. Revise sua política do IAM e verifique se você tem as permissões necessárias antes de trabalhar com pilhas do AWS CloudFormation. Para obter mais informações, consulte, Controlar o acesso com o AWS Identity and Access Management.

Valor inválido ou propriedade de recurso sem suporte

Ao criar ou atualizar uma pilha do AWS CloudFormation, pode haver uma falha em sua pilha devido a parâmetros de entrada inválidos, nomes de propriedades de recursos sem suporte ou valores de propriedades de recursos sem suporte. Para parâmetros de entrada, verifique se o recurso existe. Por exemplo, quando você especifica um par de chaves do Amazon EC2 ou um ID de VPC, o recurso deve existir em sua conta e na região na qual você está criando ou atualizando a pilha. Você pode usar tipos de parâmetros específicos da AWS para garantir o uso de valores válidos.

Para nomes e valores de propriedades de recursos, atualize seu modelo para usar nomes e valores válidos. Para obter uma lista de todos os recursos e seus nomes de propriedades, consulte Referência de tipos de propriedades e recursos da AWS.

Limite excedido

Verifique se você não atingiu o limite de um recurso. Por exemplo, o número máximo padrão de instâncias do Amazon EC2 que você pode executar é 20. Se tentar criar mais instâncias do Amazon EC2 que o limite de sua conta, haverá falha na criação da instância e você receberá o erro Status=start_failed. Para visualizar os limites padrão da AWS por produto, consulte os limites dos serviços da AWS no AWS General Reference.

Para obter os limites e estratégias de ajuste do AWS CloudFormation, consulte Cotas do AWS CloudFormation.

Além disso, durante uma atualização, se um recurso for substituído, o AWS CloudFormation criará um novo recurso antes de excluir o antigo. Essa substituição pode colocar sua conta acima do limite de recursos, o que provoca uma falha na atualização. Você pode excluir o excesso de recursos ou solicitar um aumento de limite.

As pilhas aninhadas estão paralisadas em UPDATE_COMPLETE_CLEANUP_IN_PROGRESS, UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS ou UPDATE_ROLLBACK_IN_PROGRESS

Falha na reversão de uma pilha aninhada. Devido às potenciais dependências de recursos entre pilhas aninhadas, o AWS CloudFormation não inicia a limpeza de recursos de pilhas aninhadas até que todas as pilhas aninhadas tenham sido atualizadas ou revertidas. Quando há falha na reversão de uma pilha aninhada, o AWS CloudFormation cancela todas as operações, independentemente do estado em que as outras pilhas aninhadas estão. Uma pilha aninhada que concluiu a atualização ou a reversão, mas não recebeu um sinal do AWS CloudFormation para iniciar a limpeza porque houve uma falha na reversão de outras pilhas aninhadas, está em um estado UPDATE_COMPLETE_CLEANUP_IN_PROGRESS ou UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS. Uma pilha aninhada que não pôde ser atualizada, mas não recebeu um sinal para iniciar a reversão, está em um estado UPDATE_ROLLBACK_IN_PROGRESS.

Uma pilha aninhada pode não ser revertida devido a alterações que foram feitas fora do AWS CloudFormation, quando o modelo da pilha não refletir precisamente o estado da pilha. Uma pilha aninhada também pode falhar se um grupo de Auto Scaling tinha tempo limite insuficiente para sinal de recurso quando o grupo foi criado ou atualizado.

Para corrigir a pilha, entre em contato com o AWS Support.

Nenhuma atualização a ser executada

Para atualizar uma pilha do AWS CloudFormation, você deve enviar as alterações do modelo ou do valor do parâmetro ao AWS CloudFormation. No entanto, o AWS CloudFormation não reconhece algumas alterações de modelo como uma atualização, como alterações em uma política de exclusão, política de atualização, declaração de condição ou declaração de saída. Se você precisar fazer essas alterações sem fazer nenhuma outra alteração, você poderá adicionar ou modificar um atributo metadata de qualquer um de seus recursos.

Para obter mais informações sobre como modificar modelos durante uma atualização, consulte Modificar um modelo de pilha.

Falha ao estabilizar recurso durante uma operação de criação, atualização ou exclusão de pilha

Um recurso não respondeu porque a operação excedeu o tempo limite do AWS CloudFormation ou um produto da AWS foi interrompido. Para interrupções de serviços, verifique se o produto relevante da AWS está em execução e tente novamente a operação de pilha.

Se os produtos da AWS forem executados com êxito, verifique se sua pilha contém um dos seguintes recursos:

  • AWS::AutoScaling::AutoScalingGroup para criar, atualizar e excluir operações

  • AWS::CertificateManager::Certificate para criar operações

  • AWS::CloudFormation::Stack para criar, atualizar e excluir operações

  • AWS::ElasticSearch::Domain para atualizar operações

  • AWS::RDS::DBCluster para criar e atualizar operações

  • AWS::RDS::DBInstance para criar, atualizar e excluir operações

  • AWS::Redshift::Cluster para atualizar operações

As operações para esses recursos podem demorar mais tempo que o tempo limite padrão. O tempo limite depende do recurso e das credenciais que você usa. Para estender o tempo limite, especifique uma função de serviço ao executar a operação de pilha. Se já estiver usando uma função de serviço, ou se a pilha contiver um recurso que não está listado, entre em contato com o AWS Support.

Se a sua pilha estiver no estado UPDATE_ROLLBACK_FAILED, consulte Falha na reversão da atualização.

O Grupo de segurança não existe na VPC

Verifique se o security group existe na VPC especificada. Se o security group existir, especifique o ID do security group e não o nome do security group. Por exemplo, o recurso AWS::EC2::SecurityGroupIngress tem as propriedades SourceSecurityGroupName e SourceSecurityGroupId. Para os security groups da VPC, você deve usar a propriedade SourceSecurityGroupId e especificar o ID do security group.

Falha na reversão da atualização

Um recurso dependente não pode retornar para o estado original, provocando falha na reversão (estado UPDATE_ROLLBACK_FAILED). Por exemplo, você pode ter uma pilha que está sendo revertida para uma instância de banco de dados antiga que foi excluída fora do AWS CloudFormation. Como o AWS CloudFormation não sabe que o banco de dados foi excluído, ele pressupõe que a instância de banco de dados ainda existe e tenta reverter, provocando falha na reversão da atualização.

Dependendo da causa da falha, você poderá corrigir o erro manualmente e continuar a reversão. Ao continuar a reversão, você pode retornar sua pilha para o estado de funcionamento (o estado UPDATE_ROLLBACK_COMPLETE) e, em seguida, tentar atualizar a pilha novamente. A lista a seguir descreve as soluções de erros comuns que provocam falhas na reversão da atualização:

  • Falha ao receber o número necessário de sinais

    Use o comando signal-resource para enviar manualmente o número necessário de sinais de êxito ao recurso que está esperando por eles e, em seguida, continue revertendo a atualização. Por exemplo, durante uma reversão de atualização, as instâncias em um grupo de Auto Scaling podem ter uma falha ao sinalizar êxito dentro do tempo limite especificado. Envie sinais de êxito manualmente ao grupo de Auto Scaling. Quando você continuar a reversão da atualização, o AWS CloudFormation verá seus sinais e continuará com a reversão.

  • As alterações em um recurso foram feitas fora do AWS CloudFormation

    Sincronize os recursos manualmente para que eles correspondam ao modelo da pilha original e continue a reversão da atualização. Por exemplo, se tiver excluído manualmente um recurso que o AWS CloudFormation está tentando reverter, você deverá criar esse recurso manualmente com o mesmo nome e propriedades na pilha original.

  • Permissões insuficientes

    Verifique se você tem permissões suficientes do IAM para modificar os recursos e continue a reversão da atualização. Por exemplo, sua política de IAM pode permitir que você crie um bucket do S3, mas não que modifique o bucket. Adicione ações de modificação à sua política.

  • Token de segurança inválido

    O AWS CloudFormation requer um novo conjunto de credenciais. Nenhuma alteração é necessária. Continue a reversão da atualização, o que atualiza as credenciais.

  • Erro de limitação

    Exclua recursos de que você não precisa ou solicite um aumento de cota e, em seguida, continue a reversão da atualização. Por exemplo, se o limite do número de instâncias EC2 de sua conta for 20 e a reversão da atualização exceder esse limite, haverá uma falha.

  • O recurso não estabilizou

    Um recurso não respondeu porque a operação excedeu o tempo limite do AWS CloudFormation ou porque um produto da AWS pode ter sido interrompido. Nenhuma alteração é necessária. Depois que operação do recurso for concluída ou que o produto da AWS entrar em operação novamente, continue revertendo a atualização.

Para continuar a reversão de uma atualização, você pode usar o console do AWS CloudFormation ou a AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte Continuar revertendo uma atualização.

Se nenhuma dessas soluções funcionar, você poderá ignorar os recursos que o AWS CloudFormation não pode reverter com êxito. Para obter mais informações, consulte o parâmetro ResourcesToSkip para a operação ContinueUpdateRollback no AWS CloudFormation API Reference. O AWS CloudFormation define o status dos recursos especificados como UPDATE_COMPLETE e continua a reverter a pilha. Após a reversão ser concluída, o estado dos recursos ignorados será inconsistente com o estado dos recursos no modelo de pilha. Antes de executar outra atualização da pilha, você deve modificar os recursos ou atualizar a pilha para estarem consistentes entre si. Caso contrário poderá haver falha em atualizações subsequentes da pilha, e a pilha poderá se tornar irrecuperável.

A condição de espera não recebeu o número necessário de sinais de uma instância do Amazon EC2

Para resolver essa situação, tente o seguinte:

  • Verifique se a AMI que você está usando tem os scripts auxiliares do AWS CloudFormation instalados. Se a AMI não incluir os scripts auxiliares, você também poderá baixá-los em sua instância. Para obter mais informações, consulte CloudFormation referência de scripts auxiliares.

  • Verifique se o comando cfn-signal foi executado com êxito na instância. Você pode visualizar os logs, por exemplo, /var/log/cloud-init.log ou /var/log/cfn-init.log, para ajudá-lo a depurar a execução da instância. Você pode recuperar os logs fazendo login em sua instância, mas você deve desabilitar a reversão em caso de falha ou o AWS CloudFormation excluirá a instância depois que houver falha na criação da pilha. Você também pode publicar os logs no Amazon CloudWatch. No Windows, você pode visualizar os logs do cfn em C:\cfn\log e os logs do serviço EC2Config em %ProgramFiles%\Amazon\EC2ConfigService.

  • Verifique se a instância tem uma conexão com a Internet. Se estiver em uma VPC, a instância deverá poder se conectar à Internet por meio de um dispositivo NAT se ela estiver em uma sub-rede privada ou por meio de um Internet gateway se estiver em uma sub-rede pública. Para testar a conexão da instância com a Internet, tente acessar uma página da web pública, como http://aws.amazon.com. Por exemplo, você pode executar o seguinte comando na instância. Ele deve retornar um código de status HTTP 200.

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

    Para obter informações sobre como configurar um dispositivo NAT, consulte NAT no Guia do usuário da Amazon VPC.

Recurso removido da pilha, mas não excluído

Durante uma atualização de pilha, o CloudFormation removeu um recurso de uma pilha, mas não excluiu o recurso. O recurso ainda existe, mas não é mais acessível por meio do CloudFormation. Isso pode ocorrer durante atualizações de pilha nas quais:

  • O CloudFormation precisa substituir um recurso existente, então primeiramente ele cria um novo recurso e, em seguida, tenta excluir o recurso antigo.

  • Você removeu o recurso do modelo de pilha, portanto, o CloudFormation tentará excluir o recurso da pilha.

No entanto, pode haver casos em que o CloudFormation não poderá o recurso. Por exemplo, se o usuário não tiver permissões para excluir um recurso de um determinado tipo.

O CloudFormation tentará excluir o recurso antigo três vezes. Se o CloudFormation não puder excluir o recurso antigo, ele removerá o recurso antigo da pilha e continuará a atualizá-la. Quando a atualização da pilha estiver concluída, o CloudFormation emitirá um evento de pilha UPDATE_COMPLETE, mas incluirá um StatusReason que afirma que um ou mais recursos não puderam ser excluídos. O CloudFormation também emitirá um evento DELETE_FAILED para o recurso específico, com um correspondente StatusReason que fornecerá mais detalhes sobre por que o CloudFormation não conseguiu excluir o recurso.

Para solucionar essa situação, exclua o recurso diretamente usando o console ou a API do serviço em questão.

Entrar em contato com o suporte

Se você tiver um AWS Support, poderá criar um caso de suporte técnico em https://console.aws.amazon.com/support/home#/. Antes de entrar em contato com o suporte, reúna as seguintes informações:

  • O ID da pilha. Você pode encontrar o ID da pilha na guia Visão geral do console do AWS CloudFormation. Para obter mais informações, consulte Visualizar dados e recursos da pilha do AWS CloudFormation no AWS Management Console.

    Importante

    Não faça alterações na pilha fora do AWS CloudFormation. Fazer alterações na pilha fora do AWS CloudFormation pode colocar a pilha em um estado irrecuperável.

  • Todas as mensagens de erro da pilha. Para obter informações sobre como visualizar as mensagens de erro da pilha, consulte a seção Guia de solução de problemas.

  • Para problemas do Amazon EC2, reúna os logs do cfn e cloud-init. Esses logs são publicados na instância do Amazon EC2, no diretório /var/log/. Esses logs capturam processos e saídas de comandos enquanto sua instância está sendo configurada. No Windows, colete os logs do serviço EC2Configure e do cfn em %ProgramFiles%\Amazon\EC2ConfigService e C:\cfn\log.

Também é possível pesquisar respostas e postar perguntas no Fóruns do AWS CloudFormation.