Automatisches Erstellen von CI/CD-Pipelines und ECS Amazon-Clustern für Microservices mithilfe von AWS CDK - 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.

Automatisches Erstellen von CI/CD-Pipelines und ECS Amazon-Clustern für Microservices mithilfe von AWS CDK

Erstellt von Varsha Raju () AWS

Umgebung: PoC oder Pilotprojekt

Technologien: DevOps; Container und Mikroservices; Modernisierung; Infrastruktur

AWSDienstleistungen: AWS CodeBuild; AWS CodeCommit; AWS CodePipeline; AmazonECS; AWS CDK

Übersicht

Dieses Muster beschreibt, wie die Pipelines für Continuous Integration und Continuous Delivery (CI/CD) und die zugrunde liegende Infrastruktur für den Aufbau und die Bereitstellung von Microservices auf Amazon Elastic Container Service (Amazon) automatisch erstellt werden. ECS Sie können diesen Ansatz verwenden, wenn Sie proof-of-concept CI/CD-Pipelines einrichten möchten, um Ihrem Unternehmen die Vorteile von CI/CD, Microservices und aufzuzeigen. DevOps Sie können diesen Ansatz auch verwenden, um erste CI/CD-Pipelines zu erstellen, die Sie dann an die Anforderungen Ihres Unternehmens anpassen oder ändern können. 

Der Ansatz des Musters erstellt eine Produktionsumgebung und eine Nicht-Produktionsumgebung, die jeweils über eine virtuelle private Cloud (VPC) und einen ECS Amazon-Cluster verfügen, die für die Ausführung in zwei Availability Zones konfiguriert sind. Diese Umgebungen werden von all Ihren Microservices gemeinsam genutzt, und Sie erstellen dann eine CI/CD-Pipeline für jeden Microservice. Diese CI/CD-Pipelines holen Änderungen aus einem Quell-Repository ein AWS CodeCommit, erstellen die Änderungen automatisch und stellen sie dann in Ihren Produktions- und Nichtproduktionsumgebungen bereit. Wenn eine Pipeline alle Phasen erfolgreich abgeschlossen hat, können Sie URLs damit auf den Microservice in der Produktions- und Nichtproduktionsumgebung zugreifen.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives Amazon Web Services (AWS) -Konto.

  • Ein vorhandener Amazon Simple Storage Service (Amazon S3) -Bucket, der die starter-code.zip Datei (angehängt) enthält.

  • AWSCloud Development Kit (AWSCDK), in Ihrem Konto installiert und konfiguriert. Weitere Informationen dazu finden Sie AWS CDK in der AWS CDK Dokumentation unter Erste Schritte mit dem.

  • Python 3 undpip, installiert und konfiguriert. Weitere Informationen dazu finden Sie in der Python-Dokumentation.

  • Vertrautheit mit AWS CDK AWS CodePipeline, AWS CodeBuild, CodeCommit, Amazon Elastic Container Registry (AmazonECR)ECS, Amazon und AWS Fargate.

  • Vertrautheit mit Docker.

  • Ein Verständnis von CI/CD und. DevOps

Einschränkungen

  • Es gelten allgemeine AWS Kontolimits. Weitere Informationen dazu finden Sie unter AWSServicekontingenten in der AWS allgemeinen Referenzdokumentation.

Produktversionen

  • Der Code wurde mit den Versionen 16.13.0 und AWS CDK 1.132.0 von Node.js getestet.

Architektur

AWS Cloud architecture diagram showing CI/CD pipeline and deployment to production and non-production VPCs.

Das Diagramm zeigt den folgenden Workflow:

  1. Ein Anwendungsentwickler überträgt den Code in ein Repository. CodeCommit

  2. Eine Pipeline wird initiiert.

  3. CodeBuild erstellt das Docker-Image und überträgt es in ein Amazon-Repository ECR

  4. CodePipeline stellt ein neues Image für einen vorhandenen Fargate-Service in einem Amazon-Cluster bereit, der nicht zur Produktion dient. ECS

  5. Amazon überträgt ECS das Bild aus dem ECR Amazon-Repository in einen Fargate-Dienst, der nicht zur Produktion verwendet wird.

  6. Die Tests werden mit einem Gerät durchgeführt, das nicht in der Produktion verwendet wird. URL

  7. Der Release-Manager genehmigt die Produktionsbereitstellung.

  8. CodePipeline stellt das neue Image für einen vorhandenen Fargate-Service in einem Amazon-Produktionscluster bereit ECS

  9. Amazon ECS überträgt das Bild aus dem ECR Amazon-Repository in den Fargate-Produktionsservice.

  10. Produktionsbenutzer greifen mithilfe einer Produktion auf Ihr Feature zu. URL

Technologie-Stack

  • AWS CDK

  • CodeBuild

  • CodeCommit 

  • CodePipeline

  • Amazon ECR 

  • Amazon ECS 

  • Amazon VPC

Automatisierung und Skalierung

Sie können den Ansatz dieses Musters verwenden, um Pipelines für Microservices zu erstellen, die in einem gemeinsam genutzten AWS CloudFormation Stack bereitgestellt werden. Die Automatisierung kann in jedem mehr als einen ECS Amazon-Cluster erstellen VPC und auch Pipelines für Microservices erstellen, die in einem gemeinsamen ECS Amazon-Cluster bereitgestellt werden. Dies erfordert jedoch, dass Sie neue Ressourceninformationen als Eingaben für den Pipeline-Stack angeben.

Tools

  • AWSCDK— AWS Cloud Development Kit (AWSCDK) ist ein Softwareentwicklungsframework, mit dem Cloud-Infrastruktur im Code definiert und bereitgestellt werden kann. AWS CloudFormation

  • AWS CodeBuild— AWS CodeBuild ist ein vollständig verwalteter Build-Service in der Cloud. CodeBuild kompiliert Ihren Quellcode, führt Komponententests durch und produziert Artefakte, die sofort einsatzbereit sind.

  • AWS CodeCommit— AWS CodeCommit ist ein Versionskontrolldienst, mit dem Sie Git-Repositorys privat in der AWS Cloud speichern und verwalten können. CodeCommit macht es überflüssig, dass Sie Ihr eigenes Quellcodeverwaltungssystem verwalten oder sich Gedanken über die Skalierung der Infrastruktur machen müssen.

  • AWS CodePipeline— AWS CodePipeline ist ein Service zur kontinuierlichen Bereitstellung, mit dem Sie die zur Veröffentlichung Ihrer Software erforderlichen Schritte modellieren, visualisieren und automatisieren können. Sie können die verschiedenen Phasen eines Softwareveröffentlichungsprozesses schnell modellieren und konfigurieren. CodePipeline automatisiert die Schritte, die erforderlich sind, um Ihre Softwareänderungen kontinuierlich zu veröffentlichen.

  • Amazon ECS — Amazon Elastic Container Service (AmazonECS) ist ein hoch skalierbarer, schneller Container-Management-Service, der zum Ausführen, Stoppen und Verwalten von Containern in einem Cluster verwendet wird. Sie können Ihre Aufgaben und Dienste auf einer serverlosen Infrastruktur ausführen, die von AWS Fargate verwaltet wird. Für mehr Kontrolle über Ihre Infrastruktur können Sie Ihre Aufgaben und Dienste alternativ auf einem Cluster von Amazon Elastic Compute Cloud (AmazonEC2) -Instances ausführen, die Sie verwalten.

  • Docker — Docker hilft Entwicklern dabei, jede Anwendung als leichten, portablen und autarken Container zu packen, zu versenden und auszuführen.

Code

Der Code für dieses Muster ist in den starter-code.zip Dateien cicdstarter.zip und (im Anhang) verfügbar.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten
Richten Sie das Arbeitsverzeichnis für ein AWSCDK.
  1. Erstellen Sie ein Verzeichnis mit dem Namen cicdproject auf Ihrem lokalen Computer.

  2. Laden Sie die cicdstarter.zip Datei (angehängt) in das cicdproject Verzeichnis herunter und entpacken Sie sie. Dadurch wird ein Ordner mit dem Namen cicdstarter erstellt.

  3. Führen Sie den Befehl cd <user-home>/cicdproject/cicdstarter aus. 

  4. Richten Sie die virtuelle Python-Umgebung ein, indem python3 -m venv .venv Sie den Befehl ausführen.

  5. Führen Sie den Befehl source ./.venv/bin/activate aus.

  6. Konfigurieren Sie Ihre AWS Umgebung, indem Sie den aws configure Befehl ausführen oder die folgenden Umgebungsvariablen verwenden: 

    • AWS_ACCESS_KEY_ID

    • AWS_SECRET_ACCESS_KEY 

    • AWS_DEFAULT_REGION

AWS DevOps, Cloud-Infrastruktur
AufgabeBeschreibungErforderliche Fähigkeiten
Erstellen Sie die gemeinsame Infrastruktur.
  1. Führen Sie in Ihrem Arbeitsverzeichnis den cd cicdvpcecs Befehl aus. 

  2. Führen Sie den pip3 install -r requirements.txt Befehl aus, um alle erforderlichen Python-Abhängigkeiten zu installieren

  3. Führen Sie den auscdk bootstrap command, um die AWS Umgebung für festzulegen AWSCDK. 

  4. Führen Sie den Befehl cdk synth --context aws_account=<aws_account_ID> --context aws_region=<aws-region> aus. 

  5. Führen Sie den Befehl cdk deploy --context aws_account=<aws_account_ID> --context aws_region=<aws-region> aus.

  6. Der AWS CloudFormation Stack erstellt die folgende Infrastruktur:

    • Eine Nicht-Produktionsfirma VPC mit dem Namen cicd-vpc-ecs/cicd-vpc-nonprod

    • Eine Produktion VPC mit dem Namen cicd-vpc-ecs/cicd-vpc-prod

    • Ein ECS Amazon-Cluster ohne Produktionsbetrieb mit dem Namen cicd-ecs-nonprod

    • Ein ECS Amazon-Produktionscluster mit dem Namen cicd-ecs-prod

AWS DevOps, Cloud-Infrastruktur
Überwachen Sie den AWS CloudFormation Stack.
  1. Melden Sie sich bei der AWS Management Console an, öffnen Sie die AWS CloudFormation Konsole und wählen Sie dann den cicd-vpc-ecs Stack aus der Liste aus. 

  2. Wählen Sie im Bereich mit den Stack-Details die Registerkarte Ereignisse aus und überwachen Sie den Fortschritt Ihrer Stack-Erstellung.

AWS DevOps, Cloud-Infrastruktur
Testen Sie den AWS CloudFormation Stack.
  1. Stellen Sie nach der Erstellung des cicd-vpc-ecs AWS CloudFormation Stacks sicher, dass cicd-vpc-ecs/cicd-vpc-prod VPCs die cicd-vpc-ecs/cicd-vpc-nonprod und erstellt wurden. 

  2. Stellen Sie sicher, dass die cicd-ecs-nonprod und cicd-ecs-prod ECS Amazon-Cluster erstellt wurden.

Wichtig: Stellen Sie sicher, dass Sie die Sicherheitsgruppe IDs für die beiden VPCs und die Sicherheitsgruppe IDs für die Standardsicherheitsgruppen in beiden Gruppen aufzeichnenVPCs.

AWS DevOps, Cloud-Infrastruktur
AufgabeBeschreibungErforderliche Fähigkeiten
Erstellen Sie die Infrastruktur für den Microservice.
  1. Benennen Sie Ihren Microservice. In diesem Muster wird beispielsweise der Name des Microservices verwendetmyservice1.

  2. Führen Sie in Ihrem Arbeitsverzeichnis den cd <working-directory>/cdkpipeline Befehl aus.

  3. Führen Sie den Befehl pip3 install -r requirements.txt aus.

  4. Führen Sie den vollständigen cdk synth Befehl aus, der im Abschnitt Zusätzliche Informationen dieses Musters verfügbar ist.

  5. Führen Sie den vollständigen cdk deploy Befehl aus, der im Abschnitt Zusätzliche Informationen dieses Musters verfügbar ist.

Hinweis: Sie können die Werte für beide Befehle auch angeben, indem Sie die cdk.json Datei im Verzeichnis verwenden.

AWS DevOps, Cloud-Infrastruktur
Überwachen Sie den AWS CloudFormation Stack.

Öffnen Sie die AWS CloudFormation Konsole und überwachen Sie den Fortschritt des myservice1-cicd-stack Stacks. Schließlich ändert sich der Status zu CREATE_COMPLETE.

AWS DevOps, Cloud-Infrastruktur
Testen Sie den AWS CloudFormation Stack.
  1. Stellen Sie auf der AWS CodeCommit Konsole sicher, dass ein Repository mit dem Namen myservice1 existiert und den Startcode enthält.

  2. Stellen Sie auf der AWS CodeBuild Konsole sicher, dass ein Build-Projekt mit dem Namen myservice1 existiert.

  3. Stellen Sie auf der ECR Amazon-Konsole sicher, dass ein ECR Amazon-Repository mit dem Namen myservice1 existiert.

  4. Stellen Sie auf der ECS Amazon-Konsole sicher, dass ein Fargate-Dienst mit dem Namen sowohl in einem Nicht-Produktions- als auch in einem ECS Produktions-Amazon-Cluster myservice1 vorhanden ist.

  5. Stellen Sie auf der Amazon Elastic Compute Cloud (AmazonEC2) -Konsole sicher, dass die Application Load Balancer für die Produktion und für die Produktion erstellt wurden. Notieren Sie sich die DNS Namen der. ALBs

  6. Stellen Sie auf der AWS CodePipeline Konsole sicher, dass eine Pipeline mit dem Namen myservice1 existiert. Sie muss Deploy-Prod Stufen SourceBuild,Deploy-NonProd, und haben. Die Pipeline sollte auch einen in progress Status haben.

  7. Überwachen Sie die Pipeline, bis alle Phasen abgeschlossen sind. 

  8. Genehmigen Sie es manuell für die Produktion.

  9. Geben Sie in einem Browserfenster die DNS Namen der einALBs.

  10. Die Anwendung sollte Hello World in den Bereichen Nichtproduktion und Produktion URLs angezeigt werden.

Verwenden Sie die Pipeline.
  1. Öffnen Sie das CodeCommit Repository, das Sie zuvor erstellt haben, und öffnen Sie die index.js Datei. 

  2. Ersetzen Sie Hello World durch Hello CI/CD.

  3. Speichern Sie die Änderungen und übernehmen Sie sie im Hauptzweig.

  4. Stellen Sie sicher, dass die Pipeline initiiert wird und ob die Änderung die Deploy-Prod  Phasen BuildDeploy-NonProd, und durchläuft. 

  5. Genehmigen Sie die Produktion manuell.

  6. Sowohl Produktion als auch Nichtproduktion URLs sollten jetzt angezeigt Hello CICD werden.

AWS DevOps, Cloud-Infrastruktur
Wiederhole dieses Epos für jeden Microservice.

Wiederholen Sie die Aufgaben in diesem Epos, um eine CI/CD-Pipeline für jeden Ihrer Microservices zu erstellen.

AWS DevOps, Cloud-Infrastruktur

Zugehörige Ressourcen

Zusätzliche Informationen

cdk synth -Befehl

cdk synth --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

cdk deploy command

cdk deploy --context aws_account=<aws_account_number> --context aws_region=<aws_region> --context vpc_nonprod_id=<id_of_non_production_VPC> --context vpc_prod_id=<id_of_production_VPC> --context ecssg_nonprod_id=< default_security_group_id_of_non-production_VPC> --context ecssg_prod_id=<default_security_group_id_of_production_VPC> --context code_commit_s3_bucket_for_code=<S3 bucket name> --context code_commit_s3_object_key_for_code=<Object_key_of_starter_code> --context microservice_name=<name_of_microservice>

Anlagen

Um auf zusätzliche Inhalte zuzugreifen, die mit diesem Dokument verknüpft sind, entpacken Sie die folgende Datei: attachment.zip