Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Criar um Pipeline de Validação do Terraform usando o Terraform Test Framework e o Oracle Cloud Infrastructure DevOps
Introdução
As organizações utilizam frequentemente os módulos Terraform para gerenciar o intrincado provisionamento de recursos e oferecer uma interface direta para que os desenvolvedores insiram os parâmetros necessários para implantar a infraestrutura desejada. Os módulos facilitam a reutilização de código e fornecem às organizações uma maneira de padronizar a implantação de cargas de trabalho comuns, como um aplicativo web de três camadas, um ambiente de rede em nuvem ou um pipeline de análise de dados. Ao desenvolver módulos Terraform, os autores geralmente começam com testes manuais. Isso envolve o uso de comandos como terraform validate para validação de sintaxe, plano terraform para visualizar o plano de execução e terraform apply, seguido pela inspeção manual das configurações de recursos na Console do OCI (Oracle Cloud Infrastructure). O teste manual, no entanto, é propenso a erros humanos, não escaláveis, e pode levar a problemas não intencionais. Como os módulos são usados por várias equipes dentro de uma organização, é crucial testar completamente quaisquer alterações antes do lançamento.
O teste do Terraform é uma nova estrutura de teste projetada para autores de módulos realizarem testes de unidade e integração para módulos do Terraform. Ele permite a criação de infraestrutura, conforme definido no módulo, executa verificações de validação na infraestrutura e destrói recursos de teste, independentemente de os testes passarem ou falharem. Além disso, o teste do Terraform fornece avisos se algum recurso não puder ser destruído. Usando a mesma sintaxe HashiCorp Configuration Language (HCL) dos módulos do Terraform, ela minimiza a necessidade de os autores aprenderem outras ferramentas ou linguagens de programação.
Cada teste do Terraform está em um arquivo de teste. O Terraform descobre arquivos de teste com base em sua extensão de arquivo: .tftest.hcl
ou .tftest.json
. Cada arquivo de teste é composto de atributos e blocos de nível raiz da seguinte forma:
- Um ou mais blocos
run
. - Um ou zero bloco
variables
. - Zero a muitos blocos
provider
.
O Terraform executa blocos run
sequencialmente, imitando uma sequência de comandos do Terraform sendo executados no diretório de configuração. A sequência na qual os blocos variables
e provider
são organizados não importa, pois o Terraform avalia todos os valores dentro desses blocos no início do processo de teste. Para maior clareza, é aconselhável colocar os blocos variables
e provider
no início do arquivo de teste.
Objetivos
- Demonstrar como validar módulos Terraform e automatizar o processo usando um pipeline de Integração Contínua/Implantação Contínua (CI/CD).
Pré-requisitos
- Instale e configure o Terraform v1.6.0 e posterior. Para obter mais informações, consulte Instalar o Terraform.
Tarefa 1: Gravar o Teste do Terraform para Validar a Criação de Recursos
-
Nós abordamos a estrutura fundamental de um arquivo de teste do Terraform, vamos escrever alguns testes básicos para verificar a funcionalidade da configuração do Terraform a seguir. A configuração do Terraform a seguir criará um Bucket do OCI Object Storage da camada Padrão.
#main.tf resource "oci_objectstorage_bucket" "test_bucket" { compartment_id = var.compartment_id name = var.bucket_name namespace = var.bucket_namespace storage_tier = var.bucket_storage_tier versioning = var.bucket_versioning }
-
Crie o arquivo
var.tf
com as variáveis necessárias.variable compartment_id { default = "<compartment-ocid>" } variable region { default = "<region>" } variable bucket_name { default = "<bucket-name>"} variable bucket_namespace { default = "<object-storage-namespace>"} variable bucket_access_type { default = "ObjectRead"} variable bucket_storage_tier { default = "Standard"} variable bucket_versioning {default = "Enabled"}
-
Configurar o provedor Terraform do OCI com a autorização do controlador de recursos, permite que o provedor faça chamadas de API sem a necessidade de fornecer credenciais dentro da definição do provedor. Para configurar a autorização do controlador de recursos para o provedor do OCI, consulte Autorização do Controlador de Recursos.
-
Crie um arquivo de teste do Terraform no diretório
tests
. Veja um exemplo da estrutura de diretórios:├── main.tf └── tests └── test.tftest.hcl
-
Atualize o arquivo
test.tftest.hcl
, que verifica se a camada do bucket criado é Padrão ou não.# test.tftest.hcl run "valid_bucket_tier" { command = plan assert { condition = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard" error_message = "bucket tier is not standard" } }
Observação: Se a camada de armazenamento do bucket não for padrão, o teste falhará.
-
Envie os arquivos terraform acima para o repositório de código do OCI. Usaremos esse repositório de código com nosso pipeline de CI/CD.
Tarefa 2: Criar Pipeline de Build do OCI DevOps para Validar a Configuração do Terraform
No arquivo build_spec.yaml
, os comandos terraform init
e terraform validate
são usados para inicializar o Terraform e verificar se a configuração é válida. Em seguida, o comando terraform test executa os testes configurados. Se algum teste de terraform falhar, o pipeline também falhará.
version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash
failImmediatelyOnError: true
steps:
- type: Command
name: "Initialize Terraform"
command: |
terraform init
terraform validate
- type: Command
name: "Test Terraform"
command: |
terraform test
Próximas Etapas
Executamos um teste de asserção simples em nossa configuração do Terraform. Você pode executar diferentes tipos de teste, como teste de integração, teste de unidade, teste de ponta a ponta e assim por diante. Para obter mais informações, consulte Testes do Terraform.
Esse pipeline de validação do Terraform pode ser integrado ao pipeline de CI/CD do aplicativo. O pipeline de validação do Terraform extrairá os artefatos dos estágios anteriores e testará a configuração antes de implementar as alterações.
Links Relacionados
Agradecimentos
- Autor - Nikhil Khandelwal (Arquiteto de Nuvem Empresarial)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99877-01
June 2024