

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 mit Actions und Terragrunt ein API-gesteuertes Framework GitHub zur Ressourcenorchestrierung
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt"></a>

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

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

Dieses Muster nutzt GitHub Actions-Workflows, um die Ressourcenbereitstellung durch standardisierte JSON-Payloads zu automatisieren, sodass keine manuelle Konfiguration erforderlich ist. Diese automatisierte Pipeline verwaltet den gesamten Bereitstellungszyklus und kann nahtlos in verschiedene Frontend-Systeme integriert werden, von benutzerdefinierten UI-Komponenten bis hin zu. ServiceNow Die Flexibilität der Lösung ermöglicht es Benutzern, über ihre bevorzugten Schnittstellen mit dem System zu interagieren und gleichzeitig standardisierte Prozesse beizubehalten.

Die konfigurierbare Pipeline-Architektur kann an unterschiedliche organisatorische Anforderungen angepasst werden. Die Beispielimplementierung konzentriert sich auf die Bereitstellung von Amazon Virtual Private Cloud (Amazon VPC) und Amazon Simple Storage Service (Amazon S3). Das Muster bewältigt effektiv allgemeine Herausforderungen bei der Verwaltung von Cloud-Ressourcen, indem Anfragen im gesamten Unternehmen standardisiert und konsistente Integrationspunkte bereitgestellt werden. Dieser Ansatz erleichtert es Teams, Ressourcen anzufordern und zu verwalten und gleichzeitig die Standardisierung sicherzustellen.

## Voraussetzungen und Einschränkungen
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ Ein aktives GitHub Konto mit Zugriff auf das konfigurierte Repository

**Einschränkungen**
+ Neue Ressourcen erfordern das manuelle Hinzufügen von `terragrunt.hcl` Dateien zur Repository-Konfiguration.
+ Einige AWS-Services sind nicht in allen verfügbar AWS-Regionen. Informationen zur Verfügbarkeit in den einzelnen Regionen finden Sie unter [AWS Dienste nach Regionen](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Informationen zu bestimmten Endpunkten finden Sie unter [Dienstendpunkte und Kontingente](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html). Wählen Sie dort den Link für den Dienst aus.

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

Das folgende Diagramm zeigt die Komponenten und den Arbeitsablauf dieses Musters.

![Workflow zur Automatisierung der Ressourcenbereitstellung mit GitHub Aktionen und Terraform.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/bff5d70e-e8f1-454a-94bc-60e8cc16e69f/images/d4a768c8-4e11-493c-85ed-f4bf7e76ce60.png)


Das Architekturdiagramm zeigt die folgenden Aktionen:

1. Der Benutzer sendet eine JSON-Payload an GitHub Actions, wodurch die Automatisierungspipeline ausgelöst wird.

1. Die GitHub Actions-Pipeline ruft den erforderlichen Ressourcencode auf der Grundlage der Payload-Spezifikationen aus den Terragrunt- und Terraform-Repositorys ab.

1. Die Pipeline nimmt unter Verwendung der angegebenen ID die entsprechende AWS Identity and Access Management (IAM-) Rolle an. AWS-Konto Anschließend stellt die Pipeline die Ressourcen auf dem Ziel bereit AWS-Konto und verwaltet den Terraform-Status mithilfe des kontospezifischen Amazon S3 S3-Buckets und der Amazon DynamoDB-Tabelle.

Jedes AWS-Konto enthält IAM-Rollen für den sicheren Zugriff, einen Amazon S3 S3-Bucket für die Terraform-Statusspeicherung und eine DynamoDB-Tabelle für das Sperren von Zuständen. Dieses Design ermöglicht eine kontrollierte, automatisierte Bereitstellung von Ressourcen in allen Bereichen. AWS-Konten Der Bereitstellungsprozess gewährleistet eine ordnungsgemäße Statusverwaltung und Zugriffskontrolle durch spezielle Amazon S3 S3-Buckets und IAM-Rollen in jedem Konto.

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

**AWS-Services**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, diese zu verwenden.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) hilft Ihnen dabei, AWS Ressourcen in einem von Ihnen definierten virtuellen Netzwerk bereitzustellen. Dieses virtuelle Netzwerk entspricht einem herkömmlichen Netzwerk, wie Sie es in Ihrem Rechenzentrum betreiben würden, mit den Vorteilen der Verwendung der skalierbaren Infrastruktur von AWS.

**Andere Tools**
+ [GitHub Actions](https://docs.github.com/en/actions) ist eine CI/CD-Plattform (Continuous Integration and Continuous Delivery), die eng in Repositorien integriert GitHub ist. Sie können GitHub Actions verwenden, um Ihre Build-, Test- und Bereitstellungspipeline zu automatisieren.
+ [Terraform](https://www.terraform.io/) ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.
+ [Terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/overview/) ist ein Orchestrierungstool, das sowohl die Funktionen von Terraform als auch die Funktionen von Terraform erweitert. OpenTofu Es verwaltet, wie generische Infrastrukturmuster angewendet werden, und erleichtert so die Skalierung und Wartung großer Infrastrukturanlagen.

**Code-Repository**

Der Code für dieses Muster ist im Repository GitHub [sample-aws-orchestration-pipeline-terraform](https://github.com/aws-samples/sample-aws-orchestration-pipeline-terraform) verfügbar.

## Best Practices
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-best-practices"></a>
+ Speichern Sie AWS Anmeldeinformationen und vertrauliche Daten mithilfe von GitHub Repository-Geheimnissen für einen sicheren Zugriff.
+ Konfigurieren Sie den OpenID Connect (OIDC) -Anbieter für GitHub Aktionen so, dass er die IAM-Rolle übernimmt und statische Anmeldeinformationen vermeiden.
+ Folgen Sie dem Prinzip der geringsten Rechte und gewähren Sie die für die Ausführung einer Aufgabe erforderlichen Mindestberechtigungen. Weitere Informationen finden Sie in der IAM-Dokumentation unter [Gewährung der geringsten Rechte](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) und [bewährte Methoden zur Sicherheit](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html).

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

### Repository erstellen und konfigurieren
<a name="create-and-configure-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Initialisieren Sie das GitHub Repository. | Gehen Sie wie folgt vor, um das GitHub Repository zu initialisieren:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps Ingenieur | 
| Konfigurieren Sie die IAM-Rollen und -Berechtigungen. | Gehen Sie wie folgt vor, um die IAM-Rollen und -Berechtigungen zu konfigurieren:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps Ingenieur | 
| Richten Sie GitHub Geheimnisse und Variablen ein. | Anweisungen zum Einrichten von Repository-Geheimnissen und -Variablen im GitHub Repository finden Sie in der GitHub Dokumentation unter [Konfigurationsvariablen für ein Repository erstellen](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables#creating-configuration-variables-for-a-repository). Konfigurieren Sie die folgenden Variablen:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps Ingenieur | 
| Erstellen Sie die Repository-Struktur. | Gehen Sie wie folgt vor, um die Repository-Struktur zu erstellen:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps Ingenieur | 

### Triggern Sie die Pipeline und validieren Sie die Ergebnisse
<a name="trigger-the-pipeline-and-validate-results"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Führen Sie die Pipeline mit curl aus.  | Gehen Sie wie folgt vor, um die Pipeline mithilfe von [curl](https://curl.se/) auszuführen:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Weitere Informationen zum Pipeline-Ausführungsprozess finden Sie unter [Zusätzliche Informationen](#create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional). | DevOps Ingenieur | 
| Validieren Sie die Ergebnisse der Pipeline-Ausführung | Gehen Sie wie folgt vor, um die Ergebnisse zu validieren:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html)<br />Sie können die erstellten Ressourcen auch verifizieren, indem Sie die im Repository erstellte `output.json` Datei verwenden, die sich in derselben Ressource wie die `terragrunt.hcl` Datei befindet. | DevOps Ingenieur | 

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


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Reichen Sie eine Reinigungsanfrage ein. | Gehen Sie wie folgt vor, um Ressourcen zu löschen, die nicht mehr benötigt werden:[See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt.html) | DevOps Ingenieur | 

## Zugehörige Ressourcen
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-resources"></a>

**AWS Blogs**
+ [Verwenden Sie IAM-Rollen, um GitHub Aktionen mit Aktionen in zu verbinden AWS](https://aws.amazon.com/blogs/security/use-iam-roles-to-connect-github-actions-to-actions-in-aws/)

**AWS-Service Dokumentation**
+ [Erstellung von IAM-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)
+ [Überwachung von CloudTrail Protokolldateien mit Amazon CloudWatch Logs](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/monitor-cloudtrail-log-files-with-cloudwatch-logs.html)
+ [Bewährte Sicherheitsmethoden für Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-best-practices.html)

**GitHub Ressourcen**
+ [Erstellen Sie ein Repository-Versandereignis](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event)
+ [Webhooks erstellen](https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks#payload)
+ [Implementieren Sie strenge Zugriffskontrollen für das Repository GitHub ](https://docs.github.com/en/get-started/learning-about-github/access-permissions-on-github)
+ [Überprüfen Sie regelmäßig den Zugriff auf das Repository](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization)
+ [Sicherheitsüberprüfungen sind in CI/CD Vorbereitung](https://github.com/marketplace/actions/checkov-github-action)
+ [Verwenden Sie die Multi-Faktor-Authentifizierung für Konten GitHub ](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication)

## Zusätzliche Informationen
<a name="create-an-api-driven-resource-orchestration-framework-using-github-actions-and-terragrunt-additional"></a>

**Prozess der Pipeline-Ausführung**

Im Folgenden sind die Schritte der Pipeline-Ausführung aufgeführt:

1. **Validiert das JSON-Nutzdatenformat** — Stellt sicher, dass die eingehende JSON-Konfiguration ordnungsgemäß strukturiert ist und alle erforderlichen Parameter enthält

1. **Nimmt die angegebene IAM-Rolle** an — Authentifiziert sich und übernimmt die für den Betrieb erforderliche IAM-Rolle AWS 

1. **Lädt den erforderlichen Terraform- und Terragrunt-Code herunter — Ruft die angegebene Version des Ressourcencodes** und der Abhängigkeiten ab

1. **Führt die Ressourcenbereitstellung aus — Wendet die Konfiguration für die Bereitstellung** oder Aktualisierung von Ressourcen in der Zielumgebung an AWS 

**Beispielnutzlast, die für die VPC-Erstellung verwendet wurde**

Im Folgenden finden Sie einen Beispielcode für die Erstellung eines Terraform-Backend-State-Buckets:

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

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

Im Folgenden finden Sie eine Beispiel-Payload für die Erstellung einer VPC mit Amazon VPC, in der die [CIDR-Blockspezifikationen](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html) für die VPC `vpc_cidr` definiert werden. Der Terraform-State-Bucket ist einer in den Dateien definierten Variablen zugeordnet. `terraform` Der `ref` Parameter enthält den Zweignamen des auszuführenden Codes.

```
{
    "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`werden verwendet, um den Status der Anfrage im Pipeline-Abschnitt zu verfolgen, und `tfstate` werden auf der Grundlage dieser Informationen erstellt. Die folgenden Parameter enthalten Metadaten und Steuerinformationen:
+ `RequestId`— Eindeutiger Bezeichner für die Anfrage
+ `RequestType`— Art des Vorgangs (erstellen, aktualisieren oder löschen)
+ `ResourceType`— Art der Ressource, die bereitgestellt werden soll
+ `AccountId`— Ziel AWS-Konto für den Einsatz
+ `AccountAlias`— Freundlicher Name für den AWS-Konto
+ `RegionId`— AWS-Region für den Einsatz von Ressourcen
+ `ApplicationName`— Name der Anwendung
+ `DivisionName`— Abteilung Organisation
+ `EnvironmentId`— Umwelt (zum Beispiel Entwicklung und Produktion)
+ `Suffix`— Zusätzliche Kennung für die Ressourcen

`ResourceParameters`enthalten eine ressourcenspezifische Konfiguration, die den in den Terraform-Dateien definierten Variablen zugeordnet ist. Alle benutzerdefinierten Variablen, die an die Terraform-Module übergeben werden müssen, sollten in enthalten sein. `ResourceParameters` Der Parameter `vpc_cidr` ist für Amazon VPC obligatorisch.