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 des pull requests automatisées pour l'infrastructure gérée par Terraform à l'aide AWS d'Actions GitHub
Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay et Prafful Gupta, Amazon Web Services
Résumé
Ce modèle présente un utilitaire d'automatisation conçu pour éliminer le travail manuel et répétitif lié à la gestion des modifications dans plusieurs référentiels Terraform. De nombreuses entreprises utilisent les référentiels Terraform pour gérer leur infrastructure en tant que code (IaC), souvent avec des centaines de référentiels distincts représentant différents environnements, services ou équipes. La gestion de ces référentiels à grande échelle représente un défi opérationnel majeur. Les tâches de routine telles que la mise à jour d'un paramètre, la mise à niveau des versions de modules ou l'application de modifications de configuration nécessitent souvent de créer et de gérer des pull requests (PRs) dans de nombreux référentiels plusieurs fois par jour.
Même pour de simples modifications, ce processus manuel et répétitif prend du temps et est source d'erreurs. Les ingénieurs doivent systématiquement appliquer les mêmes modifications à tous les référentiels ciblés et créer des titres et des descriptions de relations publiques significatifs. En outre, ils doivent souvent interagir avec des outils externes tels que Jira pour récupérer ou inclure des références de suivi des problèmes. Ces tâches, bien que nécessaires, consistent à soulever des objets lourds de manière indifférenciée, consomment un temps précieux en ingénierie et réduisent l'efficacité globale. Le manque d'automatisation de ce flux de travail crée des frictions, ralentit la livraison et augmente la charge cognitive des équipes chargées de la maintenance des infrastructures Terraform à grande échelle.
Présentation de la solution
Pour relever ce défi, ce modèle propose un utilitaire entièrement piloté par la configuration, permettant aux utilisateurs de définir les modifications souhaitées dans un fichier de configuration structuré. Ce fichier spécifie les référentiels, les modules, les paramètres et les valeurs cibles à l'aide d'un schéma clairement défini.
Une fois configuré, l'utilitaire exécute les étapes automatisées suivantes :
Lit la configuration définie par l'utilisateur pour déterminer l'étendue et la nature des modifications
Crée une nouvelle branche dans chaque référentiel cible avec les mises à jour requises appliquées
Génère un PR pour chaque modification, garantissant ainsi la cohérence entre tous les référentiels
Envoie des notifications Slack (facultatif) pour avertir les parties prenantes à l'aide de liens directs vers le PRs
En automatisant ces tâches répétitives, l'utilitaire réduit considérablement le temps, les efforts et les risques associés à la gestion des mises à jour d'infrastructure à grande échelle. Il permet aux équipes de se concentrer sur des travaux d'ingénierie à plus forte valeur ajoutée tout en garantissant que les modifications sont appliquées de manière cohérente et peuvent être suivies dans tous les référentiels.
Conditions préalables et limitations
Conditions préalables
Un actif Compte AWS.
Python version 3.8 ou ultérieure.
Un jeton d'accès GitHub personnel (PAT). Pour plus d'informations, consultez la section Création d'un jeton d'accès personnel (classique)
dans la GitHub documentation. Le GitHub PAT peut accéder à vos référentiels cibles afin que l'utilitaire puisse effectuer des opérations telles que la création de branches et les pull requests. Pour plus d'informations, consultez le référentiel de GitHub code
de ce modèle.
Limites
La complexité de la configuration constitue le principal défi. L'efficacité de l'automatisation est limitée par les capacités de son fichier de configuration. Bien que le système gère efficacement les modifications standard, les modifications complexes de l'infrastructure peuvent nécessiter une intervention manuelle et certains cas extrêmes restent hors du champ d'application de la gestion automatisée.
La sécurité et l'accès présentent des considérations importantes, notamment en ce qui concerne la gestion des jetons GitHub d'accès et des limites de débit des API. Organisations doivent trouver un juste équilibre entre le besoin d'automatisation et le stockage et la gestion sécurisés des informations d'identification, en garantissant des contrôles d'accès appropriés tout en préservant l'efficacité opérationnelle.
Les contraintes de validation constituent une autre limite notable, car le système automatisé a une capacité limitée à valider la logique métier et les exigences spécifiques à l'environnement. Les dépendances complexes et les interactions entre services nécessitent souvent une supervision humaine, car la validation automatique ne permet pas de saisir pleinement toutes les nuances contextuelles et les règles métier.
Des problèmes d'échelle et de performance apparaissent lors de modifications d'infrastructure à grande échelle. Le système doit fonctionner dans les limites de GitHub l'API tout en gérant simultanément de nombreux référentiels. Les opérations gourmandes en ressources sur une infrastructure étendue peuvent créer des goulots d'étranglement en matière de performances nécessitant une gestion minutieuse.
Les limites d'intégration limitent la flexibilité du système, car il est principalement conçu pour fonctionner avec des outils spécifiques tels que GitHub Slack. Organisations qui utilisent différents outils peuvent avoir besoin de solutions personnalisées et les options de personnalisation du flux de travail de ce modèle sont limitées aux points d'intégration pris en charge.
Architecture
Le schéma suivant montre le flux de travail et les composants de cette solution.

Le flux de travail se compose des étapes suivantes :
Le développeur déclenche GitHub des actions en spécifiant le référentiel Terraform.
L'utilitaire d'automatisation lit les configurations définies.
L'utilitaire d'automatisation extrait également le référentiel Terraform fourni.
L'utilitaire d'automatisation crée une nouvelle branche et met à jour les modèles Terraform localement.
L'utilitaire d'automatisation envoie la nouvelle branche vers le référentiel et crée un nouveau PR.
L'utilitaire d'automatisation utilise les notifications Slack qui incluent des liens de relations publiques pour informer les développeurs et active le déploiement des modèles Terraform. AWS Cloud
Outils
GitHub
est une plateforme de développement que les développeurs peuvent utiliser pour créer, stocker, gérer et partager leur code. 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. HashiCorp Terraform
est un outil d'infrastructure en tant que code (IaC) qui vous aide à créer et à gérer des ressources sur site et dans le cloud. Slack
, une offre de Salesforce, est une plateforme conversationnelle basée sur l'IA qui permet la collaboration par chat et vidéo, automatise les processus sans code et prend en charge le partage d'informations.
Référentiel de code
Le code de ce modèle est disponible dans le flux de travail GitHub automatisé de mise à jour de l'infrastructure Terraform à l'aide du référentiel GitHub Actions
Bonnes pratiques
Une gestion du changement efficace est essentielle à la réussite de la mise en œuvre. Organisations devraient adopter une stratégie de déploiement progressif pour les changements à grande échelle. Maintenez des conventions de dénomination des branches et des descriptions de relations publiques cohérentes et garantissez une documentation complète de toutes les modifications.
Les contrôles de sécurité doivent être rigoureusement mis en œuvre, en se concentrant sur les principes du moindre privilège d'accès et sur une gestion sécurisée des informations d'identification. Activez les règles de protection des succursales pour empêcher les modifications non autorisées. Effectuez des audits de sécurité réguliers pour préserver l'intégrité du système.
Un protocole de test robuste doit inclure
terraform planl'exécution automatisée dans les pipelines d'intégration continue et de déploiement continu (CI/CD). Le protocole doit également inclure des contrôles de validation avant la validation et des environnements de révision dédiés aux modifications critiques. Cette approche de test à plusieurs niveaux permet de détecter les problèmes à un stade précoce et de garantir la stabilité de l'infrastructure.La stratégie de surveillance doit inclure des mécanismes d'alerte complets, un suivi détaillé des success/failure métriques et des mécanismes de relance automatisés en cas d'échec des opérations. Cette stratégie contribue à garantir la visibilité opérationnelle et permet de répondre rapidement à tous les problèmes qui se présentent.
Les normes de configuration doivent mettre l'accent sur le contrôle des versions pour toutes les configurations, en maintenant la modularité pour la réutilisabilité et l'évolutivité. Une documentation claire du schéma et des exemples aide les équipes à comprendre et à utiliser efficacement le système d'automatisation.
Épopées
| Sous-tâche | Description | Compétences requises |
|---|---|---|
Configurez le référentiel. | Pour configurer le référentiel, exécutez les commandes suivantes :
| AWS DevOps |
Installez les dépendances. | Pour installer et vérifier les dépendances Python, exécutez les commandes suivantes :
| AWS DevOps |
Configurez le GitHub jeton. | Pour configurer le GitHub jeton puis vérifier qu'il fonctionne, exécutez les commandes suivantes :
| AWS DevOps |
| Sous-tâche | Description | Compétences requises |
|---|---|---|
Configurez le | Pour définir vos référentiels cibles et les modifications souhaitées, modifiez le fichier
| AWS DevOps |
| Sous-tâche | Description | Compétences requises |
|---|---|---|
Effectuez des tests avant le vol. | Testez toujours votre configuration avant de l'exécuter sur des référentiels de production. Utilisez les commandes suivantes :
| AWS DevOps |
Vérifiez l'accès au référentiel. | Pour vérifier que le GitHub jeton peut accéder au référentiel, exécutez la commande suivante :
| AWS DevOps |
| Sous-tâche | Description | Compétences requises |
|---|---|---|
Exécutez l'utilitaire d'automatisation à l'aide de l'interface utilisateur GitHub Actions. | Pour exécuter l'utilitaire d'automatisation à l'aide de l'interface utilisateur GitHub Actions, procédez comme suit :
| AWS DevOps |
(Alternative) Exécutez l'utilitaire d'automatisation depuis la ligne de commande. | Si vous préférez, vous pouvez exécuter l'utilitaire d'automatisation à partir de la ligne de commande au lieu d'utiliser l'interface utilisateur GitHub Actions. Utilisez la commande suivante :
| AWS DevOps |
| Sous-tâche | Description | Compétences requises |
|---|---|---|
Passez en revue les créations PRs et les modifications. | Pour contrôler les résultats de l'exécution du GitHub flux de travail, procédez comme suit :
| AWS DevOps |
| Sous-tâche | Description | Compétences requises |
|---|---|---|
(Facultatif) Nettoyez PRs. | Fermer, abandonné ou inutile PRs. | AWS DevOps |
Ressources connexes
AWS Directives prescriptives
GitHub documentation