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 un marco de orquestación de recursos basado en API con GitHub Actions y Terragrunt
Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande y Akash Kumar, Amazon Web Services
Resumen
Este patrón aprovecha los flujos de trabajo de GitHub Actions para automatizar el aprovisionamiento de recursos mediante cargas JSON estandarizadas, lo que elimina la necesidad de realizar una configuración manual. Esta canalización automatizada gestiona todo el ciclo de vida de la implementación y puede integrarse sin problemas con varios sistemas frontend, desde componentes de interfaz de usuario personalizados hasta componentes de interfaz de usuario personalizados. ServiceNow La flexibilidad de la solución permite a los usuarios interactuar con el sistema a través de sus interfaces preferidas y, al mismo tiempo, mantener los procesos estandarizados.
La arquitectura de canalización configurable se puede adaptar para cumplir con diferentes requisitos organizativos. La implementación de ejemplo se centra en el aprovisionamiento de Amazon Virtual Private Cloud (Amazon VPC) y de Amazon Simple Storage Service (Amazon S3). El patrón aborda de manera efectiva los desafíos comunes de administración de los recursos de la nube al estandarizar las solicitudes en toda la organización y proporcionar puntos de integración consistentes. Este enfoque facilita a los equipos la solicitud y la administración de los recursos y, al mismo tiempo, garantiza la estandarización.
Requisitos previos y limitaciones
Requisitos previos
Un activo Cuenta de AWS
Una GitHub cuenta activa con acceso al repositorio configurado
Limitaciones
Los nuevos recursos requieren la adición manual de archivos
terragrunt.hcla la configuración del repositorio.Algunas Servicios de AWS no están disponibles en todos Regiones de AWS. Para obtener información sobre la disponibilidad en regiones, consulte AWS Services by Region
. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.
Arquitectura
En el siguiente diagrama se muestran los componentes y el flujo de trabajo de este patrón.

En el siguiente diagrama de arquitectura se muestran las siguientes acciones:
El usuario envía una carga útil de JSON a GitHub Actions, lo que desencadena el proceso de automatización.
La canalización de GitHub Actions recupera el código de recursos necesario de los repositorios de Terragrunt y Terraform, en función de las especificaciones de la carga útil.
La canalización asume la función AWS Identity and Access Management (IAM) adecuada con el ID especificado. Cuenta de AWS A continuación, la canalización despliega los recursos en el destino Cuenta de AWS y administra el estado de Terraform mediante el bucket de Amazon S3 específico de la cuenta y la tabla de Amazon DynamoDB.
Cada uno Cuenta de AWS contiene funciones de IAM para un acceso seguro, un depósito de Amazon S3 para el almacenamiento de estados de Terraform y una tabla de DynamoDB para el bloqueo de estados. Este diseño permite la implementación controlada y automatizada de los recursos en todas las Cuentas de AWS. El proceso de implementación mantiene una administración del estado y un control de acceso adecuados a través de buckets de Amazon S3 dedicados y roles de IAM en cada cuenta.
Tools (Herramientas)
Servicios de AWS
Amazon DynamoDB es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
AWS Identity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
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.
Amazon Virtual Private Cloud (Amazon VPC) le ayuda a lanzar AWS recursos en una red virtual que haya definido. Esa red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS.
Otras herramientas
GitHub Actions
es una plataforma de integración y entrega continuas (CI/CD) que está estrechamente integrada con los repositorios. GitHub Puedes usar GitHub Actions para automatizar tu proceso de creación, prueba e implementación. Terraform
es una herramienta de infraestructura como código (IaC) HashiCorp que te ayuda a crear y administrar recursos locales y en la nube. Terragrunt
es una herramienta de orquestación que amplía las capacidades de Terraform y las de Terraform. OpenTofu Administra la forma en que se aplican los patrones de infraestructura genéricos, lo que facilita la escalación y el mantenimiento de grandes conjuntos de infraestructuras.
Repositorio de código
Prácticas recomendadas
Almacene AWS las credenciales y los datos confidenciales utilizando los secretos GitHub del repositorio para un acceso seguro.
Configure el proveedor OpenID Connect (OIDC) para que GitHub Actions asuma la función de IAM y evite las credenciales estáticas.
Cumpla con el principio de privilegio mínimo y conceda los permisos mínimos necesarios para llevar a cabo una tarea. Para obtener más información, consulte Otorgar privilegio mínimo y Prácticas recomendadas de seguridad en la documentación de IAM.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Inicialice el repositorio. GitHub | Para inicializar el GitHub repositorio, siga estos pasos:
| DevOps ingeniero |
Configure los permisos y roles de IAM | Para configurar los permisos y roles de IAM, siga estos pasos:
| DevOps ingeniero |
Configura GitHub secretos y variables. | Para obtener instrucciones sobre cómo configurar los secretos y las variables del repositorio en el GitHub repositorio, consulte Crear variables de configuración para un repositorio
| DevOps ingeniero |
Cree la estructura del repositorio. | Para crear la estructura del repositorio, siga estos pasos:
| DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Ejecute la canalización con curl. | Para ejecutar la canalización mediante curl
Para obtener más información sobre el proceso de ejecución de la canalización, consulte Información adicional. | DevOps ingeniero |
Validación de los resultados de la ejecución de la canalización | Para validar los resultados, siga estos pasos:
También puede realizar una verificación cruzada de los recursos creados mediante el archivo | DevOps ingeniero |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Envíe una solicitud de limpieza. | Para eliminar recursos que ya no son necesarios, siga estos pasos:
| DevOps ingeniero |
Recursos relacionados
AWS Blogs
Servicio de AWS documentación
GitHub resources
Información adicional
Proceso de ejecución en canalización
Los siguientes son los pasos de la ejecución de la canalización:
Valida el formato de carga útil JSON: garantiza que la configuración JSON entrante esté estructurada correctamente y contenga todos los parámetros necesarios
Asume la función de IAM especificada: autentica y asume la función de IAM requerida para las operaciones AWS
Descarga el código de Terraform y Terragrunt necesario: recupera la versión especificada del código de recursos y las dependencias
Ejecuta el despliegue de recursos: aplica la configuración para implementar o actualizar los AWS recursos en el entorno de destino
Ejemplo de carga útil utilizada para la creación de VPC
A continuación, se muestra un ejemplo de código para la creación de un bucket de estado del backend de Terraform:
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
A continuación se muestra un ejemplo de carga útil para crear una VPC con Amazon VPC, donde vpc_cidr define las especificaciones del bloque de CIDR para la VPC. El bucket de estado de Terraform se asigna a una variable definida en los archivos terraform. El parámetro ref contiene el nombre de la ramificación del código que se va a ejecutar.
{ "ref": "main", "inputs": { "RequestParameters": { "RequestId": "1111111", "RequestType": "create", "ResourceType": "vpc", "AccountId": "1234567890", "AccountAlias": "account-alias", "RegionId": "us-west-2", "ApplicationName": "myapp", "DivisionName": "division-name", "EnvironmentId": "dev", "Suffix": "poc" }, "ResourceParameters": [ { "VPC": { "vpc_cidr": "10.0.0.0/16" } } ] } }
Los RequestParameters se utilizan para rastrear el estado de la solicitud en la sección de canalización y tfstate se crea en función de esta información. Los parámetros siguientes contienen información de control y metadatos:
RequestId: identificador único para la solicitudRequestType: tipo de operación (crear, actualizar o eliminar)ResourceType: tipo de recurso que se va a aprovisionarAccountId— Objetivo de Cuenta de AWS despliegueAccountAlias— Nombre descriptivo para el Cuenta de AWSRegionId— Región de AWS para el despliegue de recursosApplicationName: nombre de la aplicación.DivisionName: división de la organizaciónEnvironmentId: entorno (por ejemplo, desarrollo y producción)Suffix: identificador adicional para los recursos
Los ResourceParameters contienen una configuración específica del recurso que se asigna a las variables definidas en los archivos de Terraform. Se debe incluir en ResourceParameters cualquier variable personalizada que deba pasarse a los módulos de Terraform. El parámetro vpc_cidr es obligatorio para Amazon VPC.