Melhores práticas do AWS CloudFormation - AWS CloudFormation

Melhores práticas do AWS CloudFormation

As melhores práticas são recomendações que podem ajudar você a usar o AWS CloudFormation de forma mais eficaz e segura em todo o fluxo de trabalho dele. 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.

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 de Auto Scaling atrás de um load balancer. 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 back-end, 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.

Usar referências entre pilhas para exportar recursos compartilhados

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 referências entre pilhas para exportar os recursos de uma pilha para que as outras pilhas possam usá-los. 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 Demonstração: Consultar saídas de recurso em outra pilha do AWS CloudFormation.

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 200 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 Limites de serviços da AWS no AWS General Reference.

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 Anatomia do modelo.

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. 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 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 de construção podem ser aninhados em outros módulos, para que você possa empilhar suas práticas recomendadas em blocos de construção de nível superior. Os módulos do CloudFormation estão disponíveis no registro do CloudFormation, para que você possa usá-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 Módulos.

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 o 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 AWS 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 Parâmetros.

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 Parâmetros.

Usar o 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 o cfn-init e AWS::CloudFormation::Init, consulte Implantar aplicativos no Amazon EC2 com o AWS CloudFormation.

Usar os scripts auxiliares mais recentes

Os scripts auxiliares 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 CloudFormation referência de scripts auxiliares.

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 aws cloudformation validate-template ou a ação ValidateTemplate.

Durante a validação, o CloudFormation primeiro verifica se o modelo é um 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

Também é possível validar seu modelo quanto à conformidade com as diretrizes de política da organização. O AWS CloudFormation Guard (cfn-guard) é uma ferramenta de interface de linhas de comando (CLI) de código aberto que fornece uma linguagem de política como código para definir regras que podem verificar configurações de recursos necessárias e proibidas. 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, 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.

Gerenciar todos os recursos de pilha por meio do AWS CloudFormation

Depois de iniciar uma pilha, use o console do CloudFormation, a API ou a AWS CLI para atualizar recursos em 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. Para obter mais informações, consulte Demonstração: Atualizar uma pilha.

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

Os 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 faz nenhuma alteração 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 usando conjuntos de alterações.

Usar políticas de pilha

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.

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 as instâncias do Amazon EC2 Linux regularmente

Em todas as instâncias Linux do Amazon EC2 e as instâncias Linux do Amazon EC2 criadas com 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.