Erste Schritte mit Amazon ECS mit AWS CDK
In diesem Thema erfahren Sie, wie Sie einen containerisierten Webserver mit Amazon Elastic Container Service und dem AWS Cloud Development Kit (AWS CDK) auf Fargate bereitstellen. AWS CDK ist ein Infrastructure as Code (IAC)-Framework, mit dem Sie AWS-Infrastruktur mit einer vollwertigen Programmiersprache definieren können. Sie schreiben eine App in einer der unterstützten Sprachen des CDK, die einen oder mehrere Stacks enthält, und synthetisieren sie dann in einer AWS CloudFormation-Vorlage und stellen Sie die Ressourcen auf Ihrem AWS-Konto bereit.
Die AWS-Construct Library, die im CDK enthalten ist, stellt APIs bereit, mit denen die Ressourcen modelliert werden, die von jedem AWS-Service angeboten werden. Für die gängigsten Dienste stellt die Bibliothek kuratierte Konstrukte bereit, die intelligente Standardwerte bereitstellen und Best Practices mit weniger erforderlichen Parametern implementieren. Eines dieser Module, aws-ecs-patterns
, bietet Abstraktionen auf hoher Ebene, mit denen Sie Ihren containerisierten Service und alle notwendigen unterstützenden Ressourcen in nur wenigen Codezeilen definieren können.
Das Konstrukt, das wir in diesem Thema verwenden werden, ist ApplicationLoadBalancedFargateService
. Wie Sie wahrscheinlich aus dem Namen erkennen können, stellt dieses Konstrukt einen Amazon ECS-Dienst auf Fargate hinter einem Application Load Balancer bereit. Das aws-ecs-patterns
-Modul enthält auch Konstrukte, die ein Network Load Balancer verwenden und/oder auf Amazon EC2 ausgeführt werden, wenn Sie diese Optionen bevorzugen.
Bevor Sie mit diesem Thema beginnen, richten Sie Ihre AWS CDK-Entwicklungsumgebung ein wie in Erste Schritte mit den AWS CDK-Voraussetzungen beschrieben und installieren Sie dann das AWS CDK durch Ausstellen von:
npm install -g aws-cdk
Bei dieser Anleitung wird davon ausgegangen, dass Sie das AWS CDK v2 verwenden.
Themen
Schritt 1: Einrichten des Projekts AWS CDK
Erstellen Sie ein Verzeichnis für Ihre neue AWS CDK-App und initialisieren Sie das Projekt.
Vergewissern Sie sich, dass Sie das Verzeichnis hello-ecs
wie angezeigt benennen. Die AWS CDK-Anwendungsvorlage verwendet den Namen des Projektverzeichnisses, um Namen für Quelldateien und -klassen zu generieren. Wenn Sie einen anderen Namen verwenden, stimmt Ihre App nicht mit diesen Anweisungen überein.
AWS CDK v2 enthält stabile Konstrukte für alle AWS-Services in einem einzigen Paket, genannt aws-cdk-lib
. Dieses Paket wird als Abhängigkeit installiert, wenn Sie das Projekt initialisieren (oder in einigen Sprachen beim ersten Entwickeln). In diesem Thema verwenden wir ein Konstrukt von Amazon ECS Patterns, das hochrangige Abstraktionen für die Arbeit mit Amazon ECS bietet. Dieses Modul wiederum stützt sich auf Amazon-ECS-Konstrukte und andere, um die für Ihre Amazon-ECS-Anwendung erforderlichen Ressourcen bereitzustellen.
Die Namen, die Sie zum Importieren dieser Bibliotheken in Ihre CDK-Anwendung verwenden, unterscheiden sich geringfügig, je nachdem, welche Programmiersprache Sie verwenden. Als Referenz finden Sie hier die Namen, die in jeder unterstützten CDK-Programmiersprache verwendet werden.
Schritt 2: Verwenden von AWS CDK, um einen containerisierten Webserver auf Fargate zu definieren
Wir werden das amazon-ecs-sample
In dem von Ihnen erstellten AWS CDK-Projekt bearbeiten Sie die Datei, die die Definition des Stapels enthält, so dass sie wie im folgenden Code aussieht. Sie erkennen die Instanziierung des ApplicationLoadBalancedFargateService
-Konstrukts oder zumindest seinen Namen.
Was ist ein Stack? Der Stack ist die Bereitstellungseinheit: Alle Ressourcen müssen sich in einem Stack befinden, und alle Ressourcen in einem Stack werden zusammen bereitgestellt. Wenn eine Ressource nicht bereitgestellt werden kann, werden alle anderen bereits bereitgestellten Ressourcen zurückgesetzt. Eine AWS CDK-App kann mehrere Stacks enthalten und Ressourcen in einem Stack können sich auf Ressourcen in einem anderen beziehen.
Sie können in diesem kurzen Snippet sehen:
-
Der logische Name des Dienstes,
MyWebServer
. -
Das Container-Image, erhalten von DockerHub,
amazon/amazon-ecs-sample
.. -
Die Tatsache, dass der Load Balancer eine öffentliche Adresse hat und somit über das Internet zugänglich sein wird.
Wenn Sie, wie wir hier getan haben, den Amazon ECS-Cluster, die zugrunde liegenden Amazon Virtual Private Cloud- und Amazon-EC2-Instances, eine Auto-Scaling-Gruppe, den Application Load Balancer, die erforderlichen IAM-Rollen und -Richtlinien und andere AWS-Ressourcen auslassen, die für die Bereitstellung des Webservers erforderlich sind, wird AWS CDK auch diese Ressourcen erstellen. Einige automatisch bereitgestellte Ressourcen werden von allen Amazon ECS-Diensten freigegeben, die im Stack definiert sind.
Speichern Sie die Quelldatei, und geben Sie cdk synth
im Hauptverzeichnis der App heraus. AWS CDK führt die App aus und synthetisiert eine AWS CloudFormation-Vorlage aus ihr und zeigt dann die Vorlage an. Die Vorlage ist etwa 600 Zeilen YAML, daher wird hier nur der Anfang angezeigt. (Ihre Vorlage kann Unterschiede zu unserer haben.)
Resources: MyWebServerLB3B5FD3AB: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: LoadBalancerAttributes: - Key: deletion_protection.enabled Value: "false" Scheme: internet-facing SecurityGroups: - Fn::GetAtt: - MyWebServerLBSecurityGroup01B285AA - GroupId Subnets: - Ref: EcsDefaultClusterMnL3mNNYNVpcPublicSubnet1Subnet3C273B99 - Ref: EcsDefaultClusterMnL3mNNYNVpcPublicSubnet2Subnet95FF715A Type: application DependsOn: - EcsDefaultClusterMnL3mNNYNVpcPublicSubnet1DefaultRouteFF4E2178 - EcsDefaultClusterMnL3mNNYNVpcPublicSubnet2DefaultRouteB1375520 Metadata: aws:cdk:path: HelloEcsStack/MyWebServer/LB/Resource MyWebServerLBSecurityGroup01B285AA: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Automatically created Security Group for ELB HelloEcsStackMyWebServerLB06757F57 SecurityGroupIngress: - CidrIp: 0.0.0.0/0 Description: Allow from anyone on port 80 FromPort: 80 IpProtocol: tcp ToPort: 80 VpcId: Ref: EcsDefaultClusterMnL3mNNYNVpc7788A521 Metadata: aws:cdk:path: HelloEcsStack/MyWebServer/LB/SecurityGroup/Resource # and so on for another few hundred lines
Um den Dienst tatsächlich in Ihrem AWS-Konto bereitzustellen, geben Sie cdk deploy
heraus. Sie werden aufgefordert, die IAM-Richtlinien zu genehmigen, die AWS CDK generiert hat.
Die Bereitstellung wird einige Minuten dauern. Sie werden sehen, dass AWS CDK eine ganze Reihe von Ressourcen erstellt. Die letzten Zeilen der Ausgabe der Bereitstellung enthalten den öffentlichen Hostnamen des Load Balancers und eine HTTP-URL für den neuen Webserver.
Outputs: HelloEcsStack.MyWebServerLoadBalancerDNSXXXXXXX = Hello-MyWeb-ZZZZZZZZZZZZZ-ZZZZZZZZZZ.us-west-2.elb.amazonaws.com HelloEcsStack.MyWebServerServiceURLYYYYYYYY = http://Hello-MyWeb-ZZZZZZZZZZZZZ-ZZZZZZZZZZ.us-west-2.elb.amazonaws.com
Schritt 3: Testen des Webservers
Kopieren Sie die URL aus der Bereitstellungsausgabe und fügen Sie sie in Ihren Webbrowser ein. Sie sollten eine Begrüßungsnachricht vom Webserver sehen.

Schritt 4: Bereinigen
Jetzt, da Sie mit dem Webserver fertig sind (er macht nichts außer der Anzeige der Glückwunschmeldung), können Sie den Service mit dem CDK abreißen. Geben Sie cdk destroy
im Hauptverzeichnis Ihrer App heraus. Dies verhindert unbeabsichtigte AWS-Gebühren.
Nächste Schritte
Weitere Informationen über die Entwicklung der AWS-Infrastruktur unter Verwendung von AWS CDK finden Sie im AWS CDK-Entwicklerhandbuch.
Informationen zum Schreiben von AWS CDK-Apps in der Sprache Ihrer Wahl finden Sie unter:
Weitere Informationen über die Module der AWS Construct Library, die in diesem Thema verwendet werden, finden Sie im den Übersichten aus der AWS CDK-API-Referenz unten.