Créez un cadre d'orchestration des ressources piloté par API à l'aide GitHub d'Actions et de Terragrunt - Recommandations AWS

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

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

Récapitulatif

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

Prérequis

  • 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. Pour des points de terminaison spécifiques, consultez Points de terminaison de service et quotas, puis choisissez le lien correspondant au service.

Architecture

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.

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.

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

  3. Le pipeline assume le rôle approprié AWS Identity and Access Management (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

Services AWS

  • Amazon DynamoDB est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.

  • AWS Identity and Access Management (IAM) 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) 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) 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 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 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 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.

Bonnes pratiques

  • 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 et Bonnes pratiques en matière de sécurité dans la documentation IAM.

Épopées

TâcheDescriptionCompétences requises

Initialisez le GitHub référentiel.

Pour initialiser le GitHub référentiel, procédez comme suit :

  1. Créez un nouveau GitHub référentiel pour héberger le code du pipeline.

  2. Importez les workflow-trigger.yml fichiers deployment.yml et situés dans le dossier .github/workflows du référentiel source.

DevOps ingénieur

Configurez les rôles et les autorisations IAM.

Pour configurer les rôles et les autorisations IAM, procédez comme suit :

  1. Créez un rôle IAM avec les relations de confiance nécessaires pour que les GitHub actions se connectent aux actions en AWS utilisant un fournisseur d'identité (IdP) OpenID Connect (OIDC).

  2. Attachez les autorisations requises au rôle IAM pour créer le backend et les ressources souhaitées. Pour plus d'informations, consultez un exemple de politique pour créer un VPC avec Amazon VPC, ainsi que le bucket Amazon S3 principal et la table DynamoDB.

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 dans la GitHub documentation. Configurez les variables suivantes :

  • Secrets du référentiel

  • Variables du référentiel

DevOps ingénieur

Créez la structure du référentiel.

Pour créer la structure du référentiel, procédez comme suit :

  1. Créez un nouveau dossier dans la main branche pour stocker le terragrunt.hcl fichier, ainsi que les sorties et les journaux de modifications après la création de la ressource.

  2. Nommez le dossier en minuscules en fonction du type de ressource que vous souhaitez approvisionner via celui-ci. Le dossier est utilisé tel quel ultérieurement dans la charge utile. Pour plus d'informations, consultez un exemple de structure pour Amazon S3 et Amazon VPC dans le référentiel.

DevOps ingénieur
TâcheDescriptionCompétences requises

Exécutez le pipeline à l'aide de curl.

Pour exécuter le pipeline à l'aide de curl, procédez comme suit :

  1. Créez un fichier payload.json dans votre répertoire local. Suivez la structure définie pour le fichier de charge utile et mettez-le en chaîne avant de soumettre la demande. Pour plus d'informations, consultez les exemples de charges utiles dans le référentiel.

  2. Soumettez la demande sur votre terminal à l'aide de l' GitHub API, comme indiqué dans l'exemple suivant :

    curl -X POST \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -d @payload.json \ https://api.github.com/repos/OWNER/REPO/actions/workflows/workflow-trigger.yml/dispatches

    Dans l'exemple, indiquez vos propres valeurs pour les éléments suivants :

    • YOUR_GITHUB_TOKENavec votre jeton d'accès GitHub personnel

    • OWNERavec le nom du propriétaire du dépôt

    • REPOavec le nom du référentiel

Pour plus d'informations sur le processus d'exécution du pipeline, voir Informations supplémentaires.

DevOps ingénieur

Valider les résultats de l'exécution du pipeline

Pour valider les résultats, procédez comme suit :

  1. Surveillez l'exécution du flux de travail GitHub Actions dans l'onglet Actions de votre référentiel.

  2. Une fois les flux de travail exécutés avec succès, vérifiez la création des ressources en procédant AWS Management Console comme suit :

    1. Pour Amazon VPC :

      • Accédez au service Amazon VPC dans le champ spécifié. Région AWS

      • Recherchez un nouveau VPC dont les balises correspondent aux paramètres de votre demande.

      • Vérifiez le bloc CIDR et les autres configurations.

    2. Pour Amazon S3 :

      • Accédez aux compartiments Amazon S3.

      • Dans Compartiments à usage général, recherchez un nouveau compartiment correspondant aux paramètres de votre demande.

      • Vérifiez le nom du compartiment S3 et les autres configurations.

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
TâcheDescriptionCompétences requises

Soumettez une demande de nettoyage.

Pour supprimer les ressources dont vous n'avez plus besoin, procédez comme suit :

  1. Soumettez la demande de suppression en utilisant le même point de terminaison d'API, mais modifiez la charge utile comme suit :

    • RequestTypeRemplacez delete par dans leRequestParameters.

    • Conservez tous les autres paramètres identiques à ceux de la create demande.

  2. Surveillez le processus de suppression dans GitHub Actions.

  3. Une fois le flux de travail terminé, vérifiez que le changelog.json fichier contenu dans le dossier de ressources affiche l'état dedeleted.

  4. Vérifiez la suppression des ressources à l'aide du AWS Management Console.

DevOps ingénieur

Ressources connexes

AWS Blogs

Service AWS documentation

GitHub resources

Informations supplémentaires

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

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

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

  4. 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 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" } } ] } }

RequestParameterssont 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

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