Note:

Creación de un pipeline de validación de Terraform con el marco de prueba de Terraform y Oracle Cloud Infrastructure DevOps

Introducción

Las organizaciones utilizan con frecuencia módulos de Terraform para gestionar el aprovisionamiento de recursos complejo y ofrecen una interfaz sencilla para que los desarrolladores introduzcan los parámetros necesarios para desplegar la infraestructura deseada. Los módulos facilitan la reutilización del código y proporcionan a las organizaciones una forma de estandarizar el despliegue de cargas de trabajo comunes, como una aplicación web de tres niveles, un entorno de red en la nube o un pipeline de análisis de datos. Al desarrollar módulos de Terraform, los autores suelen empezar con pruebas manuales. Esto implica el uso de comandos como terraform validate para la validación de sintaxis, terraform plan para obtener una vista previa del plan de ejecución y terraform apply, seguidos de la inspección manual de las configuraciones de recursos en la consola de Oracle Cloud Infrastructure (OCI). Sin embargo, las pruebas manuales son propensas a errores humanos, no escalables y pueden provocar problemas no deseados. Dado que los módulos son utilizados por varios equipos dentro de una organización, es crucial probar a fondo cualquier cambio antes de su lanzamiento.

La prueba de Terraform es un nuevo marco de pruebas diseñado para que los autores de módulos realicen pruebas de integración y unidades para los módulos de Terraform. Permite la creación de la infraestructura como se define en el módulo, realiza comprobaciones de validación en la infraestructura y destruye los recursos de prueba independientemente de si las pruebas se superan o fallan. Además, la prueba de Terraform proporciona advertencias si no se puede destruir ningún recurso. Al utilizar la misma sintaxis de lenguaje de configuración (HCL) HashiCorp que los módulos de Terraform, se minimiza la necesidad de que los autores aprendan otras herramientas o lenguajes de programación.

Cada prueba de Terraform está en un archivo de prueba. Terraform detecta los archivos de prueba según su extensión de archivo: .tftest.hcl o .tftest.json. Cada archivo de prueba se compone de atributos y bloques de nivel raíz de la siguiente manera:

Terraform lleva a cabo bloques run de forma secuencial, imitando una secuencia de comandos de Terraform que se ejecutan en el directorio de configuración. La secuencia en la que se organizan los bloques variables y provider no importa, ya que Terraform evalúa todos los valores de estos bloques al inicio del proceso de prueba. Para mayor claridad, se recomienda colocar los bloques variables y provider al inicio del archivo de prueba.

Objetivos

Requisitos

Tarea 1: Escritura de la prueba de Terraform para validar la creación de recursos

  1. Hemos cubierto la estructura fundamental de un archivo de prueba de Terraform, escribamos algunas pruebas básicas para verificar la funcionalidad de la siguiente configuración de Terraform. La siguiente configuración de Terraform creará un cubo de OCI Object Storage de nivel Estándar.

    #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. Cree el archivo var.tf con las variables necesarias.

    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 el proveedor de Terraform de OCI con la autorización de la entidad de recurso, permite al proveedor realizar llamadas de API sin necesidad de proporcionar credenciales en la definición del proveedor. Para configurar la autorización de la entidad de recurso para el proveedor de OCI, consulte Resource Principal Authorization.

  4. Cree un archivo de prueba de Terraform en el directorio tests. A continuación, se muestra un ejemplo de la estructura de directorios:

    ├── main.tf 
    └── tests 
    └── test.tftest.hcl
    
  5. Actualice el archivo test.tftest.hcl, que comprueba si el nivel del cubo creado es Estándar o no.

    # 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"
      }
    
    }
    

    Nota: Si el nivel de almacenamiento del cubo no es estándar, la prueba fallará.

  6. Transfiera los archivos de terraform anteriores al repositorio de código de OCI. Utilizaremos este repositorio de código con nuestro pipeline de integración y despliegue continuos.

Tarea 2: Crear pipeline de compilación DevOps de OCI para validar la configuración de Terraform

En el archivo build_spec.yaml, los comandos terraform init y terraform validate se utilizan para inicializar Terraform y verificar que la configuración es válida. A continuación, el comando terraform test ejecuta las pruebas configuradas. Si cualquier prueba de terraforma falla, la tubería también fallará.

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 

Pasos Siguientes

Hemos realizado una prueba de afirmación sencilla en nuestra configuración de Terraform. Puede realizar diferentes tipos de pruebas, como pruebas de integración, pruebas de unidad, pruebas de extremo a extremo, etc. Para obtener más información, consulte la sección sobre pruebas de Terraform.

Este pipeline de validación de Terraform se puede integrar con el pipeline de integración y despliegue continuos de aplicaciones. El pipeline de validación de Terraform extraerá los artefactos de las etapas anteriores y probará la configuración antes de implantar los cambios.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.