Cree solicitudes de cambios automatizadas para la AWS infraestructura gestionada por Terraform mediante Actions GitHub - 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.

Cree solicitudes de cambios automatizadas para la AWS infraestructura gestionada por Terraform mediante Actions GitHub

Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay y Prafful Gupta, Amazon Web Services

Resumen

Este patrón presenta una utilidad de automatización diseñada para eliminar el trabajo manual y repetitivo que implica la gestión de los cambios en varios repositorios de Terraform. Muchas organizaciones utilizan los repositorios de Terraform para administrar su infraestructura como código (IaC), a menudo con cientos de repositorios independientes que representan diferentes entornos, servicios o equipos. Administrar estos repositorios a escala presenta un desafío operativo importante. Las tareas rutinarias, como la actualización de un parámetro, la actualización de las versiones de los módulos o la aplicación de cambios de configuración, suelen requerir la creación y la gestión de solicitudes de extracción (PRs) en muchos repositorios varias veces al día.

Incluso en el caso de cambios sencillos, este proceso manual y repetitivo lleva mucho tiempo y es propenso a errores. Los ingenieros deben aplicar el mismo cambio de forma coherente en todos los repositorios de destino y elaborar títulos y descripciones de PR significativos. Además, a menudo tienen que interactuar con herramientas externas, como Jira, para obtener o incluir referencias sobre el seguimiento de problemas. Estas tareas, si bien son necesarias, son tareas pesadas indiferenciadas que consumen un valioso tiempo de ingeniería y reducen la eficiencia general. La falta de automatización en este flujo de trabajo crea fricciones, ralentiza la entrega y aumenta la carga cognitiva de los equipos encargados de mantener las infraestructuras de Terraform a gran escala.

Descripción general de la solución

Para hacer frente a este desafío, este patrón ofrece una utilidad totalmente basada en la configuración, que permite a los usuarios definir los cambios que desean en un archivo de configuración estructurado. Este archivo especifica los repositorios, módulos, parámetros y valores de destino mediante un esquema claramente definido.

Una vez configurada, la utilidad realiza los siguientes pasos automatizados:

  1. Lee la configuración definida por el usuario para determinar el alcance y la naturaleza de los cambios.

  2. Crea una nueva ramificación en cada repositorio de destino a la que se aplican las actualizaciones necesarias.

  3. Genera una PR para cada cambio, lo que garantiza la coherencia en todos los repositorios.

  4. Envía notificaciones de Slack (opcional) para alertar a las partes interesadas con enlaces directos a la creada PRs

Al automatizar estas tareas repetitivas, la empresa de servicios reduce considerablemente el tiempo, el esfuerzo y el riesgo asociados a la gestión de actualizaciones de infraestructura a gran escala. Permite a los equipos centrarse en tareas de ingeniería de mayor valor y, al mismo tiempo, ayuda a garantizar que los cambios se apliquen de forma coherente y se puedan rastrear en todos los repositorios.

Requisitos previos y limitaciones

Requisitos previos 

  • Un activo Cuenta de AWS.

  • Python versión 3.8 o posterior.

  • Un token de acceso GitHub personal (PAT). Para obtener más información, consulte Creación de un token de acceso personal (clásico) en la GitHub documentación.

  • El GitHub PAT puede acceder a los repositorios de destino para que la utilidad pueda realizar operaciones como la creación de sucursales y solicitudes de extracción de información. Para obtener más información, consulta el repositorio de GitHub códigos de este patrón.

Limitaciones

  • La complejidad de la configuración presenta el principal desafío. La eficacia de la automatización está limitada por las capacidades de su archivo de configuración. Si bien el sistema gestiona los cambios estándar de manera eficiente, las modificaciones complejas de la infraestructura pueden requerir una intervención manual y algunos casos de la periferia quedan fuera del alcance de la gestión automatizada.

  • La seguridad y el acceso presentan consideraciones importantes, especialmente a la hora de gestionar los tokens de GitHub acceso y los límites de velocidad de las API. Las organizaciones deben equilibrar cuidadosamente la necesidad de automatización con el almacenamiento y la administración seguros de credenciales, garantizando los controles de acceso adecuados y manteniendo la eficiencia operativa.

  • Las restricciones de validación representan otra limitación notable porque el sistema automatizado tiene una capacidad limitada para validar la lógica empresarial y los requisitos específicos del entorno. Las dependencias complejas y las interacciones entre servicios suelen requerir la supervisión humana, ya que la validación automatizada no puede captar plenamente todos los matices contextuales y las reglas empresariales.

  • Los problemas de escalabilidad y rendimiento surgen cuando se trata de cambios de infraestructura a gran escala. El sistema debe funcionar dentro de los límites de la GitHub API y, al mismo tiempo, gestionar numerosos repositorios simultáneamente. Las operaciones que consumen muchos recursos en una infraestructura extensa pueden crear cuellos de botella en el rendimiento que requieren una administración cuidadosa.

  • Los límites de integración restringen la flexibilidad del sistema porque está diseñado principalmente para funcionar con herramientas específicas, como GitHub Slack. Es posible que las organizaciones que utilizan diferentes herramientas necesiten soluciones personalizadas y las opciones de personalización del flujo de trabajo de este patrón se limitan a los puntos de integración compatibles.

Arquitectura

En el siguiente diagrama se muestran el flujo de trabajo y los componentes de esta solución.

Flujo de trabajo para crear solicitudes de cambios automatizadas mediante GitHub Actions.

El flujo de trabajo consta de los pasos siguientes:

  1. El desarrollador activa GitHub las acciones especificando el repositorio de Terraform.

  2. La utilidad de automatización lee las configuraciones definidas.

  3. La utilidad de automatización también extrae el repositorio de Terraform proporcionado.

  4. La utilidad de automatización crea una nueva ramificación y actualiza las plantillas de Terraform de forma local.

  5. La utilidad de automatización envía la nueva ramificación al repositorio y crea una nueva PR.

  6. La utilidad de automatización utiliza notificaciones de Slack que incluyen enlaces de relaciones públicas para notificar a los desarrolladores y permite el despliegue de plantillas de Terraform. Nube de AWS

Tools (Herramientas)

  • GitHubes una plataforma para desarrolladores que los desarrolladores pueden usar para crear, almacenar, administrar y compartir su código.

  • GitHub Actions es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con GitHub los repositorios. Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación.

  • HashiCorp Terraform es una herramienta de infraestructura como código (IaC) que te ayuda a crear y administrar recursos locales y en la nube.

  • Slack, una oferta de Salesforce, es una plataforma conversacional basada en inteligencia artificial que permite la colaboración por chat y video, automatiza los procesos sin código y permite compartir información.

Repositorio de código

El código de este patrón está disponible en el flujo de trabajo GitHub automatizado de actualización de la infraestructura de Terraform mediante el repositorio Actions. GitHub

Prácticas recomendadas

  • La gestión eficaz de los cambios es crucial para una implementación correcta. Las organizaciones deben adoptar una estrategia de despliegue gradual para los cambios a gran escala. Mantenga las convenciones de nomenclatura de las ramificaciones y las descripciones de PR coherentes y garantice una documentación exhaustiva de todos los cambios.

  • Los controles de seguridad deben implementarse rigurosamente, centrándose en los principios de acceso con privilegios mínimos y en la gestión segura de las credenciales. Habilite las reglas de protección de las ramificaciones para evitar cambios no autorizados. Realice auditorías de seguridad periódicas para mantener la integridad del sistema.

  • Un protocolo de prueba sólido debe incluir la ejecución de terraform plan automatizada en canalizaciones de integración e implementación continuas (CI/CD). El protocolo también debe incluir comprobaciones de validación previas a la confirmación y entornos de revisión específicos para los cambios críticos. Este enfoque de pruebas de varios niveles ayuda a detectar los problemas de forma temprana y garantiza la estabilidad de la infraestructura.

  • La estrategia de monitoreo debe incluir mecanismos de alerta integrales, un seguimiento detallado de success/failure las métricas y mecanismos de reintento automatizados en caso de operaciones fallidas. Esta estrategia ayuda a garantizar la visibilidad operativa y permite responder rápidamente a cualquier problema que surja.

  • Los estándares de configuración deben hacer hincapié en el control de versiones de todas las configuraciones, manteniendo la modularidad para facilitar la reutilización y la escalabilidad. La documentación clara del esquema y los ejemplos ayudan a los equipos a comprender y utilizar el sistema de automatización de forma eficaz.

Epics

TareaDescripciónHabilidades requeridas

Configure el repositorio.

Para clonar el repositorio, ejecute los siguientes comandos:

# Clone the automation tool repository git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility cd sample-terraform-pr-automation-utility # Copy example configuration cp config.example.yaml config.yaml
AWS DevOps

Instale las dependencias.

Para instalar y verificar las dependencias de Python, ejecute los siguientes comandos:

# Install Python dependencies pip3 install -r requirements.txt # Verify installation python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"
AWS DevOps

Configure el GitHub token.

Para configurar el GitHub token y, a continuación, comprobar que funciona, ejecute los siguientes comandos:

# Set GitHub token environment variable export GITHUB_TOKEN="your_github_token_here" # Verify token works curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user
AWS DevOps
TareaDescripciónHabilidades requeridas

Configure el archivo config.yaml.

Para definir los repositorios de destino y los cambios deseados, edite el archivo config.yaml de la siguiente manera:

repositories: - owner: "your-org" repo: "your-terraform-repo" files: - path: "variables.tf" changes: variables: - app_version: default: update: - from: ["1.0.0"] to: "1.1.0" settings: pr_title_template: "Infrastructure Update - {{timestamp}}" slack: username: "Terraform Bot" icon_emoji: ":terraform:" notify_on_success: true notify_on_error: true notify_batch_summary: true
AWS DevOps
TareaDescripciónHabilidades requeridas

Realice las pruebas previas al vuelo.

Pruebe siempre la configuración antes de ejecutarla en los repositorios de producción. Utilice los siguientes comandos:

# 1. Test configuration syntax python3 -c "from main import get_config_content; get_config_content()" # 2. Run in dry-run mode first DRY_RUN=true python3 main.py # 3. Test with minimal configuration # Use a simple config.yaml with just one repository and one change
AWS DevOps

Verifique el acceso al repositorio.

Para comprobar que el GitHub token puede acceder al repositorio, ejecute el siguiente comando:

# Test GitHub token access curl -H "Authorization: token $GITHUB_TOKEN" \ https://api.github.com/repos/owner/repo-name # Should return repository information, not 404
AWS DevOps
TareaDescripciónHabilidades requeridas

Ejecute la utilidad de automatización mediante la interfaz de usuario de GitHub Actions.

Para ejecutar la utilidad de automatización mediante la interfaz de usuario de GitHub Actions, haga lo siguiente:

  1. Navegue hasta su repositorio en GitHub.

  2. Seleccione la pestaña Acciones.

  3. Elija el flujo de trabajo de automatización de la actualización de la infraestructura de Terraform.

  4. Seleccione Ejecutar flujo de trabajo.

  5. Configure las siguientes entradas del flujo de trabajo:

    • Configuración del origen:

      • Seleccione la ramificación de destino para la automatización.

      • Especifique la ruta al archivo de configuración (config.yaml) que contiene los cambios deseados.

    • Controles de vista previa:

      • Seleccione la opción Vista previa para revisar los cambios sin aplicarlos.

    • Administración de las ramificaciones:

      • Introduzca la ramificación base para crear nuevas ramificaciones de características.

      • Introduzca la configuración del prefijo de la ramificación.

      • Seleccione la casilla Cerrar automáticamente las solicitudes de extracción obsoletas.

    • Configuración de las notificaciones:

      • Introduzca la URL del webhook de Slack para recibir notificaciones enriquecidas (anula el secreto del repositorio).

      • Seleccione la casilla Probar la integración de Slack antes de procesarla (solo en ejecución de prueba).

      • Introduzca su información para anular el canal de Slack predeterminado (por ejemplo, #infrastructure-test).

    • Configuración avanzada:

      • Seleccione la casilla Habilitar el registro de depuración para la solución de problemas.

AWS DevOps

(Alternativa) Ejecute la utilidad de automatización desde la línea de comandos.

Si lo prefiere, puede ejecutar la utilidad de automatización desde la línea de comandos en lugar de utilizar la interfaz de usuario de GitHub Actions. Utilice el siguiente comando :

# Run actual automation python3 main.py
AWS DevOps
TareaDescripciónHabilidades requeridas

Revise lo creado PRs y los cambios.

Para supervisar los resultados de la ejecución del GitHub flujo de trabajo, haga lo siguiente:

AWS DevOps
TareaDescripciónHabilidades requeridas

(Opcional) Limpiar PRs.

Cerrar abandonada o innecesaria PRs.

AWS DevOps

Recursos relacionados

AWS Guía prescriptiva

GitHub documentación