

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Créez un cadre d'orchestration des ressources piloté par API à l'aide GitHub d'Actions et de Terragrunt
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

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

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

Ce modèle utilise les flux de travail GitHub Actions pour automatiser le provisionnement des ressources par le biais de charges utiles JSON standardisées, éliminant ainsi le besoin de configuration manuelle. Ce pipeline automatisé gère le cycle de vie complet du déploiement et peut s'intégrer parfaitement à divers systèmes frontaux, qu'il s'agisse de composants d'interface utilisateur personnalisés ou de ServiceNow. La flexibilité de la solution permet aux utilisateurs d'interagir avec le système via leurs interfaces préférées tout en maintenant des processus standardisés.

L'architecture de pipeline configurable peut être adaptée pour répondre aux différentes exigences organisationnelles. L'exemple d'implémentation se concentre sur le provisionnement d'Amazon Virtual Private Cloud (Amazon VPC) et d'Amazon Simple Storage Service (Amazon S3). Le modèle répond efficacement aux défis courants de gestion des ressources cloud en normalisant les demandes au sein de l'organisation et en fournissant des points d'intégration cohérents. Cette approche permet aux équipes de demander et de gérer plus facilement les ressources tout en garantissant la standardisation.

## Conditions préalables et limitations
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ Un GitHub compte actif avec accès au référentiel configuré

**Limites**
+ Les nouvelles ressources nécessitent l'ajout manuel de `terragrunt.hcl` fichiers à la configuration du référentiel.
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, consultez la section [AWS Services par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez [Points de terminaison de service et quotas](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien correspondant au service.

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

Le schéma suivant montre les composants et le flux de travail de ce modèle.

![Flux de travail pour automatiser le provisionnement des ressources avec GitHub Actions et Terraform.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Le schéma d'architecture montre les actions suivantes :

1. L'utilisateur soumet une charge utile JSON à GitHub Actions, déclenchant le pipeline d'automatisation.

1. Le pipeline GitHub Actions récupère le code des ressources requis dans les référentiels Terragrunt et Terraform, en fonction des spécifications de charge utile.

1. Le pipeline assume le rôle approprié Gestion des identités et des accès AWS (IAM) en utilisant l' Compte AWS ID spécifié. Ensuite, le pipeline déploie les ressources vers la cible Compte AWS et gère l'état de Terraform à l'aide du bucket Amazon S3 et de la table Amazon DynamoDB spécifiques au compte.

Chacun Compte AWS contient des rôles IAM pour un accès sécurisé, un compartiment Amazon S3 pour le stockage d'état Terraform et une table DynamoDB pour le verrouillage d'état. Cette conception permet un déploiement contrôlé et automatisé des ressources sur l'ensemble du territoire Comptes AWS. Le processus de déploiement assure une gestion de l'état et un contrôle d'accès appropriés grâce à des compartiments Amazon S3 dédiés et à des rôles IAM dans chaque compte.

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

**Services AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) vous aide à lancer AWS des ressources dans un réseau virtuel que vous avez défini. Ce réseau virtuel ressemble à un réseau traditionnel que vous pourriez exécuter dans votre propre centre de données et présente l'avantage d'utiliser l'infrastructure évolutive d' AWS.

**Autres outils**
+ [GitHub Actions](https://docs.github.com/en/actions) est une plateforme d'intégration et de livraison continues (CI/CD) étroitement intégrée aux GitHub référentiels. Vous pouvez utiliser GitHub les actions pour automatiser votre pipeline de création, de test et de déploiement.
+ [Terraform](https://www.terraform.io/) est un outil d'infrastructure en tant que code (IaC) HashiCorp qui vous aide à créer et à gérer des ressources sur site et dans le cloud.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) est un outil d'orchestration qui étend à la fois OpenTofu les fonctionnalités de Terraform et celles de Terraform. Il gère la manière dont les modèles d'infrastructure génériques sont appliqués, ce qui facilite la mise à l'échelle et la maintenance de grands parcs d'infrastructures.

**Référentiel de code**

Le code de ce modèle est disponible dans le référentiel GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform).

## Bonnes pratiques
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Stockez AWS les informations d'identification et les données sensibles à l'aide des secrets GitHub du référentiel pour un accès sécurisé.
+ Configurez le fournisseur OpenID Connect (OIDC) pour qu' GitHub Actions assume le rôle IAM, en évitant les informations d'identification statiques.
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

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

### Création et configuration du référentiel
<a name="create-and-configure-repository"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Initialisez le GitHub référentiel. | Pour initialiser le GitHub référentiel, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 
| Configurez les rôles et les autorisations IAM. | Pour configurer les rôles et les autorisations IAM, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 
| Configurez GitHub des secrets et des variables. | Pour obtenir des instructions sur la façon de configurer les secrets et les variables du référentiel dans le GitHub référentiel, consultez la section [Création de variables de configuration pour un référentiel](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository) dans la GitHub documentation. Configurez les variables suivantes :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 
| Créez la structure du référentiel. | Pour créer la structure du référentiel, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 

### Déclencher le pipeline et valider les résultats
<a name="trigger-the-pipeline-and-validate-results"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Exécutez le pipeline à l'aide de curl.  | Pour exécuter le pipeline à l'aide de [curl](https://curl.se/), procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Pour plus d'informations sur le processus d'exécution du pipeline, voir [Informations supplémentaires](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps ingénieur | 
| Valider les résultats de l'exécution du pipeline | Pour valider les résultats, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Vous pouvez également vérifier les ressources créées en utilisant le `output.json` fichier créé dans le référentiel qui se trouve dans la même ressource que le `terragrunt.hcl` fichier. | DevOps ingénieur | 

### nettoyer des ressources ;
<a name="clean-up-resources"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Soumettez une demande de nettoyage. | Pour supprimer les ressources dont vous n'avez plus besoin, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps ingénieur | 

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

**AWS Blogs**
+ [Utilisez les rôles IAM pour connecter des GitHub actions à des actions dans AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**Service AWS documentation**
+ [Création de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Surveillance des fichiers CloudTrail journaux avec Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Bonnes pratiques de sécurité pour Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub resources**
+ [Création d'un événement d'expédition du référentiel](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Création de webhooks](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Mettre en œuvre des contrôles d'accès stricts sur le GitHub référentiel](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Auditez régulièrement l'accès au référentiel](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Contrôles de sécurité en CI/CD cours](https://github.com/marketplace/actions/checkov-github-action)
+ [Utiliser l'authentification multifactorielle pour les comptes GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Informations supplémentaires
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Processus d'exécution du pipeline**

Voici les étapes de l'exécution du pipeline :

1. **Valide le format de charge utile JSON** : garantit que la configuration JSON entrante est correctement structurée et contient tous les paramètres requis

1. **Assume le rôle IAM spécifié** : authentifie et assume le rôle IAM requis pour les opérations AWS 

1. **Télécharge le code Terraform et Terragrunt requis - Récupère la version spécifiée du code** de ressource et des dépendances

1. **Exécute le déploiement des ressources** : applique la configuration pour déployer ou mettre à jour AWS les ressources dans l'environnement cible

**Exemple de charge utile utilisée pour la création d'un VPC**

Voici un exemple de code pour la création de compartiments d'état du backend Terraform :

```
state_bucket_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate"
```

```
lock_table_name = "${local.payload.ApplicationName}-${local.payload.EnvironmentId}-tfstate-lock"
```

Vous trouverez ci-dessous un exemple de charge utile pour créer un VPC avec Amazon VPC, dans `vpc_cidr` lequel sont définies les spécifications du [bloc CIDR pour le](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) VPC. Le bucket d'état Terraform est mappé à une variable définie dans les fichiers. `terraform` Le `ref` paramètre contient le nom de branche du code à exécuter.

```
{
    "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`sont utilisés pour suivre l'état de la demande dans la section du pipeline et `tfstate` sont créés sur la base de ces informations. Les paramètres suivants contiennent des métadonnées et des informations de contrôle :
+ `RequestId`— Identifiant unique pour la demande
+ `RequestType`— Type d'opération (création, mise à jour ou suppression)
+ `ResourceType`— Type de ressource à approvisionner
+ `AccountId`— Cible Compte AWS pour le déploiement
+ `AccountAlias`— Nom convivial pour le Compte AWS
+ `RegionId`— Région AWS pour le déploiement des ressources
+ `ApplicationName`— Nom de l'application
+ `DivisionName`— Division de l'organisation
+ `EnvironmentId`— Environnement (par exemple, dev et prod)
+ `Suffix`— Identifiant supplémentaire pour les ressources

`ResourceParameters`contiennent une configuration spécifique aux ressources qui correspond aux variables définies dans les fichiers Terraform. Toutes les variables personnalisées devant être transmises aux modules Terraform doivent être incluses. `ResourceParameters` Le paramètre `vpc_cidr` est obligatoire pour Amazon VPC.