Pruebe AWS la infraestructura mediante LocalStack Terraform Tests - Recomendaciones de AWS

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 con. LocalStack El contenedor LocalStack Docker proporciona un entorno de desarrollo local que emula varios. Servicios de AWS Esto le ayuda a probar e iterar las implementaciones de infraestructura sin incurrir en costos en ellas. Nube de AWS

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 

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

Una canalización de CI/CD crea y prueba el contenedor y los recursos de LocalStack Docker. AWS

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Agrega y confirma un archivo de configuración de Terraform en el repositorio de código fuente.

  2. 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.

  3. La canalización carga un objeto en un bucket de Amazon S3 que está alojado en el contenedor de LocalStack Docker.

  4. Al cargar el objeto, se invoca una función. AWS Lambda

  5. La función Lambda almacena la notificación de eventos de Amazon S3 en un CloudWatch registro.

  6. La función Lambda inicia una máquina de AWS Step Functions estados.

  7. La máquina de estados escribe el nombre del objeto de Amazon S3 en una tabla de DynamoDB.

  8. 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.

  • LocalStackes 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

Epics

TareaDescripciónHabilidades 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 de: GitHub

git clone https://github.com/aws-samples/localstack-terraform-test.git
DevOps ingeniero

Ejecute el LocalStack contenedor.

  1. Introduzca el siguiente comando para acceder al repositorio clonado:

    cd localstack-terraform-test
  2. Ingresa el siguiente comando para iniciar el contenedor de LocalStack Docker en modo separado:

    docker-compose up -d
  3. Espere a que el contenedor LocalStack Docker esté operativo.

DevOps ingeniero

Inicialice Terraform.

Introduzca el siguiente comando para inicializar Terraform:

terraform init
DevOps ingeniero

Ejecute las pruebas de Terraform.

  1. Introduzca el siguiente comando para ejecutar las pruebas de Terraform:

    terraform test
  2. Verifique que todas las pruebas se hayan completado correctamente. El resultado debería ser similar al siguiente:

    Success! 3 passed, 0 failed.
DevOps ingeniero

Eliminación de recursos.

Introduzca el siguiente comando para destruir el LocalStack contenedor:

docker-compose down
DevOps ingeniero

Resolución de problemas

ProblemaSolución

Error: reading DynamoDB Table Item (Files|README.md): emptyresultado al ejecutar el terraform test comando.

  1. Vuelva a introducir el terraform test comando.

  2. Si eso no resuelve el error, edite el archivo main.tf para aumentar el tiempo de espera de inactividad a un valor superior a 15 segundos:

    resource "time_sleep" "wait" { create_duration = "15s" triggers = { s3_object = local.key_json } }

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 El siguiente es un ejemplo de archivo de configuració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