Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al completar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
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:
- Uno o más bloques
run
. - Un bloque
variables
o cero. - De cero a varios bloques
provider
.
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
- Demostrar cómo validar módulos de Terraform y automatizar el proceso mediante un pipeline de integración/despliegue continuo (CI/CD).
Requisitos
- Instale y configure Terraform v1.6.0 y versiones posteriores. Para obtener más información, consulte Instalación de Terraform.
Tarea 1: Escritura de la prueba de Terraform para validar la creación de recursos
-
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 }
-
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"}
-
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.
-
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
-
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á.
-
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.
Enlaces relacionados
Agradecimientos
- Autor: Nikhil Khandelwal (arquitecto de nube empresarial)
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.
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99871-01
June 2024