Erstellen Sie mit Actions und Terragrunt ein API-gesteuertes Framework GitHub zur Ressourcenorchestrierung - 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 mit Actions und Terragrunt ein API-gesteuertes Framework GitHub zur Ressourcenorchestrierung

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

Übersicht

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

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. Informationen zu bestimmten Endpunkten finden Sie unter Dienstendpunkte und Kontingente. Wählen Sie dort den Link für den Dienst aus.

Architektur

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

Workflow zur Automatisierung der Ressourcenbereitstellung mit GitHub Aktionen und Terraform.

Das Architekturdiagramm zeigt die folgenden Aktionen:

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

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

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

AWS-Services

  • Amazon DynamoDB ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.

  • AWS Identity and Access Management (IAM) 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) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

  • Amazon Virtual Private Cloud (Amazon VPC) 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 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 ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.

  • Terragrunt 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 verfügbar.

Bewährte Methoden

  • 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 und bewährte Methoden zur Sicherheit.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Initialisieren Sie das GitHub Repository.

Gehen Sie wie folgt vor, um das GitHub Repository zu initialisieren:

  1. Erstellen Sie ein neues GitHub Repository, um den Pipeline-Code zu hosten.

  2. Importieren Sie die workflow-trigger.yml Dateien deployment.yml und, die sich im Ordner .github/workflows des Quell-Repositorys befinden.

DevOps Ingenieur

Konfigurieren Sie die IAM-Rollen und -Berechtigungen.

Gehen Sie wie folgt vor, um die IAM-Rollen und -Berechtigungen zu konfigurieren:

  1. Erstellen Sie eine IAM-Rolle mit den Vertrauensbeziehungen, die erforderlich sind, damit GitHub Aktionen AWS mithilfe eines OpenID Connect (OIDC) -Identitätsanbieters (IdP) eine Verbindung zu Aktionen herstellen können.

  2. Ordnen Sie der IAM-Rolle die erforderlichen Berechtigungen zu, um das Backend und die gewünschten Ressourcen zu erstellen. Weitere Informationen finden Sie in einer Beispielrichtlinie zum Erstellen einer VPC mit Amazon VPC zusammen mit dem Amazon S3-Backend-Back-Bucket und der DynamoDB-Tabelle.

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. Konfigurieren Sie die folgenden Variablen:

  • Repository-Geheimnisse

    • PAT_TOKEN— Ihr persönliches Zugriffstoken mit den Berechtigungen zur Durchführung von GitHub Vorgängen

  • Repository-Variablen

DevOps Ingenieur

Erstellen Sie die Repository-Struktur.

Gehen Sie wie folgt vor, um die Repository-Struktur zu erstellen:

  1. Erstellen Sie einen neuen Ordner im main Zweig, um die terragrunt.hcl Datei sowie die Ausgaben und Changelogs nach der Erstellung der Ressource zu speichern.

  2. Benennen Sie den Ordner entsprechend dem Ressourcentyp, den Sie über ihn bereitstellen möchten, in Kleinbuchstaben. Der Ordner wird später in der Payload unverändert verwendet. Weitere Informationen finden Sie in einer Beispielstruktur für Amazon S3 und Amazon VPC im Repository.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie die Pipeline mit curl aus.

Gehen Sie wie folgt vor, um die Pipeline mithilfe von curl auszuführen:

  1. Erstellen Sie eine payload.json-Datei in Ihrem lokalen Verzeichnis. Folgen Sie der definierten Struktur für die Payload-Datei und stringifizieren Sie sie, bevor Sie die Anfrage abschicken. Weitere Informationen finden Sie in den Beispiel-Payloads im Repository.

  2. Reichen Sie die Anfrage auf Ihrem Terminal ein, indem Sie die GitHub API verwenden, wie im folgenden Beispiel gezeigt:

    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

    Geben Sie im Beispiel Ihre eigenen Werte für Folgendes an:

    • YOUR_GITHUB_TOKENmit Ihrem GitHub persönlichen Zugriffstoken

    • OWNERmit dem Namen des Repository-Besitzers

    • REPOmit dem Repository-Namen

Weitere Informationen zum Pipeline-Ausführungsprozess finden Sie unter Zusätzliche Informationen.

DevOps Ingenieur

Validieren Sie die Ergebnisse der Pipeline-Ausführung

Gehen Sie wie folgt vor, um die Ergebnisse zu validieren:

  1. Überwachen Sie die Ausführung des GitHub Aktionen-Workflows auf der Registerkarte Aktionen Ihres Repositorys.

  2. Überprüfen Sie nach der erfolgreichen Ausführung der Workflows die Ressourcenerstellung AWS Management Console wie folgt:

    1. Für Amazon VPC:

      • Navigieren Sie im angegebenen AWS-Region Bereich zum Amazon VPC-Service.

      • Suchen Sie nach einer neuen VPC mit Tags, die Ihren Anforderungsparametern entsprechen.

      • Überprüfen Sie den CIDR-Block und andere Konfigurationen.

    2. Für Amazon S3:

      • Navigieren Sie zu Amazon S3 S3-Buckets.

      • Suchen Sie unter Buckets für allgemeine Zwecke nach einem neuen Bucket, der Ihren Anforderungsparametern entspricht.

      • Überprüfen Sie den S3-Bucket-Namen und andere Konfigurationen.

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
AufgabeBeschreibungErforderliche Fähigkeiten

Reichen Sie eine Reinigungsanfrage ein.

Gehen Sie wie folgt vor, um Ressourcen zu löschen, die nicht mehr benötigt werden:

  1. Senden Sie die Löschanforderung über denselben API-Endpunkt, ändern Sie jedoch die Payload wie folgt:

    • Wechseln Sie RequestType zu delete in. RequestParameters

    • Achten Sie darauf, dass alle anderen Parameter mit der create Anfrage identisch sind.

  2. Überwachen Sie den Löschvorgang unter GitHub Aktionen.

  3. Stellen Sie nach Abschluss des Workflows sicher, dass die changelog.json Datei im Ressourcenordner den Status von anzeigtdeleted.

  4. Überprüfen Sie das Entfernen von Ressourcen mithilfe von AWS Management Console.

DevOps Ingenieur

Zugehörige Ressourcen

AWS Blogs

AWS-Service Dokumentation

GitHub Ressourcen

Zusätzliche Informationen

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

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

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

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

RequestParameterswerden 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

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