

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
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure"></a>

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

## Zusammenfassung
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-summary"></a>

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

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

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

1. **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
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-prereqs"></a>

**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)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic).
+ 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](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file#repository-access-verification) 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
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-architecture"></a>

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

![\[Workflow zum Erstellen automatisierter Pull-Requests mithilfe von GitHub Aktionen.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/e211359a-03b1-4e69-b152-eb7c09bdb01a/images/6cee0660-5b44-4abe-970c-c0a3c830a9aa.png)


Der Workflow besteht aus folgenden Schritten:

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

1. Das Automatisierungsprogramm liest die definierten Konfigurationen.

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

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

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

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

## Tools
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-tools"></a>
+ [GitHub](https://docs.github.com/)ist eine Entwicklerplattform, mit der Entwickler ihren Code erstellen, speichern, verwalten und teilen können.
+ [GitHub Actions](https://docs.github.com/en/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](https://www.terraform.io/) ist ein IaC-Tool (Infrastructure as Code), mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.
+ [Slack](https://slack.com/help/articles/115004071768-What-is-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](https://github.com/aws-samples/sample-terraform-pr-automation-utility?tab=readme-ov-file) Repository verfügbar.

## Best Practices
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-best-practices"></a>
+ 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
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-epics"></a>

### Installation und Einrichtung
<a name="installation-and-setup"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Richten Sie das Repository ein. | Führen Sie die folgenden Befehle aus, um das Repository einzurichten:<pre># Clone the automation tool repository<br />git clone https://github.com/aws-samples/sample-terraform-pr-automation-utility<br />cd sample-terraform-pr-automation-utility<br /><br /># Copy example configuration<br />cp config.example.yaml config.yaml<br /></pre> | 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:<pre># Install Python dependencies<br />pip3 install -r requirements.txt<br /><br /># Verify installation<br />python3 -c "import github; import hcl2; import yaml; import requests; print('All packages installed successfully')"<br /></pre> | 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:<pre># Set GitHub token environment variable<br />export GITHUB_TOKEN="your_github_token_here"<br /><br /># Verify token works<br />curl -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user<br /></pre> | AWS DevOps | 

### Richten Sie die Konfigurationsdatei für Terraform-Änderungen ein
<a name="set-up-configuration-file-for-terraform-changes"></a>


| Aufgabe | Description | Erforderliche 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:<pre>repositories:<br />  - owner: "your-org"<br />    repo: "your-terraform-repo"<br />    files:<br />      - path: "variables.tf"<br />        changes:<br />          variables:<br />            - app_version:<br />                default:<br />                  update:<br />                    - from: ["1.0.0"]<br />                      to: "1.1.0"<br /><br />settings:<br />  pr_title_template: "Infrastructure Update - {{timestamp}}"<br />  slack:<br />    username: "Terraform Bot"<br />    icon_emoji: ":terraform:"<br />    notify_on_success: true<br />    notify_on_error: true<br />    notify_batch_summary: true<br /></pre> | AWS DevOps | 

### Testen und validieren
<a name="test-and-validate"></a>


| Aufgabe | Description | Erforderliche 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:<pre># 1. Test configuration syntax<br />python3 -c "from main import get_config_content; get_config_content()"<br /><br /># 2. Run in dry-run mode first<br />DRY_RUN=true python3 main.py<br /><br /># 3. Test with minimal configuration<br /># Use a simple config.yaml with just one repository and one change</pre> | 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:<pre># Test GitHub token access<br />curl -H "Authorization: token $GITHUB_TOKEN" \<br />  https://api.github.com/repos/owner/repo-name<br /><br /># Should return repository information, not 404</pre> | AWS DevOps | 

### Führen Sie das Automatisierungsprogramm aus
<a name="run-the-automation-utility"></a>


| Aufgabe | Description | Erforderliche 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | 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:<pre># Run actual automation<br />python3 main.py</pre> | AWS DevOps | 

### Validieren PRs und ändern
<a name="validate-prs-and-changes"></a>


| Aufgabe | Description | Erforderliche 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-automated-pull-requests-for-terraform-managed-aws-infrastructure.html) | AWS DevOps | 

### Bereinigen
<a name="clean-up"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| (Optional) Aufräumen PRs. | Schliessen, verlassen oder unnötig PRs. | AWS DevOps | 

## Zugehörige Ressourcen
<a name="create-automated-pull-requests-for-terraform-managed-aws-infrastructure-resources"></a>

**AWS Präskriptive Leitlinien**
+ [Verwendung von Terraform als IaC-Tool für AWS Cloud](https://docs.aws.amazon.com/prescriptive-guidance/latest/choose-iac-tool/terraform.html)

**GitHub Dokumentation**
+ [Über Pull-Requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
+ [Verwaltung deiner persönlichen Zugriffstoken](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
+ [ GitHub Aktionen verstehen](https://docs.github.com/en/actions/get-started/understand-github-actions)
+ [Schnellstart für Aktionen GitHub ](https://docs.github.com/en/actions/get-started/quickstart)