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
Creada por Ivan Girardi (AWS) e Ioannis Kalyvas () AWS
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 usar. Servicios de AWS Esto evita incurrir 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 inmediatos, lo que agiliza 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 forma segura.
Automatización: la integración con una canalización de integración y entrega continuas (CI/CD) le ayuda a probar automáticamente los archivos de configuración de Terraform.
La canalización prueba minuciosamente el iAC antes de su 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 Docker predeterminado ( /var/run/docker.sock
). Para obtener más información, consulte la Documentación de LocalStack. Instale Docker
Compose Instale
Terraform, versión 1.6.0 o posterior 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 ¿puede integrar las pruebas en cualquier canalización de CI/CD?
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 obtener una lista completa, consulte Cobertura de las funciones del AWS servicio
. Es posible que algunas funciones avanzadas requieran una suscripción a LocalStack Pro.
Arquitectura
El siguiente diagrama muestra la arquitectura de esta solución. Los componentes principales son un repositorio de código fuente, una canalización de CI/CD 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 sin datos SQL
En el diagrama, se muestra el siguiente flujo de trabajo:
Agrega y confirma un archivo de configuración de Terraform en el repositorio de código fuente.
La canalización de CI/CD 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 Docker. LocalStack 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 canalización de CI/CD 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.
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 SQL sin base de datos totalmente administrado que proporciona 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 le 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 esenciales 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 ayuda 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 desea implementar los recursos, siga el principio del mínimo privilegio (IAMdocumentación) y configure correctamente el backend de Terraform (documentación de Terraform
). Al integrarlo LocalStack en una canalización de CI/CD, le recomendamos que no ejecute el contenedor Docker en modo privilegiado. LocalStack 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 (documentación). GitLab
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Clonar el repositorio. | En un shell 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 siguiente comando para inicializar Terraform:
| DevOps ingeniero |
Ejecute las pruebas de Terraform. |
| DevOps ingeniero |
Eliminación de recursos. | Introduzca el siguiente comando para destruir el LocalStack contenedor:
| DevOps ingeniero |
Resolución de problemas
Problema | Solución |
---|---|
|
|
Recursos relacionados
Información adicional
Integración con GitHub acciones
Puedes integrar LocalStack y terraformar las pruebas en una canalización de CI/CD mediante Actions. GitHub Para obtener más información, consulte la documentación de Actions. GitHub
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