

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.

# Automatische Erkennung von Änderungen und Initiierung verschiedener CodePipeline Pipelines für ein Monorepo in CodeCommit
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit"></a>

*Helton Ribeiro, Petrus Batalha und Ricardo Morais, Amazon Web Services*

## Zusammenfassung
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-summary"></a>

**Hinweis**: AWS Cloud9 ist für Neukunden nicht mehr verfügbar. Bestandskunden von AWS Cloud9 können den Service weiterhin wie gewohnt nutzen. [Weitere Informationen](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

Dieses Muster hilft Ihnen dabei, Änderungen am Quellcode einer Monorepo-basierten Anwendung automatisch zu erkennen AWS CodeCommit und dann eine Pipeline zu initiieren, in der die Continuous Integration and Continuous Delivery (CI/CD) automation for each microservice. This approach means that each microservice in your monorepo-based application can have a dedicated CI/CDPipeline) ausgeführt wird. Dadurch wird eine bessere Sichtbarkeit, einfachere gemeinsame Nutzung von Code und eine verbesserte Zusammenarbeit, Standardisierung und Auffindbarkeit gewährleistet. AWS CodePipeline 

Die in diesem Muster beschriebene Lösung führt keine Abhängigkeitsanalyse zwischen den Microservices im Monorepo durch. Sie erkennt nur Änderungen im Quellcode und initiiert die passende Pipeline. CI/CD 

Das Muster dient AWS Cloud9 als integrierte Entwicklungsumgebung (IDE) und AWS Cloud Development Kit (AWS CDK) zur Definition einer Infrastruktur mithilfe von zwei CloudFormation Stacks: `MonoRepoStack` und. `PipelinesStack` Der `MonoRepoStack` Stack erstellt das Monorepo in AWS CodeCommit und die AWS Lambda Funktion, die die Pipelines initiiert. CI/CD Der `PipelinesStack` Stack definiert Ihre Pipeline-Infrastruktur.

**Wichtig**  
Der Workflow dieses Musters ist ein Machbarkeitsnachweis (PoC). Wir empfehlen, es nur in einer Testumgebung zu verwenden. Wenn Sie den Ansatz dieses Musters in einer Produktionsumgebung verwenden möchten, finden Sie in der AWS Identity and Access Management ([IAM-) Dokumentation unter Bewährte Sicherheitsmethoden](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) in IAM weitere Informationen und nehmen Sie die erforderlichen Änderungen an Ihren IAM-Rollen und vor. AWS-Services 

## Voraussetzungen und Einschränkungen
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-prereqs"></a>

**Voraussetzungen**
+ Ein aktives Konto. AWS 
+ AWS Command Line Interface (AWS CLI), installiert und konfiguriert. Weitere Informationen finden Sie AWS CLI in der AWS CLI Dokumentation unter [Installation, Aktualisierung und Deinstallation von](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html).  
+ Python 3 und`pip`, auf Ihrem lokalen Computer installiert. Weitere Informationen finden Sie in der [Python-Dokumentation](https://www.python.org/). 
+ AWS CDK, installiert und konfiguriert. Weitere Informationen finden Sie AWS CDK in [der AWS CDK Dokumentation unter Erste Schritte mit](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html) dem. 
+ Eine AWS Cloud9 IDE, installiert und konfiguriert. Weitere Informationen finden Sie AWS Cloud9 in der AWS Cloud9 Dokumentation unter [Einrichtung](https://docs.aws.amazon.com/cloud9/latest/user-guide/setting-up.html). 
+ Die GitHub [AWS CodeCommit Monorepo-Multi-Pipeline löst ein Repository aus](https://github.com/aws-samples/monorepo-multi-pipeline-trigger), das auf Ihrem lokalen Computer geklont wurde. 
+ Ein vorhandenes Verzeichnis, das Anwendungscode enthält, mit dem Sie ihn erstellen und bereitstellen möchten. CodePipeline
+ Vertrautheit und Erfahrung mit DevOps bewährten Methoden auf dem AWS Cloud. Um sich besser damit vertraut zu machen DevOps, können Sie das Muster [Build a loose coupled architecture with microservices using DevOps practices und AWS Cloud9](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-loosely-coupled-architecture-with-microservices-using-devops-practices-and-aws-cloud9.html) auf der Prescriptive Guidance-Website verwenden. AWS  

## Architektur
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-architecture"></a>

Das folgende Diagramm zeigt, wie Sie mithilfe von eine Infrastruktur mit zwei AWS CDK Stacks definieren können: und. AWS CloudFormation `MonoRepoStack` `PipelinesStack`

![\[Workflow zur Verwendung des AWS-CDK zur Definition einer Infrastruktur mit zwei CloudFormation Stacks.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/b0bb1094-b598-4b3d-ab8b-ad9b0eb45f38.png)


Das Diagramm zeigt den folgenden Workflow:

1. Der Bootstrap-Prozess verwendet die, AWS CDK um die Stacks zu erstellen und. AWS CloudFormation `MonoRepoStack` `PipelinesStack`

1. Der `MonoRepoStack` Stack erstellt das CodeCommit Repository für Ihre Anwendung und die `monorepo-event-handler` Lambda-Funktion, die nach jedem Commit initiiert wird.

1. Der `PipelinesStack` Stack erstellt die Pipelines CodePipeline , die von der Lambda-Funktion initiiert werden. Jeder Microservice muss über eine definierte Infrastrukturpipeline verfügen.

1. Die Pipeline für `microservice-n` wird von der Lambda-Funktion initiiert und startet ihre isolierten CI/CD Phasen, die auf dem Quellcode in CodeCommit basieren.

1. Die Pipeline für `microservice-1` wird von der Lambda-Funktion initiiert und startet ihre isolierten CI/CD Phasen, die auf dem Quellcode in CodeCommit basieren.

Das folgende Diagramm zeigt die Bereitstellung der AWS CloudFormation Stacks `MonoRepoStack` und `PipelinesStack` in einem Konto.

![\[Bereitstellung der CloudFormation Stacks MonoRepoStack und PipelinesStack in einem AWS-Konto.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/a3397158-a208-4033-844e-969af13ae8b6/images/39e60e49-dea2-486d-8a2c-6cae438f69b4.png)


1. Ein Benutzer ändert den Code in einem der Microservices der Anwendung.

1. Der Benutzer überträgt die Änderungen von einem lokalen Repository in ein CodeCommit Repository.

1. Die Push-Aktivität initiiert die Lambda-Funktion, die alle Pushs an das Repository empfängt. CodeCommit 

1. Die Lambda-Funktion liest einen Parameter im Parameter Store, eine Fähigkeit von AWS Systems Manager, um die neueste Commit-ID abzurufen. Der Parameter hat das Benennungsformat:`/MonoRepoTrigger/{repository}/{branch_name}/LastCommit`. Wenn der Parameter nicht gefunden wird, liest die Lambda-Funktion die letzte Commit-ID aus dem CodeCommit Repository und speichert den zurückgegebenen Wert im Parameter Store.

1. Nach der Identifizierung der Commit-ID und der geänderten Dateien identifiziert die Lambda-Funktion die Pipelines für jedes Microservice-Verzeichnis und initiiert die erforderliche Pipeline. CodePipeline 

## Tools
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-tools"></a>
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)ist ein Framework für die Softwareentwicklung, mit dem Cloud-Infrastruktur im Code definiert und bereitgestellt werden kann. CloudFormation
+ [Python](https://www.python.org/) ist eine Programmiersprache, mit der Sie schnell arbeiten und Systeme effektiver integrieren können.

**Code**

Der Quellcode und die Vorlagen für dieses Muster sind im GitHub [AWS CodeCommit Monorepo Multi-Pipeline-Trigger-Repository](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) verfügbar.

## Best Practices
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-best-practices"></a>
+ Diese Beispielarchitektur beinhaltet keine Überwachungslösung für die bereitgestellte Infrastruktur. Wenn Sie diese Lösung in einer Produktionsumgebung einsetzen möchten, empfehlen wir Ihnen, die Überwachung zu aktivieren. Weitere Informationen finden Sie unter [Überwachen Ihrer serverlosen Anwendungen mit CloudWatch Application Insights](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/monitor-app-insights.html) in der Dokumentation AWS Serverless Application Model (AWS SAM).
+ Wenn Sie den in diesem Muster enthaltenen Beispielcode bearbeiten, befolgen Sie die [bewährten Methoden für die Entwicklung und Bereitstellung der Cloud-Infrastruktur](https://docs.aws.amazon.com/cdk/v2/guide/best-practices.html) in der AWS CDK Dokumentation.
+ Lesen Sie bei der Definition Ihrer Microservice-Pipelines die [bewährten Sicherheitsmethoden](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) in der AWS CodePipeline Dokumentation.
+ Sie können Ihren AWS CDK Code auch mithilfe des Dienstprogramms [cdk-nag](https://github.com/cdklabs/cdk-nag) auf bewährte Methoden überprüfen. Dieses Tool verwendet eine Reihe von Regeln, die nach Paketen gruppiert sind, um Ihren Code auszuwerten. Die verfügbaren Pakete sind:
  + [AWS Lösungsbibliothek](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#awssolutions)
  + [Sicherheit nach dem Gesetz über die Portabilität und Rechenschaftspflicht von Krankenversicherungen (HIPAA)](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#hipaa-security)
  + [Nationales Institut für Standards und Technologie (NIST) 800-53 Rev. 4](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-4)
  + [NIST 800-53 Rev. 5](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#nist-800-53-rev-5)
  + [Datensicherheitsstandard der Zahlungskartenindustrie (PCI DSS) 3.2.1](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md#pci-dss-321)

## Epen
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-epics"></a>

### Richte die Umgebung ein
<a name="set-up-the-environment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie eine virtuelle Python-Umgebung. | Erstellen Sie in Ihrer AWS Cloud9 IDE eine virtuelle Python-Umgebung und installieren Sie die erforderlichen Abhängigkeiten, indem Sie den folgenden Befehl ausführen:`make install` | Developer | 
| Bootstrap das AWS-Konto und AWS-Region für das AWS CDK. | Führen Sie das Bootstrapping für die erforderlichen AWS-Konto Daten und die Region durch, indem Sie den folgenden Befehl ausführen:`make bootstrap account-id=<your-AWS-account-ID> region=<required-region>` | Developer | 

### Fügen Sie eine neue Pipeline für einen Microservice hinzu
<a name="add-a-new-pipeline-for-a-microservice"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
|  Fügen Sie Ihren Beispielcode zu Ihrem Anwendungsverzeichnis hinzu. | Fügen Sie das Verzeichnis, das Ihren Beispielanwendungscode enthält, dem `monorepo-sample` Verzeichnis im GitHub [AWS CodeCommit geklonten Monorepo Multi-Pipeline-Trigger-Repository](https://github.com/aws-samples/monorepo-multi-pipeline-trigger) hinzu. | Developer | 
| Bearbeiten Sie die `monorepo-main.json`-Datei. | Fügen Sie den Verzeichnisnamen des Codes Ihrer Anwendung und den Namen der Pipeline zur `monorepo-main.json` Datei im geklonten Repository hinzu. | Developer | 
| Erstellen Sie die Pipeline. | Fügen Sie im `Pipelines` Verzeichnis für das Repository die Pipeline `class` für Ihre Anwendung hinzu. Das Verzeichnis enthält zwei Beispieldateien `pipeline_hotsite.py` und`pipeline_demo.py`. Jede Datei besteht aus drei Phasen: Quelle, Erstellung und Bereitstellung.Sie können eine der Dateien kopieren und entsprechend den Anforderungen Ihrer Anwendung Änderungen daran vornehmen.  | Developer | 
| Bearbeiten Sie die `monorepo_config.py`-Datei. | Fügen Sie `service_map` unter den Verzeichnisnamen für Ihre Anwendung und die Klasse hinzu, die Sie für die Pipeline erstellt haben.Der folgende Code zeigt beispielsweise eine Pipeline-Definition in dem `Pipelines` Verzeichnis, die eine `pipeline_mysample.py` mit einer `MySamplePipeline` Klasse benannte Datei verwendet:<pre>...<br /># Pipeline definition imports<br />from pipelines.pipeline_demo import DemoPipeline<br />from pipelines.pipeline_hotsite import HotsitePipeline<br />from pipelines.pipeline_mysample import MySamplePipeline<br /><br />### Add your pipeline configuration here<br />service_map: Dict[str, ServicePipeline]  = {<br />    # folder-name -> pipeline-class<br />    'demo': DemoPipeline(),<br />    'hotsite': HotsitePipeline(),<br />    'mysample': MySamplePipeline()<br />}</pre> | Developer | 

### Stellen Sie den MonoRepoStack Stack bereit
<a name="deploy-the-monorepostack-stack"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie den AWS CloudFormation Stack bereit. | Stellen Sie den AWS CloudFormation `MonoRepoStack` Stack mit Standardparameterwerten im Stammverzeichnis des geklonten Repositorys bereit, indem `make deploy-core` Sie den Befehl ausführen.Sie können den Namen des Repositorys ändern, indem Sie den `make deploy-core monorepo-name=<repo_name>` Befehl ausführen.Mit dem `make deploy monorepo-name=<repo_name>` Befehl können Sie beide Pipelines gleichzeitig bereitstellen. | Developer | 
| Überprüfen Sie das CodeCommit Repository. | Stellen Sie sicher, dass Ihre Ressourcen erstellt wurden, indem `aws codecommit get-repository --repository-name <repo_name>` Sie den Befehl ausführen. Da der CloudFormation Stack das CodeCommit Repository erstellt, in dem das Monorepo gespeichert ist, führen Sie den `cdk destroy MonoRepoStack ` Befehl nicht aus, wenn Sie damit begonnen haben, Änderungen in ihn zu übertragen. | Developer | 
| Überprüfen Sie die CloudFormation Stack-Ergebnisse. | Stellen Sie sicher, dass der CloudFormation `MonoRepoStack` Stack korrekt erstellt und konfiguriert wurde, indem Sie den folgenden Befehl ausführen:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE --query 'StackSummaries[?StackName == 'MonoRepoStack']'</pre> | Developer | 

### Stellen Sie den PipelinesStack Stack bereit
<a name="deploy-the-pipelinesstack-stack"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie den CloudFormation Stack bereit. | Der AWS CloudFormation `PipelinesStack` Stack muss bereitgestellt werden, nachdem Sie den `MonoRepoStack` Stack bereitgestellt haben. Der Stack nimmt an Größe zu, wenn der Codebasis des Monorepo neue Microservices hinzugefügt werden, und er wird erneut bereitgestellt, wenn ein neuer Microservice hinzugefügt wird.Stellen Sie den Stack bereit, indem Sie den Befehl ausführen. PipelinesStack `make deploy-pipelines`Sie können auch beide Pipelines gleichzeitig bereitstellen und bereitstellen, indem Sie den `make deploy monorepo-name=<repo_name>` Befehl ausführen.Die folgende Beispielausgabe zeigt, wie die `PipelinesStacks` Bereitstellung die URLs für die Microservices am Ende der Implementierung ausgibt:<pre>Outputs:<br />PipelinesStack.demourl = .cloudfront.net<br />PipelinesStack.hotsiteurl = .cloudfront.net</pre> | Developer | 
| Überprüfen Sie die AWS CloudFormation Stack-Ergebnisse. | Stellen Sie sicher, dass der AWS CloudFormation `PipelinesStacks` Stack korrekt erstellt und konfiguriert wurde, indem Sie den folgenden Befehl ausführen:<pre>aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[?StackName == 'PipelinesStack']'</pre> | Developer | 

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


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Lösche deine AWS CloudFormation Stapel. | Führen Sie den Befehl `make destroy` aus. | Developer | 
| Löschen Sie die S3-Buckets für Ihre Pipelines. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | Developer | 

## Fehlerbehebung
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Ich bin auf Probleme gestoßen AWS CDK . | Weitere Informationen finden Sie in der AWS CDK-Dokumentation unter [Behebung häufiger AWS CDK Probleme](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html). | 
| Ich habe meinen Microservice-Code übertragen, aber die Microservice-Pipeline lief nicht. | **Überprüfung des Setups***Überprüfen Sie die Zweigkonfiguration:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*Überprüfen Sie die Konfigurationsdateien:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Problembehandlung auf der Konsole***AWS CodePipeline prüft:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)*AWS Lambda Problembehebung:*[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 
| Ich muss alle meine Microservices erneut bereitstellen.  | Es gibt zwei Ansätze, um die Umverteilung aller Microservices zu erzwingen. Wählen Sie die Option, die Ihren Anforderungen entspricht.**Ansatz 1: Löschen Sie einen Parameter im Parameterspeicher**Bei dieser Methode wird ein bestimmter Parameter im Systems Manager Parameter Store gelöscht, der die letzte für die Bereitstellung verwendete Commit-ID verfolgt. Wenn Sie diesen Parameter entfernen, ist das System gezwungen, alle Microservices beim nächsten Trigger erneut bereitzustellen, da es diesen als neuen Zustand wahrnimmt.Schritte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Vorteile:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Nachteile:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)**Ansatz 2: Push einen Commit in jeden Monorepo-Unterordner**Bei dieser Methode wird eine geringfügige Änderung vorgenommen und diese in jeden Microservice-Unterordner innerhalb des Monorepos verschoben, um die einzelnen Pipelines zu initiieren.Schritte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Vorteile:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html)Nachteile:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit.html) | 

## Zugehörige Ressourcen
<a name="automatically-detect-changes-and-initiate-different-codepipeline-pipelines-for-a-monorepo-in-codecommit-resources"></a>
+ [Kontinuierliche Integration und Bereitstellung (CI/CD) mithilfe von CDK Pipelines](https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html) (Dokumentation)AWS CDK 
+ [aws-cdk/pipelines-Modul](https://docs.aws.amazon.com/cdk/api/latest/docs/pipelines-readme.html) (API-Referenz)AWS CDK 