Erste Schritte mit Amazon ECS mit AWS CDK - Amazon Elastic Container Service

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.

Erste Schritte mit Amazon ECS mit AWS CDK

AWS Cloud Development Kit (AWS CDK) ist ein Infrastructure as Code (IAC)-Framework, mit dem Sie AWS–Cloud-Infrastruktur mit einer von Ihnen gewählten Programmiersprache definieren können. Um Ihre eigene Cloud-Infrastruktur zu definieren, schreiben Sie zunächst eine App (in einer der unterstützten Sprachen des CDK), die einen oder mehrere Stacks enthält. Dann synthetisieren Sie es zu einem AWS CloudFormation und stellen Sie Ihre Ressourcen in Ihr AWS-Konto. Folgen Sie in diesem Thema diesen Schritte, um einen containerisierten Webserver mit Amazon Elastic Container Service (Amazon ECS) und dem AWS CDK auf Fargate bereitstellen.

Die AWS-Construct Library, die im CDK enthalten ist, stellt Module bereit, mit denen Sie die von AWS-Services bereitgestellten Ressourcen modellieren können. Für die gängigen Dienste stellt die Bibliothek kuratierte Konstrukte bereit, die intelligente Standards und bewährte Methoden bereitstellen. Eines dieser Module, insbesondere 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.

In diesem Thema wird das Konstrukt ApplicationLoadBalancedFargateService verwendet. Dieses Konstrukt stellt einen Amazon-ECS-Service auf Fargate hinter einem Application Load Balancer bereit. Das aws-ecs-patterns-Modul enthält auch Konstrukte, die ein Network Load Balancer verwenden und auf Amazon EC2 ausgeführt werden.

Bevor Sie mit dieser Aufgabe beginnen, richten SieAWS CDK-Entwicklungsumgebung ein, und installieren Sie AWS CDK, indem Sie den folgenden Befehl ausführen. Anleitungen zum Einrichten der AWS CDK-Entwicklungsumgebung finden Sie unterErste Schritte mitAWS CDK - Voraussetzungen.

npm install -g aws-cdk
Anmerkung

Bei dieser Anleitung wird davon ausgegangen, dass Sie das AWS CDK v2 verwenden.

Schritt 1: Einrichten des Projekts AWS CDK

Erstellen Sie ein Verzeichnis für Ihre neue AWS CDK-App und initialisieren Sie das Projekt.

TypeScript
mkdir hello-ecs cd hello-ecs cdk init --language typescript
JavaScript
mkdir hello-ecs cd hello-ecs cdk init --language javascript
Python
mkdir hello-ecs cd hello-ecs cdk init --language python

Nachdem das Projekt gestartet wurde, aktivieren Sie die virtuelle Umgebung des Projekts und installieren Sie die Baseline-Abhängigkeiten von AWS CDK.

source .venv/bin/activate python -m pip install -r requirements.txt
Java
mkdir hello-ecs cd hello-ecs cdk init --language java

Importieren Sie dieses Maven-Projekt in Ihre Java-IDE. Verwenden Sie in Eclipse beispielsweise Datei >Import >Maven >Vorhandene Maven-Projekte.

C#
mkdir hello-ecs cd hello-ecs cdk init --language csharp
Anmerkung

Die AWS CDK-Anwendungsvorlage verwendet den Namen des Projektverzeichnisses, um Namen für Quelldateien und -klassen zu generieren. In diesem Beispiel trägt das Verzeichnis den Namen hello-ecs. Wenn Sie einen anderen Projektverzeichnisnamen 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. Wenn Sie mit bestimmten Programmiersprachen arbeiten, wird das Paket installiert, wenn Sie das Projekt zum ersten Mal erstellen. Dieses Thema behandelt, wie wir ein Konstrukt von Amazon ECS Patterns, das hochrangige Abstraktionen für die Arbeit mit Amazon ECS bietet, verwenden. Dieses Modul stützt sich auf Amazon-ECS-Konstrukte und andere Konstrukte, 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 möglicherweise geringfügig, je nachdem welche Programmiersprache Sie verwenden. Als Referenz finden Sie nachfolgend die Namen, die in jeder unterstützten CDK-Programmiersprache verwendet werden.

TypeScript
aws-cdk-lib/aws-ecs aws-cdk-lib/aws-ecs-patterns
JavaScript
aws-cdk-lib/aws-ecs aws-cdk-lib/aws-ecs-patterns
Python
aws_cdk.aws_ecs aws_cdk.aws_ecs_patterns
Java
software.amazon.awscdk.services.ecs software.amazon.awscdk.services.ecs.patterns
C#
Amazon.CDK.AWS.ECS Amazon.CDK.AWS.ECS.Patterns

Schritt 2: Verwendung von AWS CDK, um einen containerisierten Webserver auf Fargate zu definieren

Verwenden Sie das Container-Image amazon-ecs-sample von DockerHub. Dieses Image enthält eine PHP Web-App, die unter Amazon Linux 2 läuft.

In dem AWS CDK-Projekt, das Sie erstellt haben, bearbeiten Sie die Datei, die die Stack-Definition enthält, so, dass sie einem der folgenden Beispiele ähnelt.

Anmerkung

Ein Stack ist eine Einheit der Bereitstellung. Alle Ressourcen müssen sich in einem Stack befinden, und alle Ressourcen, die sich in einem Stack befinden, werden gleichzeitig bereitgestellt. Wenn eine Ressource nicht bereitgestellt werden kann, werden alle anderen, die bereits bereitgestellt wurden, zurückgesetzt. Eine AWS CDK-App kann mehrere Stacks enthalten und Ressourcen in einem Stack können sich auf Ressourcen in einem anderen Stack beziehen.

TypeScript

Aktualisieren Sie lib/hello-ecs-stack.ts, so dass es Folgendem entspricht.

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as ecs from 'aws-cdk-lib/aws-ecs'; import * as ecsp from 'aws-cdk-lib/aws-ecs-patterns'; export class HelloEcsStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new ecsp.ApplicationLoadBalancedFargateService(this, 'MyWebServer', { taskImageOptions: { image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'), }, publicLoadBalancer: true }); } }
JavaScript

Aktualisieren Sie lib/hello-ecs-stack.js, so dass es Folgendem entspricht.

const cdk = require('aws-cdk-lib'); const { Construct } = require('constructs'); const ecs = require('aws-cdk-lib/aws-ecs'); const ecsp = require('aws-cdk-lib/aws-ecs-patterns'); class HelloEcsStack extends cdk.Stack { constructor(scope = Construct, id = string, props = cdk.StackProps) { super(scope, id, props); new ecsp.ApplicationLoadBalancedFargateService(this, 'MyWebServer', { taskImageOptions: { image: ecs.ContainerImage.fromRegistry('amazon/amazon-ecs-sample'), }, publicLoadBalancer: true }); } } module.exports = { HelloEcsStack }
Python

Aktualisieren Sie hello-ecs/hello_ecs_stack.py, so dass es Folgendem entspricht.

import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_ecs as ecs import aws_cdk.aws_ecs_patterns as ecsp class HelloEcsStack(cdk.Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) ecsp.ApplicationLoadBalancedFargateService(self, "MyWebServer", task_image_options=ecsp.ApplicationLoadBalancedTaskImageOptions( image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample")), public_load_balancer=True )
Java

Aktualisieren Sie src/main/java/com.myorg/HelloEcsStack.java, so dass es Folgendem entspricht.

package com.myorg; import software.constructs.Construct; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.amazon.awscdk.services.ecs.ContainerImage; import software.amazon.awscdk.services.ecs.patterns.ApplicationLoadBalancedFargateService; import software.amazon.awscdk.services.ecs.patterns.ApplicationLoadBalancedTaskImageOptions; public class HelloEcsStack extends Stack { public HelloEcsStack(final Construct scope, final String id) { this(scope, id, null); } public HelloEcsStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); ApplicationLoadBalancedFargateService.Builder.create(this, "MyWebServer") .taskImageOptions(ApplicationLoadBalancedTaskImageOptions.builder() .image(ContainerImage.fromRegistry("amazon/amazon-ecs-sample")) .build()) .publicLoadBalancer(true) .build(); } }
C#

Aktualisieren Sie src/HelloEcs/HelloEcsStack.cs, so dass es Folgendem entspricht.

using Amazon.CDK; using Constructs; using Amazon.CDK.AWS.ECS; using Amazon.CDK.AWS.ECS.Patterns; namespace HelloEcs { public class HelloEcsStack : Stack { internal HelloEcsStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { new ApplicationLoadBalancedFargateService(this, "MyWebServer", new ApplicationLoadBalancedFargateServiceProps { TaskImageOptions = new ApplicationLoadBalancedTaskImageOptions { Image = ContainerImage.FromRegistry("amazon/amazon-ecs-sample") }, PublicLoadBalancer = true }); } } }

Das vorangegangene kurze Snippet beinhaltet Folgendes:

  • Der logische Name des Dienstes: MyWebServer.

  • Das Container-Image, das von abgerufen wurde DockerHub: amazon/amazon-ecs-sample.

  • Andere relevante Informationen, wie die Tatsache, dass der Load Balancer eine öffentliche Adresse hat und über das Internet zugänglich ist.

AWS CDK erstellt alle Ressourcen, die für die Bereitstellung des Webservers erforderlich sind, einschließlich der folgenden Ressourcen. Diese Ressourcen wurden in diesem Beispiel weggelassen.

  • Amazon-ECS-Cluster

  • Amazon VPC- und Amazon EC2-Instances

  • Auto Scaling-Gruppe

  • Application Load Balancer

  • IAM-Rollen und -Richtlinien

Einige automatisch bereitgestellte Ressourcen werden von allen Amazon-ECS-Diensten, die im Stack definiert sind, geteilt.

Speichern Sie die Quelldatei, und führen Sie dann das Kommando cdk synth im Hauptverzeichnis Ihrer App aus. AWS CDK führt die App aus, synthetisiert eine AWS CloudFormation-Vorlage aus ihr und zeigt dann die Vorlage an. Die Vorlage ist eine etwa 600-zeilige YAML-Datei. Der Anfang der Datei wird hier gezeigt. Ihre Vorlage kann sich von diesem Beispiel unterscheiden.

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 in Ihrem AWS-Konto durchzuführen, führen Sie das Kommando cdk deploy im Hauptverzeichnis Ihrer Anwendung aus. Sie werden aufgefordert, die von AWS CDK generieren IAM-Richtlinien zu genehmigen.

Die Bereitstellung dauert mehrere Minuten, in denen AWS CDK mehrere Ressourcen erstellt. Die letzten Zeilen der Ausgabe der Bereitstellung enthalten den öffentlichen Hostnamen des Load Balancers und Ihre URL für den neuen Webserver. Diese sind Folgende:

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: Test des Webservers

Kopieren Sie die URL aus der Bereitstellungsausgabe und fügen Sie diese in Ihren Webbrowser ein. Die folgende Willkommensnachricht vom Webserver wird angezeigt.


                Screenshot der Amazon ECS-Beispielanwendung. Die Ausgabe zeigt an, dass „Ihre Anwendung jetzt auf Amazon ECS ausgeführt wird“.

Schritt 4: Bereinigen

Wenn Sie mit dem Webserver fertig sind, beenden Sie den Dienst mit dem CDK, indem Sie das Kommando cdk destroy im Hauptverzeichnis Ihrer Anwendung ausführen. Auf diese Weise wird verhindert, dass Ihnen zukünftig unbeabsichtigte Gebühren anfallen.

Nächste Schritte

Weitere Informationen zur 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 nachfolgend:

TypeScript

Arbeiten mit der AWS CDK in TypeScript

JavaScript

Arbeiten mit der AWS CDK in JavaScript

Python

Arbeiten mit AWS CDK in Python

Java

Arbeiten mit AWS CDK in Java

C#

Arbeiten mit AWS CDK in C#

Weitere Informationen über die Module der AWS Construct Library, die in diesem Thema verwendet werden, finden Sie in den folgenden Übersichten aus der AWS CDK-API-Referenz.