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, vista previa e 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 la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite 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.
Muchas veces, las pruebas de cumplimiento forman parte del proceso de integración continua y se usan para asegurarse de que se siguen las directivas definidas por el usuario. Por ejemplo, puede definir convenciones de nomenclatura geopolítica para los recursos de Azure. Otro ejemplo común es crear máquinas virtuales a partir de un subconjunto definido de imágenes. Las pruebas de cumplimiento se usarían para aplicar reglas en estos y muchos otros escenarios.
En este artículo aprenderá a:
- Comprender cuándo usar las pruebas de cumplimiento
- Aprenda a realizar una prueba de cumplimiento
- Consulte y ejecute una prueba de cumplimiento de ejemplo.
1. Configuración del entorno
- Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.
Configurar Terraform: si aún no lo ha hecho, configure Terraform con una de las siguientes opciones:
Docker:Instale Docker.
Python:Instalar Python.
Herramienta de cumplimiento de Terraform: Instale la herramienta de cumplimiento de Terraform ejecutando el siguiente comando:
pip install terraform-compliance
.Código y recursos de ejemplo: Con la herramienta DownGit, descargue desde GitHub el proyecto de pruebas de cumplimiento y descomprima en un nuevo directorio para contener el código de ejemplo. Este directorio se conoce como directorio de ejemplo.
2. Descripción de las pruebas y comprobaciones de cumplimiento
Las pruebas de cumplimiento son una técnica de prueba no funcional para determinar si un sistema cumple los estándares prescritos. Las pruebas de cumplimiento también se conocen como pruebas de conformidad.
La mayoría de los equipos de software realizan un análisis para comprobar que los estándares se aplican e implementan correctamente. A menudo trabajando simultáneamente para mejorar los estándares que, a su vez, conducen a un aumento de la calidad.
Con las pruebas de cumplimiento, hay dos conceptos importantes que se deben tener en cuenta: pruebas de cumplimiento y comprobaciones de cumplimiento.
- Las pruebas de cumplimiento garantizan que la salida de cada fase del ciclo de vida de desarrollo se ajuste a los requisitos acordados.
- Las comprobaciones de cumplimiento deben integrarse en el ciclo de desarrollo al principio de los proyectos. Intentar agregar comprobaciones de cumplimiento en una fase posterior se vuelve cada vez más difícil cuando el propio requisito no está documentado adecuadamente.
Realizar comprobaciones de cumplimiento es sencillo. Se desarrolla y documenta un conjunto de estándares y procedimientos para cada fase del ciclo de vida de desarrollo. La salida de cada fase se compara con los requisitos documentados. Los resultados de la prueba identifican las "brechas" en el cumplimiento de los estándares predeterminados. Las pruebas de cumplimiento se realizan a través del proceso de inspección y se debe documentar el resultado del proceso de revisión.
Echemos un vistazo a un ejemplo específico.
Un problema común es los entornos que se interrumpen cuando varios desarrolladores aplican cambios incompatibles. Supongamos que una persona trabaja en un cambio y aplica recursos como la creación de una máquina virtual en un entorno de prueba. A continuación, otra persona aplica una versión diferente del código que aprovisiona una versión diferente de esa máquina virtual. Lo que se necesita aquí es la supervisión para garantizar la conformidad con las reglas indicadas.
Una manera de solucionar este problema sería definir una directiva de etiquetado de los recursos, como con role
etiquetas y creator
. Una vez definidas las directivas, se usa una herramienta como Terraform-compliance para asegurarse de que se siguen las directivas.
El cumplimiento con Terraform se centra en las pruebas negativas. Las pruebas negativas son el proceso de asegurarse de que un sistema pueda controlar correctamente la entrada inesperada o el comportamiento no deseado. Las pruebas de vulnerabilidad ante datos aleatorios o inesperados son un ejemplo de prueba negativa. Con el fuzzing, se prueba un sistema que recibe datos de entrada para asegurarse de que puede controlar de forma segura una entrada inesperada.
Afortunadamente, Terraform es una capa de abstracción para cualquier API que cree, actualice o destruya entidades de infraestructura en la nube. Terraform también garantiza que la configuración local y las respuestas de api remota estén sincronizadas. Dado que Terraform se usa principalmente en las API en la nube, todavía necesitamos una manera de asegurarse de que el código implementado en la infraestructura sigue directivas específicas. Terraform-compliance: una herramienta gratuita y de código abierto, proporciona esta funcionalidad para las configuraciones de Terraform.
Con el ejemplo de máquina virtual, una directiva de cumplimiento podría ser la siguiente: "Si va a crear un recurso de Azure, debe contener una etiqueta".
La herramienta de cumplimiento de Terraform proporciona un marco de pruebas en el que se crean directivas como el ejemplo. Después, esas directivas se ejecutan en el plan de ejecución de Terraform.
Terraform-compliance le permite aplicar principios de BDD, o desarrollo impulsado por comportamientos. BDD es un proceso colaborativo en el que todas las partes interesadas trabajan conjuntamente para definir lo que debe hacer un sistema. Estas partes interesadas generalmente incluyen a los desarrolladores, probadores y a cualquier persona con un interés en, o que se verá afectado por, el sistema que se está desarrollando. El objetivo de BDD es animar a los equipos a crear ejemplos concretos que expresen una comprensión común de cómo debe comportarse el sistema.
3. Examen de un ejemplo de prueba de cumplimiento
Anteriormente en este artículo, leíste sobre un ejemplo de prueba de cumplimiento al crear una máquina virtual para un entorno de test. En esta sección se muestra cómo traducir ese ejemplo en una característica y un escenario de BDD. La regla se expresa por primera vez mediante Cucumber, que es una herramienta que se usa para apoyar BDD.
when creating Azure resources, every new resource should have a tag
La regla anterior se traduce de la siguiente manera:
If the resource supports tags
Then it must contain a tag
And its value must not be null
A continuación, el código HCL de Terraform se adhiere a la regla como se indica a continuación.
resource "random_uuid" "uuid" {}
resource "azurerm_resource_group" "rg" {
name = "rg-hello-tf-${random_uuid.uuid.result}"
location = var.location
tags = {
environment = "dev"
application = "Azure Compliance"
}
}
La primera directiva podría escribirse como un escenario de características BDD de la siguiente manera:
Feature: Test tagging compliance # /target/src/features/tagging.feature
Scenario: Ensure all resources have tags
If the resource supports tags
Then it must contain a tag
And its value must not be null
El código siguiente muestra una prueba para una etiqueta específica:
Scenario Outline: Ensure that specific tags are defined
If the resource supports tags
Then it must contain a tag <tags>
And its value must match the "<value>" regex
Examples:
| tags | value |
| Creator | .+ |
| Application | .+ |
| Role | .+ |
| Environment | ^(prod\|uat\|dev)$ |
4. Ejecutar el ejemplo de prueba de cumplimiento
En esta sección, descarga y prueba el ejemplo.
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.
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Ejecute terraform show para convertir el plan de ejecución en JSON para el paso de cumplimiento.
terraform show -json main.tfplan > main.tfplan.json
Ejecute docker pull para descargar la imagen de terraform-compliance.
docker pull eerkunt/terraform-compliance
Ejecute Docker run para ejecutar las pruebas en un contenedor de Docker.
docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
Puntos clave:
- Se producirá un error en la prueba porque, aunque la primera regla que requiere la existencia de etiquetas se realiza correctamente, se produce un error en la segunda regla en la que faltan las
Role
etiquetas yCreator
.
- Se producirá un error en la prueba porque, aunque la primera regla que requiere la existencia de etiquetas se realiza correctamente, se produce un error en la segunda regla en la que faltan las
Corrija el error modificando
main.tf
como se indica a continuación (donde se agrega unaRole
etiqueta yCreator
).tags = { Environment = "dev" Application = "Azure Compliance" Creator = "Azure Compliance" Role = "Azure Compliance" }
Puntos clave:
- La configuración ahora cumple con la directiva.
5. Comprobación de los resultados
Vuelva a ejecutar
terraform validate
para comprobar la sintaxis.terraform validate
Vuelva a ejecutar
terraform plan
para crear un nuevo plan de ejecución.terraform plan -out main.tfplan
Ejecute terraform show para convertir el plan de ejecución en JSON para el paso de cumplimiento.
terraform show -json main.tfplan > main.tfplan.json
Ejecuta docker run de nuevo para probar la configuración. Si se ha implementado la especificación completa, la prueba se realiza correctamente.
docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
Ejecute terraform apply para aplicar el plan de ejecución.
terraform apply main.tfplan -target=random_uuid.uuid
Puntos clave:
- Se crea un grupo de recursos con un nombre que sigue al patrón :
rg-hello-tf-<random_number>
.
- Se crea un grupo de recursos con un nombre que sigue al patrón :
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure