Para obter 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 IaC (infraestrutura como código). As ferramentas de 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 dá melhor suporte à sua infraestrutura e processos.
Estado e back-end
Terraform e Bicep são uma DSC (configuração de estado desejado), o que facilita o gerenciamento da infraestrutura de TI e desenvolvimento como código. O Terraform armazena o estado da sua infraestrutura gerenciada e configuração. O Terraform usa essas informações para mapear recursos do mundo real para sua configuração, acompanhar 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. É essencial fazer backup e proteger seus arquivos de estado. Assim como o Terraform, o Bicep é declarativo e orientado a objetivos. No entanto, o Bicep não armazena o estado. Em vez disso, o Bicep depende da implantação incremental.
Destinos de infraestrutura
Ao comparar o Bicep com o Terraform para gerenciar a infraestrutura de nuvem, é importante considerar seu ambiente de nuvem de destino:
- Somente Azure
- Várias nuvens ou nuvens híbridas
O Bicep é específico do Azure e não foi projetado para funcionar com outros serviços de nuvem.
Se sua meta for automatizar implantações em qualquer um dos seguintes ambientes, o Terraform provavelmente será a melhor opção:
- Ambientes de virtualização
- Cenários multinuvem - como o Azure e outras nuvens
- Cargas de trabalho locais
O Terraform interage com outros provedores de nuvem ou APIs usando plug-ins chamados provedores. Há vários provedores do Terraform Azure que permitem o gerenciamento da infraestrutura do Azure. Ao codificar uma configuração do Terraform, especifique os provedores necessários que você está usando. Quando você executa o terraform init, o provedor especificado é instalado e utilizável no código.
As ferramentas da CLI (Interface de Linha de Comando) desempenham um papel fundamental na orquestração por meio da implementação e gerenciamento da tecnologia de automação. O Bicep e o Terraform oferecem ferramentas da CLI.
O Bicep integra-se à CLI do Azure, permitindo que os desenvolvedores usem az
comandos como:
A CLI do Terraform permite que você execute tarefas como validar e formatar o 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 ao Azure Pipelines. Há um recurso semelhante disponível para o Terraform, mas você deve baixar e instalar a Extensão de Tarefas Terraform do Azure Pipelines para Visual Studio. Depois de instalado, você pode executar comandos da CLI do Terraform do Azure Pipelines. Além disso, o Terraform e o Bicep dão suporte ao GitHub Actions para automatizar builds de software, testes e implantações.
Processamento
Há 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 principal do serviço de infraestrutura do Azure. Esse recurso oferece vantagens como o processamento de pré-lançamento para verificar a política ou a disponibilidade para implantar várias instâncias em uma região. Com o Terraform, o processamento é feito dentro do cliente Terraform. Portanto, o pré-processamento não envolve chamadas para o Azure, pois ele usa estado e HCL (Linguagem HashiCorp) para determinar as alterações necessárias.
Autenticação
Os recursos de autenticação do Azure variam entre o Bicep e o Terraform. Com o Bicep, um token de autorização é fornecido durante a solicitação para enviar um arquivo Bicep e um modelo do 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 nas credenciais do 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 o uso de recursos do Azure, como o Azure Policy e como cada um interage com outras ferramentas e idiomas. A validação de pré-lançamento do Bicep 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 remediar recursos com políticas usando os modelos ARM fornecidos. O modelo do ARM pode ser usado para criar uma atribuição de política para outro recurso para correção automatizada. O Terraform, no entanto, falha quando um recurso é implantado que não é permitido devido à política.
Integração do portal
Uma grande vantagem que o Bicep tem sobre o Terraform é a capacidade de automatizar ações do portal. Com o Bicep, você pode usar o portal do Azure para exportar modelos. Exportar 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 do Terraform sejam compatíveis, você precisará 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 gerenciada pelo Terraform usando o Azure Export for Terraform. (A Exportação do Azure para Terraform é uma ferramenta open-source de propriedade e mantida pela Microsoft no repositório GitHub do Azure/aztfexport.)
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 Escalona de Máquinas Virtuais usando Bicep ou Terraform. Se você alterar esse conjunto 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 deverão ser reconciliadas com o Bicep e o código de modelo do 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 do Terraform e atualizar o HCL.
Portanto, se um ambiente envolver alterações frequentes fora de banda, o Bicep será mais fácil de usar. Ao usar o Terraform, você deve minimizar as alterações fora de banda.
Estruturas de nuvem
O CAF (Cloud Adoption Framework) é uma coleção de documentação, práticas recomendadas e ferramentas para acelerar a adoção da nuvem em todo o percurso da nuvem. O Azure fornece serviços nativos para implantar zonas de destino. O Bicep simplifica esse processo com uma experiência de portal com base nos modelos do ARM e na implementação da zona de destino. O Terraform utiliza um móduloEnterprise-Scale Zonas de Destino para implantar, gerenciar e operacionalizar com o Azure.
Resumo
O Bicep e o Terraform oferecem muitos recursos de integração e infraestrutura amigáveis. 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 híbrida ou múltipla. Além disso, considere os nove recursos discutidos neste artigo para fazer a melhor escolha para sua organização.
As organizações atuais 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 por meio da IaC (infraestrutura como código). Duas opções de IaC principais são Hashicorp Terraform e Bicep. O Terraform é uma ferramenta de software livre que ajuda os profissionais do DevOps a gerenciar serviços locais e de nuvem usando código declarativo. O Microsoft Bicep utiliza a sintaxe declarativa para simplificar a implantação de recursos do Azure.
Neste artigo, comparamos vários dos principais recursos de experiência do usuário para identificar semelhanças e diferenças entre o Terraform e o Bicep.
Sintaxe de linguagem
O Bicep e o Terraform são linguagens específicas do domínio (DSL) fáceis de usar e economizar tempo para o desenvolvedor. Ambas as ferramentas incorporam palavras-chave e conceitos semelhantes. Alguns desses conceitos são parametrização, suporte para projetos de vários arquivos e suporte para módulos externos. O Terraform, no entanto, oferece uma biblioteca mais rica de funcionalidade interna para determinadas tarefas. Decidir entre os dois é uma questão de preferência e experiência. Veja a seguir breves visões gerais e alguns dos recursos amigáveis que cada sintaxe de idioma oferece.
O Bicep é uma linguagem declarativa. Dessa forma, a ordem na qual os elementos são definidos no código não afeta a forma como a implantação é processada. O escopo de destino padrão do Bicep é 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.
O Terraform também é uma linguagem declarativa que usa a Linguagem de Configuração hashiCorp (HCL). A principal finalidade do HCL é declarar recursos. Outros recursos de linguagem servem para tornar a definição de recursos mais conveniente. E, assim como o Bicep, a ordenação de código nos arquivos de configuração do Terraform não é significativa.
Auxiliares de linguagem
O Bicep e o Terraform fornecem auxiliares de linguagem para simplificar as tarefas de codificação. Como ambos são amigáveis, a escolha depende em grande parte das preferências e dos requisitos.
O Bicep dá suporte a expressões para tornar seu código mais dinâmico e flexível. Diferentes tipos de funções podem ser usados em um arquivo do 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 sintaxe recorrente em um arquivo Bicep.
O Terraform também oferece funções internas que são chamadas de dentro de expressões para transformar e combinar valores. Assim como o Bicep, as expressões do Terraform podem incluir expressões complexas, como referências a dados exportados por recursos e a avaliação condicional. Os loops podem lidar com coleções e podem produzir várias instâncias de um recurso sem a necessidade de repetir o código.
Módulos
O Bicep e o Terraform dão suporte ao conceito de módulos. Os módulos permitem que você crie componentes reutilizáveis do 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 desenvolvida para componentes de infraestrutura semelhantes. Embora os módulos funcionem da mesma forma no Bicep e no Terraform, eles variam na implementação.
No Bicep, um módulo é simplesmente um arquivo Bicep 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 escaloná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 os principais meios de empacotar e reutilizar configurações de recursos entre 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
arquivos e/ou .tf.json
armazenados juntos em um diretório. Além dos módulos do sistema de arquivos local, o 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 de provisionamento
O Terraform e o Bicep permitem que os desenvolvedores validem uma configuração antes da implantação e apliquem as alterações. O Terraform fornece mais flexibilidade para destruir todos os objetos remotos gerenciados por uma configuração específica. Esse recurso é útil para limpar objetos temporários depois que seu trabalho é concluído. É crucial considerar os requisitos de ciclo de vida de implantações de infraestrutura típicas ao escolher a melhor opção.
O Bicep oferece uma operação de teste de hipóteses que permite que você visualize as alterações antes de implantar um arquivo do Bicep. O Azure Resource Manager fornece a what-if
operação e não faz nenhuma alteração 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 dão 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 terraform plan é semelhante à operação what-if
no Bicep. Com o terraform plan
comando, você cria um plano de execução para visualizar antes de aplicá-lo. Em seguida, você aplica o plano de execução por meio do comando aplicar terraform . Quase tudo o que você faz com o Terraform envolve usar tanto os comandos terraform plan
quanto terraform apply
.
Como começar
O Bicep e o Terraform oferecem recursos para ajudá-lo a começar. O módulo Learn para Bicep ajuda você a definir como os recursos do Azure devem ser configurados. Você também é guiado pelas implantações de vários recursos do Azure para oferecer uma experiência prática.
Da mesma forma, o HashiCorp Learn fornece aos usuários vários recursos de treinamento do Terraform para ensinar como instalar e usar o 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 complementos disponíveis para o editor de sua escolha. Felizmente, tanto o Bicep quanto o Terraform oferecem recursos para melhorar a eficiência de criação de código.
Para o Bicep, um dos complementos mais eficazes é a Bicep Visual Studio Code extension. A extensão fornece recursos como validação de código, Intellisense, acesso a propriedades por ponto e preenchimento automático de propriedades.
Para o Terraform, a extensão do Terraform Visual Studio Code com o Servidor de Linguagem Terraform oferece muitos dos mesmos recursos que a extensão do Bicep Visual Studio Code. Por exemplo, a extensão também dá suporte a realce de sintaxe, IntelliSense, navegação de código e um gerenciador 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 Servidor de Linguagem Terraform.
Cobertura do Azure
O Bicep tem uma vantagem sobre o Terraform quando se trata de configurar recursos do Azure. O Bicep está profundamente integrado aos 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 do 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 atraso. O provedor de AzAPI é uma camada fina sobre as APIs REST do Azure Resource Manager, que, como o Bicep, oferece suporte imediato para novos recursos do Azure. É importante considerar os requisitos de infraestrutura da sua organização e se eles têm suporte total 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 engajamento e apoio.
Para o suporte do Bicep, onde você vai para obter ajuda depende do tipo de problema:
Para o suporte do Terraform, o local em que 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 comentários.
Código-fonte do provedor e reporte de bugs: a Microsoft possui repositórios no GitHub onde você pode reportar bugs e contribuir para os provedores de código aberto do Terraform Azure. Para listar os provedores disponíveis, navegue até a organização do GitHub do Azure e insira terraform-provider-
no campo Localizar um repositório...
Perguntas principais do Terraform: visite a seção Terraform do portal da comunidade HashiCorp.
Perguntas relacionadas ao provedor Terraform: visite a seção de Provedores de Terraform no portal da comunidade HashiCorp.
Resumo
O Bicep e o Terraform são duas opções de IaC líderes que facilitam a configuração e a implantação de recursos do Azure. Ambos oferecem recursos amigáveis que ajudam as organizações a aumentar a eficiência e a produtividade. Ao avaliar a melhor opção para sua organização, considere cuidadosamente seus requisitos e preferências de infraestrutura.