Erstellen Sie mithilfe von Aktionen automatisierte Pull-Requests für die von Terraform verwaltete Infrastruktur AWS GitHub - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen Sie mithilfe von Aktionen automatisierte Pull-Requests für die von Terraform verwaltete Infrastruktur AWS GitHub

Matt Padgett, Ashish Bhatt, Ashwin Divakaran, Sandip Gangapadhyay und Prafful Gupta, Amazon Web Services

Zusammenfassung

Dieses Muster stellt ein Automatisierungsprogramm dar, das darauf ausgelegt ist, die manuelle, sich wiederholende Arbeit zu vermeiden, die mit der Verwaltung von Änderungen in mehreren Terraform-Repositorys verbunden ist. Viele Organisationen verwenden Terraform-Repositorys, um ihre Infrastruktur als Code (IaC) zu verwalten, oft mit Hunderten von separaten Repositorys, die unterschiedliche Umgebungen, Dienste oder Teams repräsentieren. Die Verwaltung dieser Repositorien in großem Maßstab stellt eine erhebliche betriebliche Herausforderung dar. Routineaufgaben wie das Aktualisieren eines Parameters, das Aktualisieren von Modulversionen oder das Anwenden von Konfigurationsänderungen erfordern häufig das mehrmalige Erstellen und Verwalten von Pull-Requests (PRs) für viele Repositorys mehrmals täglich.

Selbst bei einfachen Änderungen ist dieser sich wiederholende und manuelle Prozess zeitaufwändig und fehleranfällig. Techniker müssen die gleiche Änderung konsequent auf alle Ziel-Repositorien anwenden und aussagekräftige PR-Titel und -Beschreibungen erstellen. Darüber hinaus müssen sie häufig mit externen Tools wie Jira interagieren, um Referenzen zur Problemverfolgung abzurufen oder einzubeziehen. Diese Aufgaben sind zwar notwendig, stellen jedoch eine undifferenzierte Schwerstarbeit dar, die wertvolle Entwicklungszeit in Anspruch nimmt und die Gesamteffizienz beeinträchtigt. Der Mangel an Automatisierung in diesem Arbeitsablauf führt zu Reibungen, verlangsamt die Bereitstellung und erhöht die kognitive Belastung der Teams, die mit der Wartung umfangreicher Terraform-Infrastrukturen beauftragt sind.

Überblick über die Lösung

Um dieser Herausforderung zu begegnen, bietet dieses Muster ein vollständig konfigurationsorientiertes Hilfsprogramm, mit dem Benutzer ihre gewünschten Änderungen in einer strukturierten Konfigurationsdatei definieren können. Diese Datei spezifiziert die Ziel-Repositorys, Module, Parameter und Werte anhand eines klar definierten Schemas.

Nach der Konfiguration führt das Hilfsprogramm die folgenden automatisierten Schritte aus:

  1. Liest die benutzerdefinierte Konfiguration, um den Umfang und die Art der Änderungen zu bestimmen

  2. Erstellt in jedem Ziel-Repository einen neuen Branch, in dem die erforderlichen Updates angewendet werden

  3. Generiert für jede Änderung eine PR, wodurch die Konsistenz in allen Repositorys gewährleistet wird

  4. Sendet Slack-Benachrichtigungen (optional), um Stakeholder über direkte Links zu den erstellten Inhalten zu informieren PRs

Durch die Automatisierung dieser sich wiederholenden Aufgaben reduziert das Tool den Zeit- und Arbeitsaufwand sowie die Risiken, die mit der Verwaltung umfangreicher Infrastruktur-Updates verbunden sind, erheblich. Es ermöglicht Teams, sich auf höherwertige technische Arbeiten zu konzentrieren und gleichzeitig sicherzustellen, dass Änderungen konsistent angewendet werden und in allen Repositorys nachverfolgt werden können.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktiver. AWS-Konto

  • Python-Version 3.8 oder höher.

  • Ein GitHub persönliches Zugriffstoken (PAT). Weitere Informationen finden Sie in der GitHub Dokumentation unter Erstellen eines persönlichen Zugriffstokens (klassisch).

  • Das GitHub PAT kann auf Ihre Ziel-Repositorys zugreifen, sodass das Utility Operationen wie das Erstellen von Branches und Pull-Requests ausführen kann. Weitere Informationen finden Sie im GitHub Code-Repository dieses Musters.

Einschränkungen

  • Die Komplexität der Konfiguration stellt die größte Herausforderung dar. Die Effektivität der Automatisierung wird durch die Funktionen ihrer Konfigurationsdatei eingeschränkt. Obwohl das System Standardänderungen effizient verarbeitet, können komplexe Infrastrukturänderungen manuelle Eingriffe erfordern, und bestimmte Randfälle gehen nach wie vor über den Rahmen einer automatisierten Bearbeitung hinaus.

  • Sicherheit und Zugriff stellen wichtige Überlegungen dar, insbesondere bei der Verwaltung von GitHub Zugriffstoken und API-Ratenbegrenzungen. Organizations müssen die Notwendigkeit der Automatisierung sorgfältig mit der sicheren Speicherung und Verwaltung von Anmeldeinformationen abwägen, um angemessene Zugriffskontrollen zu gewährleisten und gleichzeitig die betriebliche Effizienz aufrechtzuerhalten.

  • Einschränkungen bei der Validierung stellen eine weitere wichtige Einschränkung dar, da das automatisierte System nur begrenzt in der Lage ist, Geschäftslogik und umgebungsspezifische Anforderungen zu validieren. Komplexe Abhängigkeiten und dienstübergreifende Interaktionen erfordern oft menschliche Aufsicht, da die automatisierte Validierung nicht alle kontextuellen Nuancen und Geschäftsregeln vollständig erfassen kann.

  • Skalierungs- und Leistungsprobleme treten auf, wenn es um umfangreiche Infrastrukturänderungen geht. Das System muss innerhalb der GitHub API-Grenzen arbeiten und gleichzeitig zahlreiche Repositorys verwalten. Ressourcenintensive Operationen in einer umfangreichen Infrastruktur können zu Leistungsengpässen führen, die eine sorgfältige Verwaltung erfordern.

  • Integrationsgrenzen schränken die Flexibilität des Systems ein, da es in erster Linie für die Arbeit mit bestimmten Tools wie Slack konzipiert ist. GitHub Organizations, die unterschiedliche Tools verwenden, benötigen möglicherweise benutzerdefinierte Lösungen, und die Workflow-Anpassungsoptionen dieses Musters sind auf unterstützte Integrationspunkte beschränkt.

Architektur

Das folgende Diagramm zeigt den Arbeitsablauf und die Komponenten für diese Lösung.

Workflow zum Erstellen automatisierter Pull-Requests mithilfe von GitHub Aktionen.

Der Workflow besteht aus folgenden Schritten:

  1. Der Entwickler löst GitHub Aktionen aus, indem er das Terraform-Repository angibt.

  2. Das Automatisierungsprogramm liest die definierten Konfigurationen.

  3. Das Automatisierungsdienstprogramm ruft auch das bereitgestellte Terraform-Repository ab.

  4. Das Automatisierungsdienstprogramm erstellt einen neuen Branch und aktualisiert die Terraform-Vorlagen lokal.

  5. Das Automatisierungsdienstprogramm überträgt den neuen Branch in das Repository und erstellt einen neuen PR.

  6. Das Automatisierungsprogramm verwendet Slack-Benachrichtigungen, die PR-Links enthalten, um Entwickler zu benachrichtigen, und aktiviert Terraform-Vorlagen für die Bereitstellung. AWS Cloud

Tools

  • GitHubist eine Entwicklerplattform, mit der Entwickler ihren Code erstellen, speichern, verwalten und teilen können.

  • GitHub Actions ist eine CI/CD-Plattform (Continuous Integration and Continuous Delivery), die eng in Repositorys integriert GitHub ist. Sie können GitHub Actions verwenden, um Ihre Build-, Test- und Bereitstellungspipeline zu automatisieren.

  • HashiCorp Terraform ist ein IaC-Tool (Infrastructure as Code), mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.

  • Slack, ein Salesforce-Angebot, ist eine KI-gestützte Konversationsplattform, die Chat- und Videozusammenarbeit ermöglicht, Prozesse ohne Code automatisiert und den Informationsaustausch unterstützt.

Code-Repository

Der Code für dieses Muster ist im GitHub Automated Terraform Infrastructure Update Workflow using GitHub Actions Repository verfügbar.

Best Practices

  • Ein effektives Änderungsmanagement ist entscheidend für eine erfolgreiche Implementierung. Organizations sollten eine schrittweise Einführungsstrategie für groß angelegte Änderungen verfolgen. Halten Sie konsistente Konventionen für die Benennung von Filialen und PR-Beschreibungen ein und stellen Sie sicher, dass alle Änderungen umfassend dokumentiert werden.

  • Sicherheitskontrollen müssen rigoros implementiert werden, wobei der Schwerpunkt auf den Prinzipien des Zugriffs mit den geringsten Rechten und der sicheren Verwaltung von Anmeldeinformationen liegt. Aktivieren Sie Regeln zum Schutz von Zweigstellen, um unbefugte Änderungen zu verhindern. Führen Sie regelmäßige Sicherheitsaudits durch, um die Systemintegrität aufrechtzuerhalten.

  • Ein robustes Testprotokoll sollte die automatisierte terraform plan Ausführung in Pipelines für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD) beinhalten. Das Protokoll sollte auch Validierungsprüfungen vor dem Commit und spezielle Überprüfungsumgebungen für kritische Änderungen beinhalten. Dieser mehrschichtige Testansatz hilft, Probleme frühzeitig zu erkennen und gewährleistet die Stabilität der Infrastruktur.

  • Die Überwachungsstrategie muss umfassende Warnmechanismen, eine detaillierte Nachverfolgung von success/failure Kennzahlen und automatische Wiederholungsmechanismen für fehlgeschlagene Operationen umfassen. Diese Strategie trägt dazu bei, die betriebliche Transparenz zu gewährleisten und ermöglicht eine schnelle Reaktion auf auftretende Probleme.

  • Bei den Konfigurationsstandards sollte der Schwerpunkt auf der Versionskontrolle für alle Konfigurationen liegen, wobei die Modularität im Hinblick auf Wiederverwendbarkeit und Skalierbarkeit gewahrt werden sollte. Eine klare Dokumentation des Schemas und der Beispiele hilft den Teams, das Automatisierungssystem zu verstehen und effektiv zu nutzen.

Epen

AufgabeDescriptionErforderliche Fähigkeiten

Richten Sie das Repository ein.

Führen Sie die folgenden Befehle aus, um das Repository einzurichten:

# Clone the automation tool repository git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility cd sample-terraform-pr-automation-utility # Copy example configuration cp config.example.yaml config.yaml
AWS DevOps

Installieren Sie die Abhängigkeiten.

Führen Sie die folgenden Befehle aus, um die Python-Abhängigkeiten zu installieren und zu überprüfen:

# Install Python dependencies pip3 install -r requirements.txt # Verify installation python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"
AWS DevOps

Konfigurieren Sie das GitHub Token.

Führen Sie die folgenden Befehle aus, um das GitHub Token zu konfigurieren und anschließend zu überprüfen, ob es funktioniert:

# Set GitHub token environment variable export GITHUB_TOKEN="your_github_token_here" # Verify token works curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user
AWS DevOps
AufgabeDescriptionErforderliche Fähigkeiten

Richten Sie die config.yaml Datei ein.

Um Ihre Ziel-Repositorys und die gewünschten Änderungen zu definieren, bearbeiten Sie die config.yam L-Datei wie folgt:

repositories: - owner: "your-org" repo: "your-terraform-repo" files: - path: "variables.tf" changes: variables: - app_version: default: update: - from: ["1.0.0"] to: "1.1.0" settings: pr_title_template: "Infrastructure Update - {{timestamp}}" slack: username: "Terraform Bot" icon_emoji: ":terraform:" notify_on_success: true notify_on_error: true notify_batch_summary: true
AWS DevOps
AufgabeDescriptionErforderliche Fähigkeiten

Führen Sie Tests vor dem Flug durch.

Testen Sie Ihre Konfiguration immer, bevor Sie sie auf Produktions-Repositorys ausführen. Verwenden Sie die folgenden Befehle:

# 1. Test configuration syntax python3 -c "from main import get_config_content; get_config_content()" # 2. Run in dry-run mode first DRY_RUN=true python3 main.py # 3. Test with minimal configuration # Use a simple config.yaml with just one repository and one change
AWS DevOps

Überprüfen Sie den Repository-Zugriff.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das GitHub Token auf das Repository zugreifen kann:

# Test GitHub token access curl -H "Authorization: token $GITHUB_TOKEN" \ https://api.github.com/repos/owner/repo-name # Should return repository information, not 404
AWS DevOps
AufgabeDescriptionErforderliche Fähigkeiten

Führen Sie das Automatisierungsdienstprogramm mithilfe der GitHub Aktions-Benutzeroberfläche aus.

Gehen Sie wie folgt vor, um das Automatisierungsdienstprogramm über die GitHub Aktions-Benutzeroberfläche auszuführen:

  1. Navigieren Sie zu Ihrem Repository am GitHub.

  2. Wählen Sie den Tab Aktionen.

  3. Wählen Sie den Workflow Terraform Infrastructure Update Automation.

  4. Wählen Sie Workflow ausführen.

  5. Konfigurieren Sie die folgenden Workflow-Eingaben:

    • Konfiguration der Quelle:

      • Wählen Sie den Zielzweig für die Automatisierung aus.

      • Geben Sie den Pfad zur Konfigurationsdatei (config.yaml) an, die die gewünschten Änderungen enthält.

    • Steuerelemente für die Vorschau:

      • Wählen Sie die Option Vorschau, um die Änderungen zu überprüfen, ohne sie zu übernehmen.

    • Verwaltung der Filiale:

      • Geben Sie den Basiszweig für die Erstellung neuer Feature-Branches ein.

      • Geben Sie die Konfiguration des Zweigpräfixes ein.

      • Aktivieren Sie das Kontrollkästchen Veraltete Pull-Requests automatisch schließen.

    • Benachrichtigungen einrichten:

      • Gib deine URL für die Slack-Webhook-URL für umfangreiche Benachrichtigungen ein (setzt den geheimen Repository-Schlüssel außer Kraft).

      • Markiere das Kontrollkästchen Slack-Integration vor der Verarbeitung testen (nur Testlauf).

      • Gib deine Informationen für einen Override-Standard-Slack-Kanal ein (z. B. #infrastructure -test).

    • Erweiterte Einstellungen:

      • Markieren Sie das Kontrollkästchen Debug-Protokollierung zur Fehlerbehebung aktivieren.

AWS DevOps

(Alternative) Führen Sie das Automatisierungsdienstprogramm von der Befehlszeile aus.

Wenn Sie möchten, können Sie das Automatisierungsdienstprogramm auch von der Befehlszeile aus ausführen, anstatt die Benutzeroberfläche für GitHub Aktionen zu verwenden. Verwenden Sie den folgenden Befehl:

# Run actual automation python3 main.py
AWS DevOps
AufgabeDescriptionErforderliche Fähigkeiten

Überprüfen Sie die erstellten PRs Dateien und Änderungen.

Gehen Sie wie folgt vor, um die Ergebnisse der GitHub Workflow-Ausführung zu überwachen:

  • Überprüfen Sie den Verarbeitungsstatus in den Workflow-Ausführungsprotokollen.

  • Überprüfen Sie den PRs , den das Automatisierungsprogramm erstellt hat.

  • Überwache Slack-Benachrichtigungen (falls konfiguriert).

AWS DevOps
AufgabeDescriptionErforderliche Fähigkeiten

(Optional) Aufräumen PRs.

Schliessen, verlassen oder unnötig PRs.

AWS DevOps

Zugehörige Ressourcen

AWS Präskriptive Leitlinien

GitHub Dokumentation