Terraform vs CloudFormation: comparando as duas ofertas de infraestrutura como código (2022)
Publicados: 2022-04-10Infraestrutura como código [IaC] tornou-se cada vez mais popular nos últimos anos e não é de admirar o porquê. O IaC, também conhecido como infraestrutura definida por software, é uma configuração de TI que desenvolvedores ou equipes de operações podem usar para gerenciar e fornecer automaticamente a pilha de tecnologia para um aplicativo por meio de software.
Com o IaC, não há necessidade de usar um processo manual para configurar dispositivos de hardware discretos e sistemas operacionais. É também um dos fundamentos do DevOps , que aumenta a eficiência e a qualidade do trabalho. As duas ferramentas mais utilizadas para implementação de IaC na AWS são as ferramentas de código aberto Terraform e CloudFormation .
O que é Terraform?
- O Terraform permite definir recursos locais e na nuvem em arquivos de configuração legíveis que você pode compartilhar, revisar e reutilizar facilmente.
- Ele fornece um fluxo de trabalho durável e consistente para fornecer e gerenciar toda a sua infraestrutura.
- O Terraform pode gerenciar componentes de baixo nível, como:
- Informática
- recursos de rede
- armazenar
Como o Terraform funciona?
- O Terraform pode criar e gerenciar recursos por meio de suas interfaces de programação de aplicativos (APIs) em plataformas de nuvem e diversos serviços.
- Os provedores permitem que ele funcione com praticamente qualquer plataforma ou serviço com uma API acessível.
- A comunidade Terraform trabalha com mais de 1700 provedores e gerencia milhares de tipos de serviços e recursos e a empresa continua a se expandir.
- Você pode encontrar todos os provedores disponíveis publicamente no Terraform Registry :
- Amazon Web Services (AWS)
- Azure, Google Cloud Platform (GCP)
- Kubernetes
- Elmo
- GitHub
- Splunk
- DataDog
O fluxo de trabalho principal do Terraform consiste em três estágios:
- Escreva: defina seus recursos que podem ser executados por meio de vários serviços e provedores de nuvem.
- Plano: O Terraform compilará um plano de execução descrevendo a infraestrutura que será criada, atualizada ou destruída com base na infraestrutura existente e em sua configuração.
- Aplicar: Uma vez aprovado, o Terraform realizará todas as operações propostas na sequência correta e considerará quaisquer dependências de recursos.
Por que Terraform?
- Gerencie qualquer infraestrutura
O Terraform adota uma abordagem indelével à infraestrutura para reduzir a complexidade de modificar ou atualizar sua infraestrutura e serviços. Ele também mantém o controle de sua infraestrutura real em um arquivo de estado . Esse arquivo determinará todas as alterações necessárias que precisam ser feitas em sua infraestrutura, alinhando-a com seus arquivos de configuração. Esses arquivos descrevem o estado final de sua infraestrutura. Como o Terraform controla a lógica subjacente, você não precisará escrever instruções detalhadas para criar recursos. Ele construirá um gráfico de recursos que regula as dependências de recursos. Ele criará ou modificará recursos não dependentes, ajudando você a acompanhar todos os seus recursos facilmente.
- Padronizar configurações
O Terraform é altamente eficiente, pois suporta módulos ou componentes de configuração reutilizáveis. Os módulos oferecem uma maneira fácil de empacotar e reutilizar código e são equivalentes aos métodos ou funções em linguagens de programação ou script. Os módulos são considerados uma interface padrão porque criam recursos alocando entradas e retornando saídas. Isso simplifica consideravelmente os projetos, aumentando a legibilidade e permitindo que as equipes utilizem blocos lógicos para organizar a infraestrutura.
Outro benefício dos módulos é que eles podem ser adquiridos e compartilhados facilmente em qualquer projeto do Terraform. Os módulos são normalmente usados como uma interface para gerenciar e criar vários recursos. Isso reduz significativamente o número de código duplicado em um projeto, mas copiar e colar seções de código enquanto altera apenas os parâmetros selecionados pode ser monótono. Usando variáveis de entrada, você pode personalizar o comportamento de um módulo e, possivelmente, como ele rotula os recursos. Os módulos do Terraform também podem retornar a saída, que pode funcionar como entrada em diferentes módulos ou recursos.
Ao executar uma infraestrutura de qualquer tamanho, sem dúvida haverá um número impressionante de componentes e configurações. Isso pode ser complicado porque há muitas variações sutis na infraestrutura usada por diferentes equipes dentro de uma organização. Isso pode complicar ainda mais as coisas porque a infraestrutura pode abranger uma ampla variedade de topografias, desde o local até vários fornecedores de nuvem. Como resultado, organizar e manter a infraestrutura é um processo complicado.
O que é AWS CloudFormation?
O AWS CloudFormation oferece às empresas e desenvolvedores uma maneira simples de criar uma variedade de recursos relacionados da AWS e outros. Os desenvolvedores podem instalar e atualizar bancos de dados, computação e uma variedade de outros recursos em um estilo simples e declarativo, eliminando o desafio de designar APIs de recursos específicos. O Cloudformation também gerencia os ciclos de vida dos recursos de forma regular, previsível e segura. Ele também permite reversões automáticas, gerenciamento de estado automatizado e gerenciamento de recursos para todas as contas e regiões.
O CloudFormation permite que você gaste mais tempo focando em seus aplicativos executados na AWS e menos tempo gerenciando seus recursos. Você pode projetar um modelo que defina todos os recursos da AWS que desejar, incluindo instâncias do Amazon EC2 ou instâncias de banco de dados do Amazon RDS, etc. O CloudFormation cuidará do provisionamento e da configuração de seus recursos. Ele também lida com a criação e configuração de recursos da AWS e descobre toda a logística de dependência.
Por que CloudFormation?
- Simplifique o gerenciamento de infraestrutura
Para criar um aplicativo da web escalável que inclua um banco de dados de back-end, você pode usar um Amazon Relational Database, uma instância de banco de dados de serviço ou um grupo de Auto Scaling. Depois de criar recursos com o serviço para provisionar que você escolheu, você terá que configurá-los para colaborar. Essas etapas extras podem complicar e retardar o processo de fazer seu aplicativo decolar. O CloudFormation permite criar um modelo ou modificar um existente. Um modelo define todos os seus recursos e todos os seus componentes.
Usar esse modelo para criar uma pilha do CloudFormation permitirá ao serviço controle total sobre o grupo de Auto Scaling, o balanceador de carga e o banco de dados. Seus recursos da AWS estarão totalmente funcionais assim que a pilha for criada com sucesso. Excluir a pilha é simples, mas lembre-se de que excluir uma pilha significa excluir todos os recursos que ela contém. Em suma, o CloudFormation torna o gerenciamento de uma coleção de recursos em uma única unidade uma experiência fácil.
- Replique rapidamente sua infraestrutura
Se seu aplicativo exigir disponibilidade adicional, você poderá replicá-lo em várias regiões para que, se uma região ficar indisponível, as pessoas ainda possam usar seu aplicativo em outro lugar. Isto é mais fácil dizer do que fazer. Pode ser um desafio replicar seu aplicativo porque também exige que você duplique seus recursos. Você deve registrar todos os recursos exigidos pelo seu aplicativo enquanto gerencia e configura esses recursos em cada região.
Os modelos do CloudFormation são ótimos porque você pode reutilizá-los para criar seus recursos de forma consistente e repetida. Para fazer isso, você precisa definir seus recursos uma vez e provisionar esses recursos continuamente em várias regiões. O CloudFormation está em constante adaptação, e atualizações recentes e novas opções possibilitam vários métodos para criar recursos. Isso inclui a utilização do AWS CDK para codificação em linguagens de nível avançado, detecção de desvios de configuração e importação de recursos existentes. Agora existe um Registro que facilita a criação de tipos personalizados que possuem muitos dos principais benefícios do Cloudformation.
Quatro conceitos principais do CloudFormation
- Um modelo é um arquivo de texto formatado em JSON ou YAML que descreve o estado pretendido de todos os recursos necessários para executar seu aplicativo com êxito. Eles são compostos do seguinte:
- Uma lista opcional de parâmetros de modelo (valores de entrada fornecidos no momento da criação da pilha)
- Uma lista opcional de valores de saída (por exemplo, a URL completa de um aplicativo da web)
- Uma lista opcional de tabelas de dados é usada para pesquisar valores de configuração estática (por exemplo, nomes de AMI).
- A lista de recursos da AWS e seus valores de configuração
2. número da versão do formato de arquivo do modelo
3. Uma pilha impõe e gerencia todos os recursos em seu modelo, o que permite que o estado e as dependências desses recursos sejam gerenciados juntos.
4. Um changeset é uma visualização de todas as atualizações que serão realizadas por operações de pilha para criar, atualizar ou remover recursos.
5. Um conjunto de pilhas é um grupo de pilhas que você gerencia simultaneamente e que pode copiar um grupo.