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:
Lee la configuración definida por el usuario para determinar el alcance y la naturaleza de los cambios.
Crea una nueva ramificación en cada repositorio de destino a la que se aplican las actualizaciones necesarias.
Genera una PR para cada cambio, lo que garantiza la coherencia en todos los repositorios.
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.

El flujo de trabajo consta de los pasos siguientes:
El desarrollador activa GitHub las acciones especificando el repositorio de Terraform.
La utilidad de automatización lee las configuraciones definidas.
La utilidad de automatización también extrae el repositorio de Terraform proporcionado.
La utilidad de automatización crea una nueva ramificación y actualiza las plantillas de Terraform de forma local.
La utilidad de automatización envía la nueva ramificación al repositorio y crea una nueva PR.
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)
GitHub
es 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
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 planautomatizada 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
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Configure el repositorio. | Para clonar el repositorio, ejecute los siguientes comandos:
| AWS DevOps |
Instale las dependencias. | Para instalar y verificar las dependencias de Python, ejecute los siguientes comandos:
| AWS DevOps |
Configure el GitHub token. | Para configurar el GitHub token y, a continuación, comprobar que funciona, ejecute los siguientes comandos:
| AWS DevOps |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Configure el archivo | Para definir los repositorios de destino y los cambios deseados, edite el archivo
| AWS DevOps |
| Tarea | Descripción | Habilidades 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:
| AWS DevOps |
Verifique el acceso al repositorio. | Para comprobar que el GitHub token puede acceder al repositorio, ejecute el siguiente comando:
| AWS DevOps |
| Tarea | Descripción | Habilidades 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:
| 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 :
| AWS DevOps |
| Tarea | Descripción | Habilidades 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 |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
(Opcional) Limpiar PRs. | Cerrar abandonada o innecesaria PRs. | AWS DevOps |
Recursos relacionados
AWS Guía prescriptiva
GitHub documentación