Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Terraform habilita la definición, la previsualización y la implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de nube , como Azure, y los elementos que componen la infraestructura en la nube. Después de crear los archivos de configuración, cree un plan de ejecución que le permita obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.
Las pruebas de integración validan que un cambio de código recién introducido no interrumpe el código existente. En DevOps, la integración continua (CI) hace referencia a un proceso que compila todo el sistema siempre que se cambia el código fuente; por ejemplo, cuando alguien quiere fusionar un pull request en un repositorio de Git. La lista siguiente contiene ejemplos comunes de pruebas de integración:
- Herramientas de análisis de código estático, como lint y formato.
- Ejecute terraform validate para comprobar la sintaxis del archivo de configuración.
- Ejecute terraform plan para asegurarse de que la configuración funcionará según lo previsto.
En este artículo, aprenderá a:
- Conozca los conceptos básicos de las pruebas de integración para proyectos de Terraform.
- Use Azure DevOps para configurar una canalización de integración continua.
- Ejecute el análisis de código estático en el código de Terraform.
- Ejecute
terraform validate
para validar los archivos de configuración de Terraform en el equipo local. - Ejecute
terraform plan
para validar los archivos de configuración de Terraform desde la perspectiva de los servicios remotos. - Use una canalización de Azure para automatizar la integración continua.
1. Configuración del entorno
- Suscripción de Azure: Si no tiene una suscripción de Azure, antes de empezar, cree una cuenta gratuita .
Configurar terraform: si aún no lo ha hecho, configure Terraform con una de las siguientes opciones:
La organización y el proyecto de Azure DevOps: si no tiene una, cree una organización de Azure DevOps.
Extensión de tareas de compilación y lanzamiento de Terraform &: Instalar la extensión de tareas de compilación y lanzamiento de Terraform en tu organización de Azure DevOps.
Conceder a Azure DevOps acceso a la suscripción de Azure : cree una conexión de servicio de Azuredenominada para permitir que Azure Pipelines se conecte a las suscripciones de Azure. Código y recursos de ejemplo: Descargar desde GitHub el proyecto integration-testing. El directorio en el que se descarga el ejemplo se conoce como directorio de ejemplo .
2. Validar una configuración local de Terraform
El comando terraform validate se ejecuta desde la línea de comandos del directorio que contiene los archivos de Terraform. Este objetivo principal de los comandos es validar la sintaxis.
En el directorio de ejemplo, vaya al directorio
src
.Ejecute terraform init para inicializar el directorio de trabajo.
terraform init
Ejecute terraform validate para validar la sintaxis de los archivos de configuración.
terraform validate
Puntos clave:
- Verá un mensaje que indica que la configuración de Terraform es válida.
Edite el archivo
main.tf
.En la línea 5, inserte un error tipográfico que invalide la sintaxis. Por ejemplo, reemplace
var.location
porvar.loaction
Guarde el archivo.
Vuelva a ejecutar la validación.
terraform validate
Puntos clave:
- Verá un mensaje de error que indica la línea de código en error y una descripción del error.
Como puede ver, Terraform ha detectado un problema en la sintaxis del código de configuración. Este problema impide que se implemente la configuración.
Es recomendable ejecutar siempre terraform validate
en los archivos de Terraform antes de insertarlos en el sistema de control de versiones. Además, este nivel de validación debe formar parte del flujo de trabajo de integración continua. Más adelante en este artículo, exploraremos cómo configurar una canalización de Azure para realizar la validación automáticamente.
3. Validar la configuración de Terraform
En la sección anterior, ha visto cómo validar una configuración de Terraform. Ese nivel de prueba era específico de la sintaxis. Esa prueba no ha tenido en cuenta lo que podría estar ya implementado en Azure.
Terraform es un lenguaje declarativo que significa que declara lo que desea como resultado final. Por ejemplo, supongamos que tiene 10 máquinas virtuales en un grupo de recursos. A continuación, cree un archivo de Terraform que defina tres máquinas virtuales. La aplicación de este plan no incrementa el recuento total a 13. En su lugar, Terraform elimina siete de las máquinas virtuales para que termine con tres. La ejecución de terraform plan
permite confirmar los posibles resultados de aplicar un plan de ejecución para evitar sorpresas.
Para generar el plan de ejecución de Terraform, ejecute terraform plan. Este comando se conecta a la suscripción de Azure de destino para comprobar qué parte de la configuración ya está implementada. A continuación, Terraform determina los cambios necesarios para cumplir los requisitos indicados en el archivo de Terraform. En esta fase, Terraform no implementa nada. Le indica lo que ocurrirá si aplica el plan.
Si sigue el artículo y ha realizado los pasos descritos en la sección anterior, ejecute el comando terraform plan
:
terraform plan
Después de ejecutar terraform plan
, Terraform muestra el resultado potencial de aplicar el plan de ejecución. La salida indica los recursos de Azure que se agregarán, cambiarán y destruirán.
De forma predeterminada, Terraform almacena el estado en el mismo directorio local que el archivo de Terraform. Este patrón funciona bien en escenarios de usuario único. Sin embargo, cuando varias personas trabajan en los mismos recursos de Azure, los archivos de estado local pueden salir de la sincronización. Para solucionar este problema, Terraform admite la escritura de archivos de estado en un almacén de datos remoto (como Azure Storage). En este escenario, podría ser problemático ejecutar terraform plan
en un equipo local y dirigirse a una máquina remota. Como resultado, puede que tenga sentido automatizar este paso de validación como parte de la canalización de integración continua.
4. Ejecutar análisis de código estático
El análisis de código estático se puede realizar directamente en el código de configuración de Terraform, sin ejecutarlo. Este análisis puede ser útil para detectar problemas como problemas de seguridad y incoherencia de cumplimiento.
Las siguientes herramientas proporcionan análisis estáticos para archivos de Terraform:
El análisis estático suele ejecutarse como parte de una canalización de integración continua. Estas pruebas no requieren la creación de un plan de ejecución ni una implementación. Como resultado, se ejecutan más rápido que otras pruebas y generalmente se ejecutan primero en el proceso de integración continua.
5. Automatización de pruebas de integración mediante Azure Pipeline
La integración continua implica probar todo un sistema cuando se introduce un cambio. En esta sección, verá una configuración de Azure Pipeline que se usa para implementar la integración continua.
Usando el editor de su preferencia, acceda al clon local del proyecto de ejemplo de Terraform en GitHub.
Abra el archivo
samples/integration-testing/src/azure-pipeline.yaml
.Desplácese hacia abajo hasta la sección pasos donde verá un conjunto estándar de pasos que se usan para ejecutar varias rutinas de instalación y validación.
Revise la línea que dice Paso 1: ejecute el análisis de código estático Checkov. En este paso, el proyecto de
Checkov
mencionado anteriormente ejecuta un análisis de código estático en la configuración de Terraform de ejemplo.- bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory) displayName: Checkov Static Code Analysis
Puntos clave:
- Este script es responsable de ejecutar Checkov en el área de trabajo de Terraform montada dentro de un contenedor de Docker. Los agentes administrados por Microsoft están habilitados para Docker. La ejecución de herramientas dentro de un contenedor de Docker es más fácil y elimina la necesidad de instalar Checkov en el agente de Azure Pipeline.
- La variable
$(terraformWorkingDirectory)
se define en el archivoazure-pipeline.yaml
.
Revise la línea que lee Paso 2: instalar Terraform en el agente de Azure Pipelines. La extensión Terraform Build & Release Tasks que ha instalado antes tiene un comando para instalar Terraform en el agente que ejecuta la canalización de Azure. Esta tarea es lo que se hace en este paso.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0 displayName: 'Install Terraform' inputs: terraformVersion: $(terraformVersion)
Puntos clave:
- La versión de Terraform que se va a instalar se especifica a través de una variable de Azure Pipeline denominada
terraformVersion
y se define en el archivoazure-pipeline.yaml
.
- La versión de Terraform que se va a instalar se especifica a través de una variable de Azure Pipeline denominada
Revisa la línea que dice, Paso 3: ejecutar Terraform init para inicializar el área de trabajo. Ahora que Terraform está instalado en el agente, se puede inicializar el directorio de Terraform.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform init' inputs: command: init workingDirectory: $(terraformWorkingDirectory)
Puntos clave:
- La entrada
command
especifica qué comando de Terraform se va a ejecutar. - La entrada
workingDirectory
indica la ruta de acceso del directorio de Terraform. - La variable
$(terraformWorkingDirectory)
se define en el archivoazure-pipeline.yaml
.
- La entrada
Revise la línea que lee Paso 4: ejecutar Terraform validate para validar la sintaxis de HCL. Una vez inicializado el directorio del proyecto, se ejecuta
terraform validate
para validar la configuración en el servidor.- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform validate' inputs: command: validate workingDirectory: $(terraformWorkingDirectory)
Revise la línea que lee Paso 5: ejecutar plan de Terraform para validar la sintaxis de HCL. Como se explicó anteriormente, la generación del plan de ejecución se realiza para comprobar si la configuración de Terraform es válida antes de la implementación.
- task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0 displayName: 'Run terraform plan' inputs: command: plan workingDirectory: $(terraformWorkingDirectory) environmentServiceName: $(serviceConnection) commandOptions: -var location=$(azureLocation)
Puntos clave:
- La entrada
environmentServiceName
hace referencia al nombre de la conexión de servicio de Azure creada en Configuración del entorno. La conexión permite a Terraform acceder a la suscripción de Azure. - La entrada
commandOptions
se usa para pasar argumentos al comando de Terraform. En este caso, se especifica una ubicación. La variable$(azureLocation)
se define anteriormente en el archivo YAML.
- La entrada
Importar el pipeline en Azure DevOps
Abra el proyecto de Azure DevOps y vaya a la sección Azure Pipelines.
Seleccione el botón Crear canalización.
Para la opción ¿Dónde está tu código?, seleccione GitHub (YAML).
En este momento, es posible que tenga que autorizar a Azure DevOps a acceder a su organización. Para obtener más información sobre este tema, consulte el artículo, Construir repositorios de GitHub.
En la lista de repositorios, seleccione el fork del repositorio que creó en su organización de GitHub.
En el paso Configurar la canalización, elija empezar desde una canalización YAML existente.
Cuando aparezca la página Select existing YAML pipeline (Seleccionar la canalización de YAML existente), especifique la rama
master
y escriba la ruta de acceso a la canalización YAML:samples/integration-testing/src/azure-pipeline.yaml
.Seleccione Continuar para cargar el pipeline de YAML de Azure desde GitHub.
Cuando aparezca la página Revisar YAML de la canalización, seleccione Ejecutar para crear y desencadenar manualmente la canalización por primera vez.
Comprobación de los resultados
Puede ejecutar la canalización manualmente desde la interfaz de usuario de Azure DevOps. Sin embargo, el punto del artículo es mostrar la integración continua automatizada. Para probar el proceso, confirme un cambio en la carpeta samples/integration-testing/src
del repositorio bifurcado. El cambio desencadenará automáticamente una nueva canalización en la rama en la que estás empujando el código.
Una vez hecho ese paso, acceda a los detalles de Azure DevOps para asegurarse de que todo se ejecutó correctamente.
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure