Práticas recomendadas do CloudFormation - AWS CloudFormation
Encurtar o ciclo de feedback para melhorar a velocidade de desenvolvimentoOrganizar pilhas por ciclo de vida e propriedadeUse referências entre pilhas para retornar o valor de uma saída exportada por outra pilhaUse os StackSets do AWS CloudFormation para implantações em várias contas e em várias regiõesVerificar cotas para todos os tipos de recursosReutilizar modelos para replicar pilhas em vários ambientesUsar módulos para reutilizar configurações de recursosAdote a infraestrutura como práticas de códigoNão incorporar credenciais em seus modelosUsar tipos de parâmetros específicos da AWSUsar restrições de parâmetrosUse pseudoparâmetros para promover a portabilidadeUsar AWS::CloudFormation::Init para implantar aplicações de software em instâncias do Amazon EC2Usar os scripts auxiliares mais recentesValidar modelos antes de usá-losUsando YAML ou JSON para criação de modelosImplemente uma estratégia abrangente de marcaçãoAproveite as macros de modelo para transformações avançadasGerenciar todos os recursos de pilha via CloudFormationCriar conjuntos de alteração antes de atualizar as pilhasUse as políticas de pilha para proteger os recursosUse o AWS CloudTrail para registrar chamadas do CloudFormationUsar revisões de código e controles de revisão para gerenciar seus modelosAtualizar suas instâncias do Amazon EC2 regularmenteUse a detecção de desvios regularmenteConfigurar gatilhos de reversão para recuperação automáticaImplemente estratégias eficazes de refatoração de pilhasUse os hooks do CloudFormation para gerenciamento do ciclo de vidaUse o Gerador de IaC para criar modelos com recursos existentesUse AWS Infrastructure Composer para design de modelo visualConsidere o uso do AWS Cloud Development Kit (AWS CDK) para uma infraestrutura complexaUsar o IAM para controlar o acessoAplicação do princípio de privilégio mínimoParâmetros confidenciais segurosImplemente a política como código com o AWS CloudFormation Guard

Práticas recomendadas do CloudFormation

As práticas recomendadas são sugestões que podem ajudar você a usar o CloudFormation de forma mais eficaz e adotar práticas seguras em todo o seu fluxo de trabalho. Saiba como planejar e organizar suas pilhas, criar modelos que descrevem os recursos e os aplicativos de software que são executados neles, e gerenciar as pilhas e seus respectivos recursos. As práticas recomendadas a seguir são baseadas em experiência real de clientes atuais do CloudFormation.

Planejamento e organização
Criação de modelos
Gerenciamento de pilhas
Ferramentas de criação
Segurança e conformidade

Encurtar o ciclo de feedback para melhorar a velocidade de desenvolvimento

Adote práticas e ferramentas que ajudam a reduzir o ciclo de feedback da infraestrutura que você descreve com os modelos do CloudFormation. Isso inclui fazer mais cedo o linting e os testes de modelos em sua estação de trabalho. Com isso, você descobre possíveis problemas de sintaxe e configuração antes mesmo de enviar suas contribuições para um repositório de código-fonte. A descoberta precoce desses problemas ajuda a evitar que eles atinjam os ambientes formais do ciclo de vida, como desenvolvimento, garantia de qualidade e produção. Essa estratégia de testar cedo e antecipar-se à falha tem a vantagem de reduzir o tempo de espera de retrabalho, diminuir as possíveis áreas de impacto e aumentar seu nível de confiança no sucesso das operações de provisionamento.

As opções de ferramentas que ajudam você a adotar a prática de antecipar-se à falha incluem as ferramentas de linha de comando AWS CloudFormation Linter (cfn-lint) e TaskCat. A ferramenta cfn-lint permite validar os modelos do CloudFormation em relação à Especificação de recursos do AWS CloudFormation. Isso inclui verificar se foram usados valores válidos nas propriedades dos recursos, bem como as práticas recomendadas. Os plug-ins para o cfn-lint estão disponíveis para vários editores de código, o que permite que você visualize os problemas no editor e obtenha feedback direto da ferramenta de linter. Você também pode optar por integrar o cfn-lint à configuração do repositório de código-fonte, para poder validar os modelos quando confirmar suas contribuições. Para obter mais informações, consulte Validação pré-confirmação do Git de modelos do AWS CloudFormation com o cfn-lint. Depois de realizar o linting inicial e corrigir quaisquer problemas que o cfn-lint possa ter apontado, você poderá usar o TaskCat para testar seus modelos criando programaticamente pilhas nas Regiões da AWS de sua escolha. O TaskCat também gera um relatório com os resultados de aprovação/reprovação para cada região escolhida.

Para obter uma demonstração prática passo a passo de como usar as duas ferramentas para encurtar o ciclo de feedback, siga o Laboratório de linting e testes do Workshop do AWS CloudFormation.

Organizar pilhas por ciclo de vida e propriedade

Use o ciclo de vida e a propriedade dos recursos da AWS para ajudar você a decidir quais deles devem estar contidos em cada pilha. Inicialmente, é possível colocar todos os recursos em uma pilha, porém, à medida que ela cresce em escala e aumenta em escopo, o gerenciamento de uma única pilha pode ser trabalhoso e demorado. Ao agrupar recursos com ciclos de vida e propriedade comuns, os proprietários podem fazer alterações no conjunto de recursos deles usando um processo e uma programação próprios sem afetar outros recursos.

Por exemplo, imagine uma equipe de desenvolvedores e engenheiros que possuem um site hospedado em instâncias do Amazon EC2 Auto Scaling atrás de um balanceador de carga. Como o site tem seu próprio ciclo de vida e é mantido pela equipe do site, é possível criar uma pilha para o site e seus respectivos recursos. Agora, imagine que o site também usa bancos de dados de backend, em que os bancos de dados estão em uma pilha separada que cujas propriedade e manutenção são dos administradores de bancos de dados. Sempre que a equipe do site ou a equipe do banco de dados precisa atualizar seus recursos, eles podem fazê-lo sem afetar a pilha uns dos outros. Se todos os recursos estavam em uma única pilha, a coordenação e a comunicação de atualizações pode ser difícil.

Para obter mais orientações sobre como organizar suas pilhas, você pode usar duas estruturas comuns: uma arquitetura em várias camadas e a arquitetura orientada a serviços (SOA).

A arquitetura em camadas organiza pilhas em várias camadas horizontais que se sobrepõem, em que cada camada tem uma dependência na camada diretamente abaixo dela. Você pode ter uma ou mais pilhas em cada camada, mas dentro de cada camada, suas pilhas devem ter recursos da AWS com ciclos de vida e propriedade semelhantes.

Com uma arquitetura orientada a serviços, é possível organizar grandes problemas de negócios em partes gerenciáveis. Cada uma dessas partes é um serviço que tem uma finalidade claramente definida e representa uma unidade independente de funcionalidade. Você pode mapear esses serviços para uma pilha, em que cada pilha tenha seu próprio ciclo de vida e proprietários. Esses serviços (pilhas) podem ser conectados para que possam interagir uns com os outros.

Use referências entre pilhas para retornar o valor de uma saída exportada por outra pilha

Ao organizar os recursos da AWS com base no ciclo de vida e na propriedade, talvez você queira criar uma pilha que use recursos existentes em outra pilha. Você pode codificar valores ou usar parâmetros de entrada para transmitir os nomes e os IDs dos recursos. No entanto, esses métodos podem dificultar a reutilização dos modelos ou aumentar a sobrecarga para colocar uma pilha em execução. Em vez disso, use as referências entre pilhas para retornar o valor de uma saída exportada por outra pilha para que outras pilhas possam usá-la. As pilhas podem usar os recursos exportados chamando-os com a função Fn::ImportValue.

Por exemplo, você pode ter uma pilha de rede que inclui uma VPC, um security group e uma sub-rede. Você deseja que todas aplicações web públicas usem esses recursos. Ao exportar os recursos, você permite que todas as pilhas com aplicações web públicas usem tais recursos. Para obter mais informações, consulte Obter resultados exportados de uma pilha do CloudFormation implantada.

Use os StackSets do AWS CloudFormation para implantações em várias contas e em várias regiões

Os StackSets do AWS CloudFormation amplia a capacidade das pilhas, permitindo que você crie, atualize ou exclua pilhas em várias contas e regiões com uma única operação. Use StackSets para implantar componentes comuns de infraestrutura, controles de conformidade ou serviços compartilhados em toda a sua organização.

Ao usar StackSets, implemente permissões gerenciadas por serviços com AWS Organizations para simplificar o gerenciamento de permissões. Essa abordagem permite que você implante os StackSets em contas da sua organização sem a necessidade de configurar manualmente os perfis do IAM em cada conta.

Para obter mais informações sobre os StackSets, consulte Conceitos de StackSets.

Verificar cotas para todos os tipos de recursos

Antes de executar uma pilha, certifique-se de que pode criar todos os recursos que desejados sem atingir os limites de sua conta da AWS. Se você atingir um limite, o CloudFormation não criará a pilha com êxito até que você aumente sua cota ou exclua recursos adicionais. Cada serviço pode ter vários limites que você deve levar em conta antes de executar uma pilha. Por exemplo, por padrão, você pode executar somente 2000 pilhas do CloudFormation por região em sua Conta da AWS. Para mais informações sobre limites e como aumentar os limites padrão, consulte Cotas de serviços da AWS, no Referência geral da AWS.

Reutilizar modelos para replicar pilhas em vários ambientes

Depois de configurar suas pilhas e recursos, você pode reutilizar os modelos para replicar sua infraestrutura em vários ambientes. Por exemplo, você pode criar ambientes para desenvolvimento, teste e produção para testar as alterações antes de implementá-las na produção. Para tornar os modelos reutilizáveis, use as seções de parâmetros, mapeamentos e condições para personalizar suas pilhas ao criá-las. Por exemplo, para ambientes de desenvolvimento, é possível especificar um tipo de instância de custo mais baixo em comparação com o ambiente de produção, mas todas as outras configurações e definições são as mesmas. Para obter mais informações sobre parâmetros, mapeamentos e condições, consulte Seções de modelos do CloudFormation.

Usar módulos para reutilizar configurações de recursos

À medida que sua infraestrutura cresce, podem surgir padrões comuns em que é possível declarar os mesmos componentes em cada um dos modelos. Os módulos são uma maneira de empacotar configurações de recursos para inclusão entre modelos de pilha, de modo transparente, gerenciável e repetível. Os módulos podem encapsular configurações comuns de serviço e práticas recomendadas como blocos de construção modulares e personalizáveis para você incluir em seus modelos de pilha.

Esses blocos de construção podem ser para um único recurso, como práticas recomendadas para definir uma instância do Amazon Elastic Compute Cloud (Amazon EC2), ou podem ser para vários recursos, para definir padrões comuns de arquitetura de aplicações. Esses blocos fundamentais podem ser aninhados a outros módulos, para que você possa empilhar suas práticas recomendadas em blocos fundamentais de nível superior. Módulos do CloudFormation estão disponíveis no Registro do CloudFormation, para que você possa utilizá-los como um recurso nativo. Quando você usa um módulo do CloudFormation, o modelo de módulo é expandido para o modelo de consumo, o que possibilita acessar os recursos dentro do módulo usando uma função Ref ou Fn::GetAtt. Para obter mais informações, consulte Criar configurações de recursos reutilizáveis que podem ser incluídas em modelos com os módulos do CloudFormation.

Adote a infraestrutura como práticas de código

Trate seus modelos do CloudFormation como código implementando práticas de infraestrutura como código (IaC). Armazene seus modelos em sistemas de controle de versão, implemente análises de código e use testes automatizados para validar as alterações. Essa abordagem garante consistência, melhora a colaboração e fornece uma trilha de auditoria para alterações na infraestrutura.

Considere implementar pipelines de CI/CD para seu código de infraestrutura para automatizar o teste e a implantação de seus modelos do CloudFormation. Ferramentas como AWS CodePipeline, AWS CodeBuild e AWS CodeDeploy podem ser usadas para criar fluxos de trabalho automatizados para suas implantações de infraestrutura.

Para obter mais informações sobre a implementação das práticas recomendadas de IaC, consulte Usando o AWS CloudFormation como uma ferramenta de IaC.

Para obter mais informações sobre o uso da entrega contínua com o CloudFormation, consulte Entrega contínua com o CodePipeline.

Não incorporar credenciais em seus modelos

Em vez de incorporar informações confidenciais nos modelos do CloudFormation, é recomendável usar referências dinâmicas no modelo de pilha.

As referências dinâmicas fornecem uma maneira compacta e avançada para você fazer referência a valores externos que são armazenados e gerenciados em outros serviços, como o Repositório de parâmetros do AWS Systems Manager ou o AWS Secrets Manager. Quando você usa uma referência dinâmica, o CloudFormation recupera o valor da referência especificada, se necessário, durante operações de pilha e conjunto de alterações e passa o valor para o recurso apropriado. No entanto, o CloudFormation nunca armazena o valor real do parâmetro. Para obter mais informações, consulte Usar referências dinâmicas para especificar valores de modelo.

O AWS Secrets Manager ajuda você a criptografar, armazenar e recuperar credenciais com segurança para bancos de dados e outros serviços. O Repositório de parâmetros do AWS Systems Manager fornece armazenamento hierárquico seguro para o gerenciamento de dados de configuração.

Para obter mais informações sobre a definição de parâmetros do modelo, consulte Sintaxe de Parameters de modelo do CloudFormation.

Usar tipos de parâmetros específicos da AWS

Se o modelo exige entradas de valores existentes específicos da AWS, como IDs existentes do Amazon Virtual Private Cloud ou um nome de par de chaves do Amazon EC2, use os tipos de parâmetros específicos da AWS. Por exemplo, é possível especificar um parâmetro como tipo AWS::EC2::KeyPair::KeyName, que usa um nome de par de chaves existente que está em sua Conta da AWS e na região em que você está criando a pilha. O CloudFormation pode validar rapidamente valores de tipos de parâmetros específicos da AWS antes de criar a pilha. Além disso, se você usar o console do CloudFormation, o CloudFormation mostrará uma lista suspensa de valores válidos, de modo que você não precisará examinar ou memorizar os IDs da VPC corretos ou os nomes de pares de chaves. Para obter mais informações, consulte Especificar recursos existentes no runtime com tipos de parâmetros fornecidos pelo CloudFormation.

Usar restrições de parâmetros

Com restrições, é possível descrever valores de entrada permitidos para que o CloudFormation detecte todos os valores inválidos antes de criar uma pilha. É possível definir restrições como um tamanho mínimo ou máximo e padrões permitidos. Por exemplo, você pode definir as restrições em um valor de nome de usuário do banco de dados para que ele tenha no mínimo oito caracteres e contenha apenas caracteres alfanuméricos. Para obter mais informações, consulte Sintaxe de Parameters de modelo do CloudFormation.

Use pseudoparâmetros para promover a portabilidade

Você pode usar pseudoparâmetros em seus modelos como argumentos para funções intrínsecas, como Ref e Fn::Sub. Os pseudoparâmetros são parâmetros que são predefinidos pelo CloudFormation. Você não os declará-las em seu modelo. O uso de pseudoparâmetros em funções intrínsecas aumenta a portabilidade de seus modelos de pilha entre regiões e contas.

Por exemplo, imagine que você deseja criar um modelo em que, para uma determinada propriedade de recurso, seja necessário especificar o nome do recurso da Amazon (ARN) de outro recurso existente. Nesse caso, o recurso existente é um recurso do AWS Systems Manager Parameter Store com o seguinte ARN: arn:aws:ssm:us-east-1:123456789012:parameter/MySampleParameter. Você precisará adaptar o formato do ARN à partição, região e ID da conta da AWS de destino. Em vez de realizar a codificação rígida desses valores, você pode usar os pseudoparâmetros AWS::Partition, AWS::Region e AWS::AccountId para tornar seu modelo mais portátil. Nesse caso, o exemplo a seguir mostra como encadear elementos em um ARN com o CloudFormation: !Sub 'arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/MySampleParameter.

Como outro exemplo, suponha que você deseje compartilhar recursos ou configurações em várias pilhas. Neste exemplo, suponha que você tenha criado uma sub-rede para sua VPC e, em seguida, exportado seu ID para uso com outras pilhas na mesma região e Conta da AWS. Em outra pilha, você faz referência ao valor exportado do ID da sub-rede ao descrever uma instância do Amazon EC2. Para obter um exemplo detalhado sobre o uso do campo de saída Export e da função intrínseca Fn::ImportValue, consulte Consultar saídas de recurso em outra pilha do CloudFormation.

As exportações de pilha devem ser exclusivas por conta e região. Portanto, nesse caso, você pode usar o pseudoparâmetro AWS::StackName para criar um prefixo para sua exportação. Como os nomes de pilha também devem ser exclusivos por conta e região, o uso desse pseudoparâmetro como prefixo aumenta a possibilidade de haver um nome de exportação exclusivo e, ao mesmo tempo, promove uma abordagem reutilizável entre as pilhas das quais você exporta valores. Alternativamente, você pode usar um prefixo de sua escolha.

Usar AWS::CloudFormation::Init para implantar aplicações de software em instâncias do Amazon EC2

Ao executar pilhas, você pode instalar e configurar aplicativos de software em instâncias do Amazon EC2 usando o script auxiliar cfn-init e o recurso AWS::CloudFormation::Init. Ao usar AWS::CloudFormation::Init, você pode descrever as configurações que deseja em vez criar o script de etapas procedimentais. Também é possível atualizar as configurações sem recriar instâncias. E se algo errado der errado com a configuração, o CloudFormation gerará logs que podem ser usados para investigar problemas.

Em seu modelo, especifique estados de instalação e configuração no recurso AWS::CloudFormation::Init. Para obter uma explicação detalhada que mostra como usar cfn-init e AWS::CloudFormation::Init, consulte Implantar aplicações no Amazon EC2.

Usar os scripts auxiliares mais recentes

Os scripts auxiliares do CloudFormation são atualizados periodicamente. Certifique-se de incluir o seguinte comando na propriedade UserData do seu modelo antes de chamar os scripts auxiliares para garantir que suas instâncias executadas obtenham os scripts auxiliares mais recentes:

yum install -y aws-cfn-bootstrap

Para obter mais informações sobre como receber os scripts auxiliares mais recentes, consulte a Referência de scripts auxiliares do CloudFormation no Guia de referência de modelos do AWS CloudFormation.

Validar modelos antes de usá-los

Antes de usar um modelo para criar ou atualizar uma pilha, você pode usar o CloudFormation para validá-lo. A validação de um modelo pode ajudá-lo a perceber alguns erros de sintaxe e semântica, como dependências circulares, antes que o CloudFormation crie algum recurso. Se você usar o console do CloudFormation, ele validará automaticamente o modelo depois que você especificar os parâmetros de entrada. Para a AWS CLI ou a API do CloudFormation, use o comando validate-template da CLI ou a operação ValidateTemplate da API.

Durante a validação, o CloudFormation primeiro verifica se o modelo é JSON válido. Caso não seja, o CloudFormation verifica se o modelo é YAML válido. Se as duas verificações falharem, o CloudFormation retornará um erro de validação de modelo.

Validar modelos para a conformidade com a política da organização

Você também pode validar a conformidade do seu modelo com as diretrizes da política da organização. O AWS CloudFormation Guard (cfn-guard) é uma ferramenta de interface de linha de comando (CLI) de código aberto que fornece uma linguagem de política como código para definir regras que podem verificar as configurações de recursos obrigatórios e proibidos. Ele permite que você valide seus modelos em relação a essas regras. Por exemplo, os administradores podem criar regras para garantir que os usuários sempre criem buckets do Amazon S3 criptografados.

É possível usar o cfn-guard localmente, durante a edição de modelos, ou automaticamente, como parte de um pipeline de CI/CD para interromper a implantação de recursos não compatíveis.

Além disso, o cfn-guard inclui um recurso, rulegen, que permite extrair regras de modelos existentes compatíveis do CloudFormation.

Para obter mais informações, consulte o repositório cfn-guard no GitHub.

Usando YAML ou JSON para criação de modelos

O CloudFormation é compatível com os formatos YAML e JSON para modelos. Cada um tem suas vantagens e a escolha depende de suas necessidades específicas:

Use YAML quando

  • Você prioriza a legibilidade e a capacidade de manutenção humana

  • Você deseja incluir comentários para documentar seu modelo

  • Você está trabalhando em modelos complexos com estruturas aninhadas

  • Você deseja usar atributos específicos do YAML, como âncoras e aliases, para reduzir a repetição

Use JSON quando:

  • Você precisa se integrar com ferramentas ou sistemas que preferem JSON

  • Você está trabalhando com geração ou manipulação programática de modelos

  • Você precisa de uma validação rigorosa de dados

O YAML geralmente é recomendado para criação manual de modelos devido à sua legibilidade e suporte a comentários. É particularmente útil para modelos complexos em que a estrutura baseada em recuo ajuda a visualizar hierarquias de recursos. O JSON pode ser vantajoso em fluxos de trabalho automatizados ou ao trabalhar com APIs que esperam entrada JSON. Também é benéfico quando você precisa garantir a adesão estrita a uma estrutura específica. Independentemente do formato escolhido, concentre-se na criação de modelos bem estruturados, documentados e de fácil manutenção. Se estiver usando o YAML, aproveite seus atributos, como âncoras e aliases, para reduzir a repetição e melhorar a capacidade de manutenção.

Implemente uma estratégia abrangente de marcação

Implemente uma estratégia de marcação consistente para todos os recursos criados pelos seus modelos do CloudFormation. As tags ajudam na organização de recursos, alocação de custos, controle de acesso e automação. Considere incluir tags para ambiente, proprietário, centro de custos, aplicação e finalidade.

Use a propriedade de AWS::CloudFormation::Stack do recurso do Tags para aplicar tags a todos os recursos compatíveis em uma pilha. Você também pode usar a propriedade TagSpecifications disponível em vários tipos de recursos para aplicar tags durante a criação do recurso.

Para obter mais informações sobre marcação, consulte Recursos de tag.

Aproveite as macros de modelo para transformações avançadas

As macros do CloudFormation permitem que você realize processamento personalizado em modelos, desde ações simples, como operações de localizar e substituir, até transformações complexas que geram recursos adicionais. Use macros para ampliar os recursos dos modelos do CloudFormation e implementar padrões reutilizáveis em toda a sua organização.

O AWS Serverless Application Model é um exemplo de macro que simplifica o desenvolvimento de aplicações com tecnologia sem servidor. Considere criar macros personalizadas para padrões e requisitos específicos da organização.

Para obter mais informações sobre o uso de macros em seus modelos, consulte Visão geral das macros do CloudFormation.

Gerenciar todos os recursos de pilha via CloudFormation

Depois de iniciar uma pilha, use o console do CloudFormation, a API ou a AWS CLI para atualizar recursos na sua pilha. Não faça alterações nos recursos da pilha fora do CloudFormation. Isso pode criar uma incompatibilidade entre seu modelo de pilha e o estado atual dos recursos da pilha, o que pode causar erros se você atualizar ou excluir a pilha. Isso é conhecido como deriva. Se uma alteração for feita em um recurso fora do modelo do CloudFormation e você atualizar a pilha, as alterações feitas diretamente no recurso serão descartadas, e a configuração do recurso será revertida para a configuração no modelo.

Para obter mais informações sobre o desvio, consulte O que é desvio?.

Para obter mais informações sobre como atualizar pilhas, consulte Atualizar uma pilha.

Criar conjuntos de alteração antes de atualizar as pilhas

Conjuntos de alterações permitem que você veja como as alterações propostas para uma pilha podem afetar os recursos em execução antes de implementá-las. O CloudFormation não fará alterações na pilha até que você execute o conjunto de alterações, permitindo que você decida se deseja continuar com as alterações propostas ou criar outro conjunto de alterações.

Use conjuntos de alterações para verificar como as alterações podem afetar os recursos em execução, especialmente em relação a recursos críticos. Por exemplo, se você alterar o nome de uma instância de banco de dados do Amazon RDS, o CloudFormation criará um novo banco de dados e excluirá o antigo. Você perderá os dados do banco de dados antigo, a menos que já tenha feito o backup dele. Se você gerar um conjunto de alterações, verá que sua alteração substituirá seu banco de dados. Isso pode ajudar no planejamento antes de atualizar a pilha. Para obter mais informações, consulte Atualizar pilhas do CloudFormation usando conjuntos de alterações.

Use as políticas de pilha para proteger os recursos

As políticas de pilha ajudam a proteger recursos de pilha críticos contra atualizações não intencionais capazes de fazer com que os recursos sejam interrompidos ou até mesmo substituídos. Uma política de pilha é um documento JSON que descreve quais ações de atualização podem ser executadas nos recursos designados. Especifique uma política de pilha sempre que criar uma pilha com recursos críticos.

Durante uma atualização de pilha, é necessário especificar explicitamente os recursos protegidos que deseja atualizar, caso contrário, nenhuma alteração será feita nos recursos protegidos. Para obter mais informações, consulte Impedir atualizações nos recursos de pilha.

Use o AWS CloudTrail para registrar chamadas do CloudFormation

O AWS CloudTrail rastreia qualquer pessoa que faça chamadas de API do CloudFormation na Conta da AWS. As chamadas de API são registradas em log sempre que alguém usa a API do CloudFormation, o console do CloudFormation, um console de back-end ou comandos da AWS CLI do CloudFormation. Ative o registro em log e especifique um bucket do Amazon S3 para armazenar os logs. Dessa forma, se você precisar, poderá auditar quem fez qual chamada do CloudFormation em sua conta.

Para obter mais informações, consulte Registrar em log chamadas de API do AWS CloudFormation com o AWS CloudTrail.

Usar revisões de código e controles de revisão para gerenciar seus modelos

Os modelos de pilha descrevem a configuração de seus recursos da AWS, como seus respectivos valores de propriedades. Para analisar as alterações e manter um histórico exato de seus recursos, use revisões de código e controles de revisão. Esses métodos podem ajudá-lo a rastrear as alterações entre versões diferentes de seus modelos, o que pode ajudar você a rastrear alterações nos recursos de sua pilha. Além disso, com a manutenção de um histórico, sempre é possível reverter a pilha para uma determinada versão do modelo.

Atualizar suas instâncias do Amazon EC2 regularmente

Em todas as instâncias Windows do Amazon EC2 e instâncias Linux do Amazon EC2 criadas com o CloudFormation, execute regularmente o comando yum update para atualizar o pacote RPM. Isso garante que você obtenha as mais recentes correções e atualizações de segurança.

Use a detecção de desvios regularmente

Use regularmente o atributo de detecção de desvios do CloudFormation para identificar recursos que foram modificados fora do gerenciamento do CloudFormation. Detectar e resolver desvios ajuda a manter a integridade de sua abordagem de infraestrutura como código e garante que seus modelos reflitam com precisão o estado dos recursos implantados.

Considere implementar a detecção automatizada de desvios como parte de seus procedimentos operacionais. Você pode usar as funções do AWS Lambda acionadas pelas regras do Amazon EventBridge para verificar periodicamente se há desvios e notificar sua equipe quando forem detectadas discrepâncias.

Para obter mais informações sobre desvios, consulte Detectar alterações de configuração não gerenciadas em pilhas e recursos com a detecção de desvios.

Configurar gatilhos de reversão para recuperação automática

Use os gatilhos de reversão para especificar os alarmes do Amazon CloudWatch que o CloudFormation deve monitorar durante as operações de criação e atualização da pilha. Se algum dos alarmes especificados entrar no estado de ALARM, o CloudFormation reverte automaticamente toda a operação da pilha, ajudando a garantir que sua infraestrutura permaneça estável.

Configure acionadores de reversão para métricas críticas, como taxas de erro da aplicação, utilização de recursos do sistema ou métricas comerciais personalizadas que indicam a integridade de sua aplicação e da infraestrutura.

Para obter mais informações sobre gatilhos de reversão, consulte Reverter sua pilha em caso de violação de alarme.

Implemente estratégias eficazes de refatoração de pilhas

À medida que sua infraestrutura evolui, talvez seja necessário refatorar suas pilhas do CloudFormation para melhorar a capacidade de manutenção, reduzir a complexidade ou se adaptar às mudanças nos requisitos. A refatoração de pilhas exige a reestruturação de seus modelos e recursos, preservando o comportamento e a funcionalidade externos. É vantajoso usar a refatoração de pilhas com o CloudFormation das seguintes formas:

  • Divisão de pilhas monolíticas: divida pilhas grandes e complexas em pilhas menores e mais gerenciáveis, organizadas por ciclo de vida ou propriedade

  • Consolidação de recursos relacionados: combine recursos relacionados de várias pilhas em uma única pilha coesa para simplificar o gerenciamento

  • Extração de componentes reutilizáveis: mova padrões comuns para módulos ou pilhas aninhadas para promover a reutilização e a consistência

  • Aperfeiçoamento da organização dos recursos: reestruture os recursos dentro de uma pilha para refletir melhor seus relacionamentos e dependências

Para obter mais informações sobre como refatorar suas pilhas do CloudFormation, consulte Refatoração de pilhas.

Use os hooks do CloudFormation para gerenciamento do ciclo de vida

Os hooks do CloudFormation fornecem código que inspeciona proativamente a configuração de seus recursos da AWS antes do provisionamento e executa verificações de validação complexas. Eles verificam se seus recursos, pilhas e conjuntos de alterações estão em conformidade com as necessidades de segurança, operacionais e de otimização de custos de sua organização. Eles fornecem avisos antes do provisionamento de um recurso ou falham na operação e a interrompem completamente, dependendo de como ela foi configurada. Violações e avisos são registrados no Amazon CloudWatch para fornecer visibilidade sobre implantações não compatíveis.

Para obter mais informações sobre essas práticas recomendadas para Hooks, consulte Conceitos de Hooks do AWS CloudFormation.

Para obter mais informações sobre o que os Hooks podem fazer pelos seus recursos do CloudFormation, consulte O que são Hooks do AWS CloudFormation?

Use o Gerador de IaC para criar modelos com recursos existentes

O gerador de IaC do CloudFormation (infraestrutura como código) ajuda você a criar modelos do CloudFormation a partir de seus recursos da AWS existentes. Essa capacidade é particularmente útil quando você precisa replicar a infraestrutura existente, documentar recursos criados manualmente ou colocar recursos anteriormente não gerenciados sob o gerenciamento do CloudFormation. O gerador de IaC é útil para criar seus modelos do CloudFormation das seguintes maneiras:

  • Criação acelerada de modelos: gere modelos com recursos existentes em vez de escrevê-los do zero

  • Infraestrutura consistente: garanta que os novos ambientes correspondam aos existentes usando modelos gerados como ponto de partida

  • Migração para a infraestrutura como código: coloque gradualmente os recursos criados manualmente sob o gerenciamento do CloudFormation

  • Documentação: crie um registro de sua infraestrutura existente em formato de modelo

Para obter mais informações sobre o Gerador de IaC, consulte Gerar modelos de recursos existentes com o gerador de IaC.

Use AWS Infrastructure Composer para design de modelo visual

O AWS Infrastructure Composer é uma ferramenta de design visual que ajuda a criar, visualizar e modificar modelos do CloudFormation usando uma interface de arrastar e soltar. Isso pode ser particularmente benéfico ao usar o CloudFormation das seguintes maneiras:

  • Planejamento de arquitetura: projete e valide arquiteturas de infraestrutura antes da implementação

  • Modernização do modelo: visualize os modelos existentes para entender sua estrutura e identificar oportunidades de melhoria

  • Treinamento e integração: ajude os novos membros da equipe a entender os conceitos do CloudFormation e as relações de serviço por meio do aprendizado visual da AWS

  • Comunicação com as partes interessadas: apresente projetos de infraestrutura para partes interessadas não técnicas usando representações visuais claras

  • Análises de conformidade: use diagramas visuais para facilitar as análises de segurança e conformidade de seus projetos de infraestrutura

  • Análises de conformidade: use diagramas visuais para facilitar as análises de segurança e conformidade de seus projetos de infraestrutura

Para obter mais informações sobre o Compositor de Infraestrutura, consulte O que é o AWS Infrastructure Composer?.

Considere o uso do AWS Cloud Development Kit (AWS CDK) para uma infraestrutura complexa

Para requisitos de infraestrutura complexas, considere usar o CDK para definir seus recursos de nuvem usando linguagens de programação familiares, como TypeScript, Python, Java e .NET. O AWS CDK gera modelos do CloudFormation a partir do seu código, permitindo que você aproveite todos os recursos do CloudFormation enquanto usa as abstrações e as construções de programação de sua linguagem preferida.

O AWS CDK fornece construções de alto nível que encapsulam as práticas recomendadas e simplificam a definição de padrões comuns de infraestrutura. Isso pode reduzir significativamente a quantidade de código necessário para definir sua infraestrutura, garantindo ao mesmo tempo a adesão às práticas recomendadas.

Para obter mais informações sobre CDK, consulte o AWS Cloud Development Kit (AWS CDK)..

Usar o IAM para controlar o acesso

O IAM é um serviço da AWS que você pode usar para gerenciar usuários e suas respectivas permissões na AWS. É possível usar o IAM com o CloudFormation para especificar quais ações do CloudFormation os usuários podem executar, como visualizar os modelos de pilha, criar pilhas ou excluir pilhas. Além disso, qualquer pessoa que gerencie as pilhas do CloudFormation precisará de permissões para os recursos dentro dessas pilhas. Por exemplo, se os usuários quiserem usar o CloudFormation para executar, atualizar ou encerrar instâncias do Amazon EC2, eles precisarão ter permissão para chamar as ações relevantes do Amazon EC2.

Na maioria dos casos, os usuários precisam de acesso total para gerenciar todos os recursos em um modelo. O CloudFormation faz chamadas para criar, modificar e excluir esses recursos em nome dele. Para permissões separadas entre um usuário e o serviço do CloudFormation, use um perfil de serviço. O CloudFormation usa a política do perfil de serviço para fazer chamadas em vez da política do usuário. Para obter mais informações, consulte Função de serviço do AWS CloudFormation.

Aplicação do princípio de privilégio mínimo

Ao configurar perfis do IAM para os perfis serviço do CloudFormation ou para recursos criados por seus modelos, sempre aplique o princípio do privilégio mínimo. Conceda somente as permissões necessárias para a funcionalidade pretendida e evite usar permissões curinga sempre que possível.

Use o analisador de acesso do IAM para analisar as permissões concedidas aos seus perfis de serviço do CloudFormation e identificar permissões não utilizadas que podem ser removidas. Revise e atualize regularmente as políticas do IAM para garantir que permaneçam alinhadas com seus requisitos de segurança.

Parâmetros confidenciais seguros

Para informações confidenciais, como senhas, chaves de API e outros segredos, use o Parameter Store do AWS Systems Manager ou o AWS Secrets Manager em vez de incorporá-las diretamente em seus modelos. Use referências dinâmicas em seus modelos para recuperar com segurança esses valores durante as operações de pilha.

Ao usar parâmetros em seus modelos, defina a propriedade NoEcho como true para parâmetros confidenciais para evitar que seus valores sejam exibidos no console, nas respostas da API ou na saída da CLI. Lembre-se de que o NoEcho não impede que o valor seja registrado se for passado para outros serviços ou recursos que possam registrar o valor.

Para obter mais informações sobre como usar o Parameter Store do AWS Systems Manager com o CloudFormation, consulte Obter um valor em texto simples do Parameter Store do AWS Systems Manager.

Para obter mais informações sobre o uso da propriedade NoEcho, consulte a Sintaxe de parâmetros do modelo do CloudFormation.

Para obter mais informações sobre como usar o AWS Secrets Manager com o CloudFormation, consulte Criar segredos do AWS Secrets Manager no AWS CloudFormation.

Implemente a política como código com o AWS CloudFormation Guard

O AWS CloudFormation Guard(cfn-guard) é uma ferramenta de código aberto de política como código que permite definir e aplicar regras para seus modelos do CloudFormation. Use o cfn-guard para garantir que seus modelos estejam em conformidade com as políticas organizacionais, as práticas recomendadas de segurança e os requisitos de governança.

Integre o cfn-guard aos seus pipelines de CI/CD para validar automaticamente os modelos de acordo com suas regras de política antes da implantação. Isso ajuda a evitar que recursos não compatíveis sejam implantados em seu ambiente e fornece feedback antecipado aos desenvolvedores sobre violações de políticas.

Para obter mais informações sobre o Guard, consulte O que é o AWS CloudFormation Guard?