Entendendo as ferramentas IaC: Cloudformation vs Terraform

AWS CloudFormation e Terraform – não sabe qual escolher? Este artigo irá ajudá-lo a tomar uma decisão inteligente.

A computação em nuvem revolucionou o mundo do DevOps. Não é mais apenas uma palavra da moda; está aqui e está aqui para mudar a forma como desenvolvemos e mantemos nossos aplicativos. Embora existam inúmeras razões pelas quais você deve usar a computação em nuvem para todas as escalas de negócios, há uma pequena limitação, você precisa provisionar sua infraestrutura manualmente.

Você precisa acessar os consoles de seus provedores de nuvem e dizer a eles exatamente o que deseja. Isso funciona bem para pequenos casos de uso, mas e se você tiver pessoas diferentes fazendo alterações de configuração no console. Você pode acabar com uma infraestrutura super complicada que se tornará cada vez mais difícil de manter. Não há uma maneira eficiente de colaborar ou acompanhar as mudanças na infraestrutura na nuvem. Bem, na verdade existe. Infraestrutura como um código.

Infraestrutura como código é um termo muito popular na computação em nuvem. É o processo de gerenciamento de sua infraestrutura de TI usando código. Sim isso está certo. Em vez de ir ao console e fazer tudo manualmente; A infraestrutura como código, também conhecida como IAAC ou IAC, permite gravar arquivos de configuração, que provisionam sua infraestrutura em nuvem. O IAC nos oferece benefícios como consistência, manutenção fácil e rápida e não há espaço para erros humanos.

Usando o IAC com Amazon Web Services

A AWS é o principal serviço de computação em nuvem do mundo, com o dobro de participação de mercado do que o próximo provedor de nuvem depois dele. Existem mais de 200 serviços na AWS que podem atender a centenas e milhares de casos de uso.

Ao começar a usar o IAC com a AWS, muitas vezes você restringirá suas opções ao AWS CloudFormation e a ferramenta de código aberto, Terraform. Ao tentar fazer uma escolha entre os dois, entender a infinidade de recursos que ambas as ferramentas oferecem pode ser bastante avassalador. Neste artigo, veremos as diferenças entre o AWS CloudFormation e o Terraform para ajudá-lo a decidir qual ferramenta é mais adequada às suas necessidades.

Terraform x AWS CloudFormation: diferenças

Modularidade

Ao usar o IAC em grandes organizações, a modularidade pode ser um grande fator para escolher a ferramenta certa.

CloudFormation

O CloudFormation não tem suporte nativo para módulos. Ele permite que você use algo chamado pilhas aninhadas como módulos.

  Alexa ainda funcionará com o Nest (e isso é um problema)

Por exemplo, você pode ter uma configuração padrão de como deseja provisionar um bucket do S3 em sua organização. Então, você cria um modelo padrão do CloudFormation que cria buckets do S3. Agora, quando um usuário final deseja criar o bucket do S3, ele pode usar esse modelo do CloudFormation como uma pilha aninhada e criar um bucket do S3 padrão.

Há também um serviço menos conhecido da AWS, o Catálogo de serviços da AWS que podem ajudá-lo com a modularidade do AWS CloudFormation. O Catálogo de Serviços é um serviço da AWS projetado especificamente para organizações que desejam limitar o escopo dos Serviços da AWS para atender aos requisitos de conformidade, segurança, custo ou desempenho. E adivinha? O AWS Service Catalog usa modelos do CloudFormation no back-end.

Vamos entender isso rapidamente com um exemplo. Os buckets do S3, se não forem usados ​​corretamente, podem em breve ser catastróficos para seus dados confidenciais. Vamos dar o mesmo exemplo, você quer ter uma maneira padrão de como deseja usar o S3 em sua organização. A primeira opção é criar o modelo de pilha aninhada, que pode ser usado em outras pilhas do CloudFormation e é igualmente bom.

Se você não quiser que os usuários usem esse modelo padrão como uma pilha aninhada, você pode usar o AWS Service Catalog. O Catálogo de Serviços permitirá que os usuários usem esse modelo padrão da interface do usuário do console e especifiquem alguns parâmetros, para pequenas personalizações. Isso permitirá que você controle como a infraestrutura é provisionada em suas contas da AWS e evite cenários indesejados.

Terraform

O Terraform tem suporte nativo para módulos. Ele permite que você crie configurações padrão muito parecidas com o AWS CloudFormation e use-o em outras configurações do Terraform.

Como o Terraform é uma ferramenta de código aberto, você também pode encontrar e usar alguns módulos de código aberto pré-fabricados no Terraform Registry. Você também pode criar seus próprios módulos com suas próprias configurações e hospedá-los em um registro de módulo privado.

Pessoalmente, eu preferiria usar o Terraform em vez do CloudFormation se a modularidade fosse um grande requisito.

Usar uma pilha aninhada no CloudFormation não é tão fácil quanto usar módulos no Terraform. O principal fator é que passar dados de um modelo CFN para a pilha aninhada pode ser bastante complicado.

Não há um local padrão onde os modelos do CloudFormation possam ser compartilhados. Você tem o AWS Service Catalog, mas isso é apenas uma maneira de aplicar algumas regras para criar infraestrutura por meio do Console. Somos todos sobre código. Ao usar o Catálogo de Serviços, embora algumas tarefas complicadas sejam encapsuladas por arquivos do CloudFormation, você ainda precisa passar pela tarefa manual de ir ao console e especificar parâmetros para fazer sua Infraestrutura.

  6 Serviço para ajudá-lo a corrigir sites invadidos pelo Joomla

O Terraform, por outro lado, possui um método definido de criação, manutenção e compartilhamento dos módulos. Você pode ver os requisitos exatos dos módulos no Terraform Module Registry e usá-los em seus arquivos do terraform com muita facilidade.

Controle e governança sobre a infraestrutura

Se você deseja limitar quais recursos seu pessoal pode criar em suas contas da AWS: Tanto o AWS CloudFormation quanto o Terraform fornecem os meios para isso.

Vamos falar primeiro sobre o CloudFormation. O CloudFormation por si só não oferece nenhum controle sobre como os modelos são usados, mas você pode usar as políticas do AWS IAM para permitir que os usuários em sua conta da AWS usem apenas os modelos padrão do CloudFormation para criação de recursos. Em nosso exemplo de bucket do S3, você pode querer limitar todas as permissões “S3 Create” para usuários e permitir que eles criem apenas buckets do S3 do AWS Service Catalog ou de pilhas aninhadas.

O Terraform permite controlar quais recursos seus usuários podem criar usando uma política como ferramenta de código Sentinela. O Sentinel permite que você imponha políticas refinadas e baseadas em lógica para permitir ou negar ações do usuário por meio do Terraform. Por exemplo, você pode negar todos os recursos que criam buckets do S3 e permitir que os usuários criem buckets do S3 apenas a partir de um módulo padrão.

Gerenciamento de estado

Tanto o AWS CloudFormation quanto o Terraform precisam acompanhar os recursos que estão mantendo.

O Terraform armazena o estado de sua infraestrutura em um arquivo de estado. Esse arquivo é armazenado localmente por padrão, mas você pode armazená-lo em back-ends remotos como o S3 e fazer com que vários usuários façam alterações no mesmo conjunto de infraestrutura.

O CloudFormation não mantém um arquivo de estado, pelo menos não um que possamos ver. O CloudFormation é um serviço gerenciado, portanto, faz toda a manutenção e verificações de estado em segundo plano.

Tanto o AWS CloudFormation quanto o Terraform têm um meio para você verificar quais alterações serão feitas em sua infraestrutura. No Terraform, você pode executar um comando – “terraform plan” e como o Terraform está planejando aplicar suas alterações de configuração. No CloudFormation, os usuários podem ver essas informações por meio de conjuntos de alterações.

  Como remover contatos da planilha de compartilhamento no iPhone ou iPad

Linguagem

O Terraform usa a linguagem de configuração da HashiCorp, HCL, uma linguagem criada pela HashiCorp. É muito semelhante ao JSON com recursos e recursos integrados adicionais.

Os modelos do CloudFormation são escritos nos formatos YAML ou JSON

Registro e reversões

Tanto o AWS CloudFormation quanto o Terraform têm bons recursos de registro em log. Na minha experiência, os erros e problemas foram diretos (na maioria das vezes).

CloudFormation: Por padrão, o CloudFormation reverte todas as suas alterações em caso de falha na alteração da pilha. Este é um bom recurso e pode ser desabilitado para qualquer propósito de depuração.

Terraform: O Terraform não reverterá automaticamente suas alterações em caso de falha. Isso não é um problema, pois você sempre pode executar o comando terraform destroy para excluir a configuração semiprovisionada e reiniciar uma execução do Terraform novamente.

Alcance

O Terraform não está limitado à Nuvem AWS. O fator mais importante ao escolher entre o Terraform e o CloudFormation é que o Terraform oferece suporte a outros provedores e serviços de nuvem.

Portanto, se você planeja usar o IAC para várias plataformas de nuvens, o Terraform é sua melhor escolha. O CloudFormation, embora seja uma ferramenta poderosa, está limitado apenas à AWS. Ao usar o Terraform, você pode configurar a infraestrutura e implantar seu aplicativo em várias plataformas de nuvem, tornando seu aplicativo mais disponível e robusto.

Suporte a recursos

Normalmente, à medida que a AWS lança novos serviços e recursos, o CloudFormation será atualizado antes do Terraform, pois é um serviço da AWS. A partir de agora, ambas as ferramentas cobrem a maioria dos serviços e recursos desses serviços. Esta pode ser uma pequena desvantagem de usar o Terraform, no entanto, temos uma solução.

Há também a possibilidade de você criar uma pilha do CloudFormation dentro do seu código do Terraform. Portanto, se você usa o Terraform e ele não possui um recurso, pode configurar temporariamente uma pilha do CloudFormation dentro do código do Terraform.

Suporte técnico

O plano de suporte técnico pago da AWS também cobre o suporte do CloudFormation.

A HashiCorp também pagou planos de suporte técnico no Terraform.

Conclusão

Tanto o AWS CloudFormation quanto o Terraform são ferramentas poderosas e totalmente desenvolvidas. As diferenças acima ajudarão você a tomar uma decisão informada para escolher a ferramenta com base em seus requisitos. Como sugestão pessoal, se você planeja usar várias plataformas de nuvem no futuro ou está usando várias nuvens no momento, deve usar o Terraform como um balcão único para todas as suas necessidades. Se você está procurando uma ferramenta IAC apenas para AWS, tanto AWS CloudFormation quanto Terraform são um jogo justo.

Se você estiver interessado em aprender o Terraform, confira esses cursos online.