Para alcançar escala, as equipes de DevOps estão sempre procurando maneiras de implantar rapidamente o código com um processo confiável e repetível. Quando se trata de nuvem e infraestrutura, esse processo é cada vez mais realizado com infraestrutura como código (IaC). As ferramentas IaC variam de ferramentas de uso geral a ferramentas destinadas a ambientes específicos. O Terraform é um exemplo do primeiro, enquanto o Bicep foi projetado para lidar com tarefas relacionadas ao Azure.
Neste artigo, comparamos nove recursos de infraestrutura e integração do Bicep e do Terraform. Entender essas diferenças ajuda você a decidir qual ferramenta melhor suporta sua infraestrutura e processos.
Estado e back-end
Tanto o Terraform quanto o Bicep são configurações de estado desejado (DSC), o que facilita o gerenciamento da infraestrutura de TI e desenvolvimento como código. Terraform armazena o estado sobre sua infraestrutura gerenciada e configuração. A Terraform usa essas informações para mapear recursos do mundo real para sua configuração, rastrear metadados e melhorar o desempenho de infraestruturas maiores. O estado é armazenado em um arquivo local chamado terraform.tfstate
, mas também pode ser armazenado remotamente. É fundamental fazer backup e proteger seus arquivos de estado. Como Terraform, Bicep é declarativo e busca de objetivos. No entanto, o Bicep não armazena estado. Em vez disso, o Bicep depende da implantação incremental.
Objetivos em matéria de infraestruturas
Ao comparar o Bicep com o Terraform para gerenciar a infraestrutura de nuvem, é importante considerar seu ambiente de nuvem de destino:
- Apenas Azure
- Nuvens múltiplas ou híbridas
O Bicep é específico do Azure e não foi projetado para funcionar com outros serviços de nuvem.
Se o seu objetivo é automatizar implantações em qualquer um dos seguintes ambientes, o Terraform é provavelmente a melhor opção:
- Ambientes de virtualização
- Cenários multicloud - como o Azure e outra(s) nuvem(ões)
- Cargas de trabalho locais
Terraform interage com outros provedores de nuvem ou APIs usando plugins chamados provedores. Há vários provedores do Azure Terraform que permitem o gerenciamento da infraestrutura do Azure. Ao codificar uma configuração do Terraform, você especifica os provedores necessários que está usando. Quando você executa terraform init, o provedor especificado é instalado e utilizável a partir do seu código.
As ferramentas de interface de linha de comando (CLI) desempenham um papel fundamental na orquestração através da implementação e gestão da tecnologia de automação. Tanto o Bicep quanto o Terraform oferecem ferramentas CLI.
O Bicep integra-se com a CLI do Azure, permitindo que os desenvolvedores usem az
comandos como:
A CLI do Terraform permite que você execute tarefas como validar e formatar seu código Terraform e criar e aplicar um plano de execução.
O Bicep também fornece um recurso que facilita a integração do Bicep com o Azure Pipelines. Há um recurso semelhante disponível para o Terraform, mas você deve baixar e instalar a extensão Tarefas Terraform do Azure Pipelines para Visual Studio. Uma vez instalado, você pode executar comandos da CLI do Terraform a partir do Azure Pipelines. Além disso, tanto o Terraform quanto o Bicep suportam ações do GitHub para automatizar compilações, testes e implantações de software.
Em processamento
Existem algumas diferenças importantes entre o Bicep e o Terraform em termos de eficiência e otimizações de implantações. Com o Bicep, o processamento ocorre no lado do serviço de infraestrutura principal do Azure. Esse recurso oferece vantagens, como o processamento de comprovação para verificar a política ou a disponibilidade para implantar várias instâncias em uma região. Com a Terraform, o processamento é feito dentro do cliente Terraform. Assim, o pré-processamento não envolve chamadas para o Azure, uma vez que usa o estado e a HCL (Linguagem HashiCorp) para determinar as alterações necessárias.
Autenticação
Os recursos de autenticação do Azure variam entre Bicep e Terraform. Com o Bicep, um token de autorização é fornecido durante a solicitação para enviar um arquivo Bicep e um modelo ARM. O ARM garante que você tenha permissão para criar a implantação e implantar recursos dentro do modelo especificado. O Terraform autentica cada API com base em credenciais de provedor, como CLI do Azure, entidade de serviço ou identidades gerenciadas para recursos do Azure. Além disso, várias credenciais de provedor podem ser utilizadas em uma única configuração.
Integrações do Azure
Você também deve considerar seu uso de recursos do Azure, como o Azure Policy e como cada um interage com outras ferramentas e idiomas. A validação de comprovação do Bíceps determina se um recurso não está em conformidade com uma política para que ele falhe antes de uma implantação. Assim, os desenvolvedores podem corrigir recursos com políticas usando modelos ARM fornecidos. O modelo ARM pode ser usado para criar uma atribuição de política a outro recurso para correção automatizada. Terraform, no entanto, falha quando um recurso é implantado que não é permitido devido à política.
Integração com portais
Uma grande vantagem que o Bicep tem sobre o Terraform é a capacidade de automatizar as ações do portal. Com o Bicep, você pode usar o portal do Azure para exportar modelos. A exportação de um modelo ajuda você a entender a sintaxe e as propriedades que implantam seus recursos. Você pode automatizar implantações futuras começando com o modelo exportado e modificando-o para atender às suas necessidades. Até que os modelos Terraform sejam suportados, você precisa traduzir o modelo exportado manualmente.
Embora o Terraform não forneça as mesmas integrações de portal que o Bicep, a infraestrutura existente do Azure pode ser obtida sob o gerenciamento do Terraform usando o Azure Export for Terraform. (O Azure Export for Terraform é uma ferramenta de código aberto de propriedade e mantida pela Microsoft no Azure/aztfexport GitHub repo.)
Alterações fora de banda
Alterações de configuração fora de banda são alterações feitas em uma configuração de dispositivo fora do contexto da ferramenta. Por exemplo, digamos que você implante um Conjunto de Escala de Máquina Virtual usando Bicep ou Terraform. Se você alterar esse Conjunto de Escala de Máquina Virtual usando o portal, a alteração será "fora de banda" e desconhecida para sua ferramenta IaC.
Se você estiver usando o Bicep, as alterações fora de banda devem ser reconciliadas com o Bicep e o código do Modelo ARM para evitar que essas alterações sejam substituídas na próxima implantação. Essas alterações não bloqueiam a implantação.
Se você estiver usando o Terraform, precisará importar as alterações fora de banda para o estado Terraform e atualizar a HCL.
Assim, se um ambiente envolve mudanças frequentes fora da banda, o Bicep é mais fácil de usar. Ao usar o Terraform, você deve minimizar as alterações fora de banda.
Estruturas na nuvem
O Cloud Adoption Framework (CAF) é uma coleção de documentação, práticas recomendadas e ferramentas para acelerar a adoção da nuvem durante toda a sua jornada na nuvem. O Azure fornece serviços nativos para implantar zonas de aterrissagem. O Bicep simplifica esse processo com uma experiência de portal baseada em modelos ARM e implementação de zona de pouso. A Terraform utiliza um módulo de Zonas de Aterrissagem em Escala Empresarial para implantar, gerenciar e operacionalizar com o Azure.
Resumo
Bicep e Terraform oferecem muitas infraestrutura amigável e recursos de integração. Esses recursos facilitam a implementação e o gerenciamento da tecnologia de automação. Ao decidir qual é o melhor para seu ambiente, é importante considerar se você está implantando em mais de uma nuvem ou se sua infraestrutura consiste em um ambiente de nuvem múltipla ou híbrida. Além disso, não deixe de considerar os nove recursos discutidos neste artigo para fazer a melhor escolha para sua organização.
As organizações de hoje enfrentam desafios dinâmicos que exigem muita flexibilidade e agilidade. Os ambientes de nuvem pública atendem a essas necessidades por meio da automação - especialmente via infraestrutura como código (IaC). Duas opções líderes de IaC são Hashicorp Terraform e Bicep. Terraform é uma ferramenta de código aberto que ajuda os profissionais de DevOps a gerenciar serviços locais e na nuvem usando código declarativo. O Microsoft Bicep utiliza sintaxe declarativa para simplificar a implantação de recursos do Azure.
Neste artigo, comparamos vários recursos importantes de experiência do usuário para identificar semelhanças e diferenças entre o Terraform e o Bicep.
Sintaxe da linguagem
Bicep e Terraform são linguagens específicas do domínio (DSL) que são fáceis de usar e economizam tempo do desenvolvedor. Ambas as ferramentas incorporam palavras-chave e conceitos semelhantes. Alguns desses conceitos são parametrização, suporte para projetos multi-arquivo e suporte para módulos externos. Terraform, no entanto, oferece uma biblioteca mais rica de funcionalidade integrada para determinadas tarefas. Decidir entre os dois é uma questão de preferência e experiência. A seguir estão breves visões gerais e alguns dos recursos fáceis de usar que cada sintaxe de idioma oferece.
Bicep é uma linguagem declarativa. Como tal, a ordem na qual os elementos são definidos no código não afeta como a implantação é processada. O escopo de destino padrão do Bíceps é o resourceGroup
. Os usuários podem empregar variáveis para encapsular expressões complexas e tornar os arquivos Bicep mais legíveis. O conceito de módulos permite a reutilização do código Bicep entre projetos ou equipes.
Terraform também é uma linguagem declarativa que usa a HashiCorp Configuration Language (HCL). O principal objetivo da HCL é declarar recursos. Outros recursos de linguagem servem para tornar a definição de recursos mais conveniente. E, como o Bicep, a ordenação do código nos arquivos de configuração do Terraform não é significativa.
Ajudantes linguísticos
Tanto o Bicep quanto o Terraform fornecem auxiliares de linguagem para simplificar as tarefas de codificação. Uma vez que ambos são de fácil utilização, a escolha depende em grande medida das preferências e requisitos.
O Bicep suporta expressões para tornar seu código mais dinâmico e flexível. Diferentes tipos de funções podem ser usadas em um arquivo Bicep. Alguns desses tipos de função são funções lógicas, numéricas e de objeção. Os loops podem definir várias cópias de um recurso, módulo, propriedade, variável ou saída. Os loops ajudam a evitar a repetição da sintaxe em um arquivo Bicep.
Terraform também oferece funções internas que são chamadas de dentro de expressões para transformar e combinar valores. Como o Bicep, as expressões Terraform podem incluir expressões complexas, como referências a dados exportados por recursos e avaliação condicional. Os loops podem lidar com coleções e produzir várias instâncias de um recurso sem a necessidade de repetir o código.
Módulos
Tanto o Bicep como o Terraform suportam o conceito de módulos. Os módulos permitem que você crie componentes reutilizáveis a partir do seu código. Os módulos desempenham um papel fundamental no dimensionamento da infraestrutura e na manutenção da configuração limpa. Como os módulos encapsulam grupos de recursos, eles reduzem a quantidade de código que deve ser desenvolvido para componentes de infraestrutura semelhantes. Embora os módulos funcionem de forma semelhante no Bicep e no Terraform, eles variam na implementação.
No Bicep, um módulo é simplesmente um arquivo Bicep que é implantado a partir de outro arquivo Bicep. Os módulos Bicep servem para melhorar a legibilidade dos arquivos Bicep. Esses módulos também são escaláveis. Os usuários podem compartilhar módulos entre equipes para evitar a duplicação de código e reduzir erros. Para obter mais informações sobre como definir um módulo Bicep, consulte Módulos Bicep.
No Terraform, os módulos são o principal meio de empacotamento e reutilização de configurações de recursos entre as equipes. Os módulos Terraform são contêineres para vários recursos que são empacotados como uma única unidade lógica. Um módulo consiste em uma coleção de .tf
e/ou .tf.json
arquivos armazenados juntos em um diretório. Além de módulos do sistema de arquivos local, Terraform também pode carregar módulos de várias fontes. Essas fontes incluem o registro, o caminho local, os módulos e o GitHub.
Ciclo de vida do provisionamento
Tanto o Terraform quanto o Bicep permitem que os desenvolvedores validem uma configuração antes da implantação e, em seguida, apliquem as alterações. Terraform fornece mais flexibilidade para destruir todos os objetos remotos gerenciados por uma configuração específica. Este recurso é útil para limpar objetos temporários assim que o trabalho for concluído. É crucial considerar os requisitos do ciclo de vida das implantações típicas de infraestrutura ao escolher a melhor opção.
O Bicep oferece uma operação hipotética que permite visualizar as alterações antes de implantar um arquivo Bicep. O Azure Resource Manager fornece a what-if
operação e não faz alterações nos recursos existentes. Em seguida, é possível usar o Azure PowerShell ou a CLI do Azure com seus arquivos Bicep para implantar seus recursos no Azure. O Azure PowerShell e a CLI do Azure não oferecem suporte à implantação de arquivos Bicep remotos. No entanto, você pode usar a CLI do Bicep para criar seu arquivo Bicep em um modelo JSON e, em seguida, carregar o arquivo JSON em um local remoto.
No Terraform, o comando do plano terraform é semelhante à operação Bicepwhat-if
. Com o comando, você cria um plano de execução para visualizar antes de terraform plan
aplicá-lo. Em seguida, você aplica o plano de execução através do comando terraform apply . Quase tudo o que você faz com o Terraform envolve o uso dos terraform plan
comandos e terraform apply
.
Introdução
O Bicep e o Terraform oferecem recursos para ajudá-lo a começar. O módulo Learn para Bicep ajuda você a definir como seus recursos do Azure devem ser configurados. Você também é guiado pelas implantações de vários recursos do Azure para oferecer experiência prática.
Da mesma forma, HashiCorp Learn fornece aos usuários vários recursos de treinamento Terraform para ensiná-lo a instalar e usar Terraform. Esses recursos incluem informações que mostram como usar o Terraform para provisionar a infraestrutura no Azure.
Criação de código
A experiência de criação de código depende do número de suplementos disponíveis para o editor de sua escolha. Felizmente, tanto o Bicep quanto o Terraform oferecem recursos para melhorar a eficiência da criação de código.
Para o Bicep, um dos suplementos mais eficazes é a extensão Bicep Visual Studio Code. A extensão fornece recursos como validação de código, Intellisense, acesso à propriedade ponto e preenchimento automático de propriedade.
Para Terraform, a extensão Terraform Visual Studio Code com o Terraform Language Server oferece muitos dos mesmos recursos que a extensão Bicep Visual Studio Code. Por exemplo, a extensão também suporta realce de sintaxe, IntelliSense, navegação de código e um explorador de módulos. A HashiCorp também oferece [instruções detalhadas de instalação] em seu repositório GitHub (https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md) para configurar e usar o Terraform Language Server.
Cobertura do Azure
O Bicep tem uma vantagem sobre o Terraform quando se trata de configurar recursos do Azure. O Bicep está profundamente integrado com os serviços do Azure. Além disso, oferece suporte imediato para novos recursos do Azure. O Terraform fornece dois provedores que permitem que os usuários gerenciem o Azure: AzureRM e AzAPI. O provedor AzureRM oferece uma experiência totalmente personalizada para serviços estáveis do Azure. Às vezes, chegar a essa experiência personalizada pode resultar em um pouco de atraso. O provedor AzAPI é uma camada fina sobre as APIs REST do Azure Resource Manager, que - como o Bicep - habilita o suporte imediato para novos recursos do Azure. É importante considerar os requisitos de infraestrutura da sua organização e se eles são totalmente suportados antes de tomar uma decisão.
Comunidade e Suporte
A comunidade desempenha um papel fundamental para ajudar a aprender e superar desafios. As comunidades Terraform e Bicep oferecem um alto nível de envolvimento e apoio.
Para o suporte do Bicep, onde você vai para obter ajuda depende da natureza do problema:
Para o suporte Terraform, onde você vai para obter ajuda depende da natureza do problema:
Bugs de documentação: Para problemas com a documentação do Terraform no Microsoft Learn, cada artigo tem uma seção Feedback.
Código fonte do provedor e bugs de arquivamento: a Microsoft tem repositórios GitHub onde você pode arquivar bugs e contribuir para os provedores de código aberto Terraform Azure. Para listar os provedores disponíveis, navegue até a organização do Azure GitHub e insira terraform-provider-
o campo Localizar um repositório...
Perguntas centrais do Terraform: Visite a seção Terraform do portal da comunidade HashiCorp.
Perguntas relacionadas ao provedor Terraform: Visite a seção Provedores Terraform do portal da comunidade HashiCorp.
Resumo
O Bicep e o Terraform são duas opções líderes do IaC que facilitam a configuração e a implantação de recursos do Azure. Ambos oferecem recursos fáceis de usar que ajudam as organizações a aumentar a eficiência e a produtividade. Ao avaliar o melhor ajuste para sua organização, considere cuidadosamente seus requisitos e preferências de infraestrutura.