Observação:

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:

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

Pré-requisitos

Tarefa 1: Gravar o Teste do Terraform para Validar a Criação de Recursos

  1. 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
    }
    
  2. 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"}
    
  3. 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.

  4. 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
    
  5. 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á.

  6. 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.

Agradecimentos

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.