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, de 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. El ejemplo de implementación se centra en el aprovisionamiento de Amazon Virtual Private Cloud (Amazon VPC) y 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
terragrunt.hcl
archivos a la configuración del repositorio.Algunos Servicios de AWS no están disponibles en todos Regiones de AWS. Para ver la disponibilidad regional, consulta AWS Servicios por región
. Para conocer puntos de enlace específicos, consulte Puntos de enlace y cuotas del servicio y elija el enlace para el servicio.
Arquitectura
El siguiente diagrama muestra los componentes y el flujo de trabajo de este patrón.

El diagrama de arquitectura muestra las siguientes acciones:
El usuario envía una carga útil JSON a GitHub Actions, lo que activa 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 el despliegue controlado y automatizado de los recursos en todas partes. 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 funciones de IAM en cada cuenta.
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 le 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 ampliación y el mantenimiento de grandes conjuntos de infraestructuras.
Repositorio de código
El código de este patrón está disponible en el repositorio GitHub sample-aws-orchestration-pipeline-terraform
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.
Siga el principio de privilegios mínimos y conceda los permisos mínimos necesarios para realizar 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 GitHub repositorio. | Para inicializar el GitHub repositorio, siga estos pasos:
| DevOps ingeniero |
Configure las funciones y los permisos de IAM. | Para configurar las funciones y los permisos 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 de repositorios, 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 |
Valide los resultados de la ejecución de la canalización | Para validar los resultados, siga los siguientes pasos:
También puede realizar una verificación cruzada de los recursos creados mediante el | DevOps ingeniero |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Presente una solicitud de limpieza. | Para eliminar los recursos que ya no son necesarios, siga los siguientes 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 recursos en el entorno de destino AWS
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, vpc_cidr
donde se definen las especificaciones del bloque CIDR para la VPC. El depósito de estado de Terraform se asigna a una variable definida en los archivos. terraform
El ref
parámetro contiene el nombre de la rama 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" } } ] } }
RequestParameters
se utilizan para rastrear el estado de la solicitud en la sección de canalización y tfstate
se crean en función de esta información. Los siguientes parámetros contienen metadatos e información de control:
RequestId
— Identificador único de 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ónDivisionName
— División de organizaciónEnvironmentId
— Medio ambiente (por ejemplo, dev y prod)Suffix
— Identificador adicional para los recursos
ResourceParameters
contienen una configuración específica del recurso que se asigna a las variables definidas en los archivos de Terraform. Se debe incluir cualquier variable personalizada que deba pasarse a los módulos de Terraform. ResourceParameters
El parámetro vpc_cidr
es obligatorio para Amazon VPC.