Starten Sie mithilfe von Step Functions und einer Lambda-Proxyfunktion ein CodeBuild Projekt für alle AWS-Konten - 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.

Starten Sie mithilfe von Step Functions und einer Lambda-Proxyfunktion ein CodeBuild Projekt für alle AWS-Konten

Erstellt von Richard Milner-Watts (AWS) und Amit Anjarlekar (AWS)

CodeBuild Code-Repository: Kontoübergreifender Proxy

Umgebung: Produktion

Technologien: DevOps; Verwaltung und Verwaltung; Betrieb; Serverlos

AWS-Services: AWS CodeBuild; AWS Lambda; AWS Step Functions; AWS X-Ray; AWS CloudFormation

Übersicht

Dieses Muster zeigt, wie ein CodeBuild AWS-Projekt mithilfe von AWS AWS Step Functions und einer AWS Lambda-Proxyfunktion asynchron über mehrere AWS-Konten hinweg gestartet wird. Sie können die Step Functions-Beispielstatusmaschine des Musters verwenden, um den Erfolg Ihres CodeBuild Projekts zu testen.

CodeBuild hilft Ihnen dabei, betriebliche Aufgaben mithilfe der AWS-Befehlszeilenschnittstelle (AWS CLI) in einer vollständig verwalteten Laufzeitumgebung zu starten. Sie können das Verhalten Ihres CodeBuild Projekts zur Laufzeit ändern, indem Sie Umgebungsvariablen überschreiben. Darüber hinaus können Sie es CodeBuild zur Verwaltung von Workflows verwenden. Weitere Informationen finden Sie unter Service Catalog Tools auf der AWS Workshop-Website und Schedule jobs in Amazon RDS for PostgreSQL using AWS CodeBuild and EventBridge Amazon im AWS Database Blog.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Zwei aktive AWS-Konten: ein Quellkonto zum Aufrufen einer Lambda-Proxyfunktion mit Step Functions und ein Zielkonto zum Erstellen eines Remote-Beispielprojekts CodeBuild

Einschränkungen

  • Dieses Muster kann nicht verwendet werden, um Artefakte zwischen Konten zu kopieren.

Architektur

Das folgende Diagramm zeigt die Architektur, die dieses Muster aufbaut.

Architekturdiagramm des Starts eines CodeBuild Projekts über mehrere AWS-Konten

Das Diagramm zeigt den folgenden Workflow:

  1. Die Step Functions Functions-Zustandsmaschine analysiert die bereitgestellte Eingabemap und ruft die Lambda-Proxyfunktion (codebuild-proxy-lambda) für jedes Konto, jede Region und jedes Projekt auf, das Sie definiert haben.

  2. Die Lambda-Proxyfunktion verwendet AWS Security Token Service (AWS STS), um eine IAM-Proxyrolle (codebuild-proxy-role) anzunehmen, die mit einer IAM-Richtlinie (codebuild-proxy-policy) im Zielkonto verknüpft ist.

  3. Unter Verwendung der angenommenen Rolle startet die Lambda-Funktion das CodeBuild Projekt und gibt die CodeBuild Job-ID zurück. Die Step Functions Functions-Zustandsmaschine wiederholt den CodeBuild Job und fragt ihn ab, bis er einen Erfolgs- oder Fehlerstatus erhält.

Die Logik der Zustandsmaschine ist in der folgenden Abbildung dargestellt.

Arbeitsablauf von Step Functions State Machine

Technologie-Stack

  • AWS CloudFormation

  • CodeBuild

  • IAM

  • Lambda

  • Step Functions

  • X-Ray

Tools

  • AWS CloudFormation hilft Ihnen dabei, AWS-Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus über AWS-Konten und Regionen hinweg zu verwalten.

  • AWS CloudFormation Designer bietet einen integrierten JSON- und YAML-Editor, mit dem Sie CloudFormation Vorlagen anzeigen und bearbeiten können.

  • AWS CodeBuild ist ein vollständig verwalteter Build-Service, mit dem Sie Quellcode kompilieren, Komponententests ausführen und bereitstellungsbereite Artefakte erstellen können.

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

  • AWS Lambda ist ein Rechenservice, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • AWS Step Functions ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Lambda-Funktionen und andere AWS-Services kombinieren können, um geschäftskritische Anwendungen zu erstellen.

  • AWS X-Ray hilft Ihnen dabei, Daten über die Anfragen zu sammeln, die Ihre Anwendung bedient, und bietet Tools, mit denen Sie diese Daten anzeigen, filtern und Einblicke in sie gewinnen können, um Probleme und Optimierungsmöglichkeiten zu identifizieren.

Code

Der Beispielcode für dieses Muster ist im GitHub Cross Account CodeBuild Proxy Repository verfügbar. Dieses Muster verwendet die AWS Lambda Powertools for Python-Bibliothek, um Protokollierungs- und Ablaufverfolgungsfunktionen bereitzustellen. Weitere Informationen zu dieser Bibliothek und ihren Dienstprogrammen finden Sie unter Powertools for AWS Lambda (Python).

Bewährte Methoden

  1. Passen Sie die Wartezeitwerte in der Step Function-Zustandsmaschine an, um die Anzahl der Abfragen für den Jobstatus zu minimieren. Verwenden Sie die erwartete Ausführungszeit für das CodeBuild Projekt.

  2. Passen Sie die MaxConcurrency Eigenschaft der Map in Step Functions an, um zu steuern, wie viele CodeBuild Projekte parallel ausgeführt werden können.

  3. Prüfen Sie bei Bedarf den Beispielcode auf Produktionsreife. Überlegen Sie, welche Daten von der Lösung protokolliert werden könnten und ob die standardmäßige CloudWatch Amazon-Verschlüsselung ausreichend ist.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Notieren Sie die AWS-Konto-IDs.

AWS-Konto-IDs sind erforderlich, um den kontenübergreifenden Zugriff einzurichten.

Notieren Sie sich die AWS-Konto-ID für Ihre Quell- und Zielkonten. Weitere Informationen finden Sie in der IAM-Dokumentation unter Finden Ihrer AWS-Konto-ID.

AWS DevOps

Laden Sie die CloudFormation AWS-Vorlagen herunter.

  1. Laden Sie die sample_target_codebuild_template.yaml CloudFormation AWS-Vorlage für dieses Muster aus dem GitHub Repository herunter.

  2. Laden Sie die codebuild_lambda_proxy_template.yaml CloudFormation AWS-Vorlage für dieses Muster aus dem GitHub Repository herunter.

Hinweis: In den CloudFormation AWS-Vorlagen <SourceAccountId> ist dies die AWS-Konto-ID für das Quellkonto und <TargetAccountId> die AWS-Konto-ID für das Zielkonto.

AWS DevOps

Erstellen und implementieren Sie den CloudFormation AWS-Stack.

  1. Melden Sie sich bei der AWS-Managementkonsole für Ihr Quellkonto an, öffnen Sie die CloudFormation AWS-Konsole und wählen Sie dann Stacks aus.

  2. Wählen Sie Stack erstellen und dann Mit neuen Ressourcen (Standard) aus.

  3. Wählen Sie unter Templete source (Vorlagenquelle) den Wert Upload a template file (Vorlagendatei hochladen) aus.

  4. Wählen Sie unter Vorlagendatei hochladen die Option Datei und dann Ihre heruntergeladene codebuild_lambda_proxy_template.yaml Datei aus. Wählen Sie Weiter aus.

  5. Geben Sie unter Stackname einen Namen für den Stapel ein (z. B.codebuild-lambda-proxy).

  6. Ersetzen Sie den crossAccountTargetRoleArn Parameter durch Ihren <TargetAccountId> (z. B.<arn:aws:iam::123456789012:role/proxy-lambda-codebuild-role>). Hinweis: Sie müssen den Standardwert für den targetCodeBuildProjectParameter nicht aktualisieren.

  7. Wählen Sie Weiter, akzeptieren Sie die Standardoptionen für die Stapelerstellung und wählen Sie dann Weiter.

  8. Aktivieren Sie das Kontrollkästchen Ich bestätige, dass AWS CloudFormation möglicherweise IAM-Ressourcen mit benutzerdefinierten Namen erstellt, und wählen Sie dann Stack erstellen aus.

Hinweis: Sie müssen den CloudFormation AWS-Stack für die Proxy-Lambda-Funktion erstellen, bevor Sie Ressourcen in Zielkonten erstellen. Wenn Sie eine Vertrauensrichtlinie in einem Zielkonto erstellen, wird die IAM-Rolle vom Rollennamen in eine interne Kennung übersetzt. Aus diesem Grund muss die IAM-Rolle bereits existieren.

AWS DevOps

Bestätigen Sie die Erstellung der Proxyfunktion und der State-Machine.

  1. Warten Sie, bis der CloudFormation AWS-Stack den Status CREATE_COMPLETE erreicht hat. Dies sollte weniger als eine Minute dauern.

  2. Öffnen Sie die AWS Lambda Lambda-Konsole, wählen Sie Functions und suchen Sie dann nach der lambda-proxy-ProxyLambda-<GUID> Funktion.

  3. Öffnen Sie die AWS Step Functions Functions-Konsole, wählen Sie State Machines und suchen Sie dann den sample-crossaccount-codebuild-state-machine State Machine.

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen und implementieren Sie den CloudFormation AWS-Stack.

  1. Melden Sie sich bei der AWS-Managementkonsole für Ihr Zielkonto an, öffnen Sie die CloudFormation AWS-Konsole und wählen Sie dann Stacks aus.

  2. Wählen Sie Create Stack und dann With new resources (Standard) aus.

  3. Wählen Sie unter Templete source (Vorlagenquelle) den Wert Upload a template file (Vorlagendatei hochladen) aus.

  4. Wählen Sie für „Eine Vorlagendatei hochladen“ die Option „Datei auswählen“ und wählen Sie dann die sample_target_codebuild_template.yaml Datei aus. Wählen Sie Weiter aus.

  5. Geben Sie unter Stackname einen Namen für den Stapel ein (zum Beispiel:sample-codebuild-stack).

  6. Ersetzen Sie den crossAccountSourceRoleArn Parameter durch Ihren <SourceAccountId> (zum Beispiel<arn:aws:iam::123456789012:role/codebuild-proxy-lambda-role>).

  7. Wählen Sie Weiter, akzeptieren Sie die Standardoptionen für die Stapelerstellung und wählen Sie dann Weiter.

  8. Aktivieren Sie das Kontrollkästchen Ich bestätige, dass AWS CloudFormation möglicherweise IAM-Ressourcen mit benutzerdefinierten Namen erstellt, und wählen Sie dann Stack erstellen aus.

AWS DevOps

Überprüfen Sie die Erstellung des CodeBuild Beispielprojekts.

  1. Warten Sie, bis der CloudFormation AWS-Stack den Status CREATE_COMPLETE erreicht hat. Dies sollte weniger als eine Minute dauern.

  2. Öffnen Sie die CodeBuild AWS-Konsole und suchen Sie dann das sample-codebuild-project Projekt.

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Starten Sie die Zustandsmaschine.

  1. Melden Sie sich bei der AWS-Managementkonsole für Ihr Quellkonto an, öffnen Sie die AWS Step Functions-Konsole und wählen Sie dann State machines aus.

  2. Wählen Sie die sample-crossaccount-codebuild-state-machine Zustandsmaschine aus und klicken Sie dann auf Ausführung starten.

  3. Geben Sie im Eingabe-Editor den folgenden JSON-Code ein und <TargetAccountID> ersetzen Sie ihn durch die AWS-Konto-ID des Kontos, das das CodeBuild Projekt enthält.

    { "crossAccountTargetRoleArns": [ { "arn": "arn:aws:iam::<TargetAccountID>:role/proxy-lambda-codebuild-role", "region": "eu-west-1", "codeBuildProject": "sample-codebuild-project", "SampleValue1": "Value1", "SampleValue2": "Value2" } ] }

    Hinweis: Die Schlüssel-Wert-Paare werden als Umgebungsvariablen von der Funktion im Quellkonto an das CodeBuild Projekt im Zielkonto übergeben.

  4. Wählen Sie Start execution (Ausführung starten) aus.

  5. Prüfen Sie auf der State-Machine-Seite auf der Registerkarte Details, ob der Ausführungsstatus auf Erfolgreich gesetzt ist. Dadurch wird bestätigt, dass Ihr Zustandsmaschine läuft. Hinweis: Es kann etwa 30 Sekunden dauern, bis die Zustandsmaschine den Status Erfolgreich erreicht hat.

  6. Um die Ausgabe und Eingabe eines Schritts in der Zustandsmaschine zu sehen, erweitern Sie diesen Schritt im Abschnitt Verlauf der Ausführungsereignisse. Erweitern Sie beispielsweise den Schritt Lambda — CodeBuild Proxy — Start. Die Ausgabe enthält Details zu den überschriebenen Umgebungsvariablen, der ursprünglichen Nutzlast und der Job-ID. CodeBuild

AWS DevOps

Validieren Sie die Umgebungsvariablen.

  1. Melden Sie sich bei der AWS-Managementkonsole für Ihr Zielkonto an.

  2. Öffnen Sie die CodeBuild AWS-Konsole, erweitern Sie Build und wählen Sie dann Build projects aus.

  3. Wählen Sie das sample-codebuild-project Projekt aus und klicken Sie dann auf Details anzeigen.

  4. Wählen Sie auf der Registerkarte Build-Verlauf den neuesten Build des Projekts aus und klicken Sie dann auf Logs anzeigen.

  5. Stellen Sie in der Protokollausgabe sicher, dass die auf STDOUT ausgegebenen Umgebungsvariablen mit den Umgebungsvariablen aus der Step Functions Functions-Beispielstatusmaschine übereinstimmen.

AWS DevOps

Fehlerbehebung

ProblemLösung

Die Ausführung von Step Functions dauert länger als erwartet.

Passen Sie die MaxConcurrency Eigenschaft der Map in der Step Function-Zustandsmaschine an, um zu steuern, wie viele CodeBuild Projekte parallel ausgeführt werden können.

Die Ausführung der CodeBuild Jobs dauert länger als erwartet.

  1. Passen Sie die Wartezeitwerte in der Step Functions Functions-Zustandsmaschine an, um Abrufanforderungen für den Jobstatus zu minimieren. Verwenden Sie die erwartete Ausführungszeit für das CodeBuild Projekt.

  2. Überlegen Sie, ob CodeBuild das geeignete Tool verwendet werden soll. Beispielsweise kann die Zeit, die für die Initialisierung eines CodeBuild Jobs benötigt wird, erheblich länger sein als bei AWS Lambda. Wenn ein hoher Durchsatz und schnelle Abschlusszeiten erforderlich sind, sollten Sie erwägen, die Geschäftslogik auf AWS Lambda zu migrieren und eine Fan-Out-Architektur zu verwenden.