Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Pruebe AWS la infraestructura mediante LocalStack Terraform Tests
Ivan Girardi y Ioannis Kalyvas, Amazon Web Services
Resumen
Este patrón le ayuda a probar localmente la infraestructura como código (IaC) AWS en Terraform sin necesidad de aprovisionar la infraestructura en su entorno. AWS Integra el marco de pruebas de Terraform
Esta solución proporciona los siguientes beneficios:
Optimización de costos: la ejecución de pruebas LocalStack elimina la necesidad de usarlo. Servicios de AWS Esto evita que incurra en los costos asociados con la creación, el funcionamiento y la modificación de esos AWS recursos.
Velocidad y eficiencia: las pruebas locales también suelen ser más rápidas que implementar los AWS recursos. Este rápido ciclo de retroalimentación acelera el desarrollo y la depuración. Como LocalStack se ejecuta de forma local, puede desarrollar y probar sus archivos de configuración de Terraform sin conexión a Internet. Puede depurar los archivos de configuración de Terraform de forma local y recibir comentarios de inmediato, lo que simplifica el proceso de desarrollo.
Consistencia y reproducibilidad: LocalStack proporciona un entorno coherente para las pruebas. Esta coherencia ayuda a garantizar que las pruebas arrojen los mismos resultados, independientemente de los AWS cambios externos o los problemas de la red.
Aislamiento: las pruebas permiten LocalStack evitar que se afecten accidentalmente a AWS los recursos activos o a los entornos de producción. Este aislamiento permite experimentar y probar varias configuraciones de manera segura.
Automatización: la integración con una canalización de integración y entrega continuas (CI/CD) le permite probar automáticamente los archivos de configuración
de Terraform. La canalización prueba minuciosamente la IaC antes de la implementación. Flexibilidad: puede simular diferentes Regiones de AWS configuraciones y configuraciones de servicio para que se adapten mejor a sus entornos de producción. Cuentas de AWS
Requisitos previos y limitaciones
Requisitos previos
Habilite el acceso
al socket de Docker predeterminado ( /var/run/docker.sock). Para obtener más información, consulte la Documentación de LocalStack. Instalación
de Docker Compose Instalación
de la versión 1.6.0 o posterior de Terraform Instalación
de la CLI de Terraform Configure
el proveedor de Terraform AWS (Opcional) Instale y configure el AWS Command Line Interface (AWS CLI). Para ver un ejemplo de cómo usar el AWS CLI with LocalStack, consulta el repositorio de GitHub pruebas de AWS infraestructura LocalStack y Terraform Tests
.
Limitaciones
Este patrón proporciona ejemplos explícitos para probar los recursos de Amazon Simple Storage Service (Amazon S3) AWS Lambda y AWS Step Functions Amazon DynamoDB. Sin embargo, puede ampliar esta solución para incluir recursos adicionales AWS .
Este patrón proporciona instrucciones para ejecutar las pruebas de Terraform de forma local, pero ¿se pueden integrar las pruebas en cualquier CI/CD proceso?
Este patrón proporciona instrucciones para usar la imagen de la LocalStack comunidad. Si utilizas la imagen LocalStack Pro, consulta la documentación de LocalStack Pro
. LocalStack proporciona servicios de emulación para diferentes. AWS APIs Para una lista completa, consulte AWS Service Feature Coverage
. Es posible que algunas funciones avanzadas requieran una suscripción a LocalStack Pro.
Arquitectura
En el siguiente diagrama se muestra la arquitectura para esta solución. Los componentes principales son un repositorio de código fuente, una CI/CD canalización y un contenedor de LocalStack Docker. El contenedor LocalStack Docker aloja lo siguiente de forma local: Servicios de AWS
Un bucket de Amazon S3 para almacenar archivos
Amazon CloudWatch para la supervisión y el registro
Una AWS Lambda función para ejecutar código sin servidor
Una máquina de AWS Step Functions estados para organizar flujos de trabajo de varios pasos
Una tabla de Amazon DynamoDB para almacenar datos de NoSQL

En el diagrama, se muestra el siguiente flujo de trabajo:
Agregue y confirme un archivo de configuración de Terraform en el repositorio de código fuente.
La CI/CD canalización detecta los cambios e inicia un proceso de compilación para el análisis estático del código de Terraform. La canalización crea y ejecuta el contenedor de LocalStack Docker. A continuación, la canalización inicia el proceso de prueba.
La canalización carga un objeto en un bucket de Amazon S3 que está alojado en el contenedor de LocalStack Docker.
Al cargar el objeto, se invoca una función. AWS Lambda
La función Lambda almacena la notificación de eventos de Amazon S3 en un CloudWatch registro.
La función Lambda inicia una máquina de AWS Step Functions estados.
La máquina de estados escribe el nombre del objeto de Amazon S3 en una tabla de DynamoDB.
El proceso de prueba de la CI/CD canalización comprueba que el nombre del objeto cargado coincide con la entrada de la tabla de DynamoDB. También verifica que el bucket de S3 se haya implementado con el nombre especificado y que la AWS Lambda función se haya implementado correctamente.
Tools (Herramientas)
Servicios de AWS
Amazon le CloudWatch ayuda a supervisar las métricas de sus AWS recursos y las aplicaciones en las que se ejecuta AWS en tiempo real.
Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
AWS Step Functionses un servicio de organización sin servidor que le ayuda a combinar AWS Lambda funciones y otras Servicios de AWS para crear aplicaciones críticas para la empresa.
Otras herramientas
Docker
es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores. Docker Compose
es una herramienta para definir y ejecutar aplicaciones de varios contenedores. LocalStack
es un emulador de servicios en la nube que se ejecuta en un único contenedor. Al usarlo LocalStack, puede ejecutar cargas de trabajo en la máquina local que utilice Servicios de AWS, sin necesidad de conectarse al Nube de AWS. Terraform
es una herramienta de iAC HashiCorp que le ayuda a crear y administrar recursos locales y en la nube. Terraform Tests
le permite a validar las actualizaciones de configuración de los módulos de Terraform mediante pruebas análogas a las pruebas de integración o unitarias.
Repositorio de código
El código de este patrón está disponible en la AWS infraestructura de GitHub pruebas mediante el repositorio de Terraform LocalStack Tests
Prácticas recomendadas
Esta solución prueba la AWS infraestructura que se especifica en los archivos de configuración de Terraform y no implementa esos recursos en ellos. Nube de AWS Si quiere implementar los recursos, siga el principio del mínimo privilegio (documentación de IAM) y, de manera correcta, configure el backend de Terraform
(documentación de Terraform). Al LocalStack integrarlo en una CI/CD canalización, le recomendamos que no ejecute el contenedor LocalStack Docker en modo privilegiado. Para obtener más información, consulte Privilegios de tiempo de ejecución y capacidades de Linux
(documentación de Docker) y Seguridad para ejecutores autogestionados (GitLab documentación ).
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Clonar el repositorio. | En un intérprete de comandos de bash, ingrese el siguiente comando. Esto clona la AWS infraestructura de pruebas mediante LocalStack un repositorio de Terraform Tests
| DevOps ingeniero |
Ejecute el LocalStack contenedor. |
| DevOps ingeniero |
Inicialice Terraform. | Introduzca el comando siguiente para inicializar Terraform:
| DevOps ingeniero |
Ejecute Terraform Tests. |
| DevOps ingeniero |
Eliminación de recursos. | Introduzca el siguiente comando para destruir el LocalStack contenedor:
| DevOps ingeniero |
Resolución de problemas
| Problema | Solución |
|---|---|
Resultado de |
|
Recursos relacionados
Cómo empezar con Terraform: orientación para AWS CDKAWS CloudFormation expertos (orientación AWS prescriptiva)
Mejores prácticas para usar el AWS proveedor de Terraform (guía prescriptiva)AWS
Terraform CI/CD y sus pruebas AWS con el nuevo Terraform Test Framework
(entrada del blog)AWS Acelerar la entrega de software con LocalStack Cloud Emulator desde AWS Marketplace
(AWS entrada del blog)
Información adicional
Integración con GitHub acciones
Puedes integrar LocalStack y terraformar las pruebas en una CI/CD canalización mediante GitHub Actions. Para obtener más información, consulta la documentación de GitHub Actions
name: LocalStack Terraform Test on: push: branches: - '**' workflow_dispatch: {} jobs: localstack-terraform-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build and Start LocalStack Container run: | docker compose up -d - name: Setup Terraform uses: hashicorp/setup-terraform@v3 with: terraform_version: latest - name: Run Terraform Init and Validation run: | terraform init terraform validate terraform fmt --recursive --check terraform plan terraform show - name: Run Terraform Test run: | terraform test - name: Stop and Delete LocalStack Container if: always() run: docker compose down