

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
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

*Tamilselvan P, Abhigyan Dandriyal, Sandeep Gawande y Akash Kumar, Amazon Web Services*

## Resumen
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-summary"></a>

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
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**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.hcl` a 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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para ver los puntos de conexión específicos, consulte [Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) y elija el enlace del servicio.

## Arquitectura
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-architecture"></a>

En el siguiente diagrama se muestran los componentes y el flujo de trabajo de este patrón.

![Flujo de trabajo para automatizar el aprovisionamiento de recursos con GitHub Actions y Terraform.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


En el siguiente diagrama de arquitectura se muestran las siguientes acciones:

1. El usuario envía una carga útil de JSON a GitHub Actions, lo que desencadena el proceso de automatización.

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

1. 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)
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-tools"></a>

**Servicios de AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) 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)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 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](https://docs.github.com/en/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](https://www.terraform.io/) es una herramienta de infraestructura como código (IaC) HashiCorp que te ayuda a crear y administrar recursos locales y en la nube.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) 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**

[El código de este patrón está disponible en el repositorio -terraform. GitHub sample-aws-orchestration-pipeline](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform)

## Prácticas recomendadas
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) y [Prácticas recomendadas de seguridad](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) en la documentación de IAM.

## Epics
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-epics"></a>

### Creación y configuración del repositorio
<a name="create-and-configure-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicialice el repositorio. GitHub  | Para inicializar el GitHub repositorio, siga estos pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 
| Configure los permisos y roles de IAM | Para configurar los permisos y roles de IAM, siga estos pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | 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](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository) en la GitHub documentación. Configure las siguientes variables:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 
| Cree la estructura del repositorio. | Para crear la estructura del repositorio, siga estos pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 

### Desencadenamiento de la canalización y validación de los resultados
<a name="trigger-the-pipeline-and-validate-results"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la canalización con curl.  | Para ejecutar la canalización mediante [curl](https://curl.se/), siga estos pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Para obtener más información sobre el proceso de ejecución de la canalización, consulte [Información adicional](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps ingeniero | 
| Validación de los resultados de la ejecución de la canalización | Para validar los resultados, siga estos pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />También puede realizar una verificación cruzada de los recursos creados mediante el archivo `output.json` creado en el repositorio que se encuentra dentro del mismo recurso que el archivo `terragrunt.hcl`. | DevOps ingeniero | 

### Eliminar recursos
<a name="clean-up-resources"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Envíe una solicitud de limpieza. | Para eliminar recursos que ya no son necesarios, siga estos pasos:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingeniero | 

## Recursos relacionados
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blogs**
+ [Utilice las funciones de IAM para conectar GitHub las acciones con las acciones de AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Servicio de AWS documentación**
+ [creación de roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Supervisión de archivos de CloudTrail registro con Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Prácticas recomendadas de seguridad para Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub resources**
+ [Creación de un evento de envío de repositorios](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Creación de webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Implemente controles de acceso sólidos en el repositorio GitHub ](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Auditoría periódica del acceso al repositorio](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Controles de seguridad en CI/CD proceso](https://github.com/marketplace/actions/checkov-github-action)
+ [Utilice la autenticación multifactorial para las cuentas GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Información adicional
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Proceso de ejecución en canalización**

Los siguientes son los pasos de la ejecución de la canalización:

1. **Valida el formato de carga útil JSON**: garantiza que la configuración JSON entrante esté estructurada correctamente y contenga todos los parámetros necesarios

1. **Asume la función de IAM especificada**: autentica y asume la función de IAM requerida para las operaciones AWS 

1. **Descarga el código de Terraform y Terragrunt necesario**: recupera la versión especificada del código de recursos y las dependencias

1. **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](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) 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 solicitud
+ `RequestType`: tipo de operación (crear, actualizar o eliminar)
+ `ResourceType`: tipo de recurso que se va a aprovisionar
+ `AccountId`— Objetivo de Cuenta de AWS despliegue
+ `AccountAlias`— Nombre descriptivo para el Cuenta de AWS
+ `RegionId`— Región de AWS para el despliegue de recursos
+ `ApplicationName`: nombre de la aplicación.
+ `DivisionName`: división de la organización
+ `EnvironmentId`: 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.