Wie man

AWS ECS Bereitstellen von Containern mithilfe von Aufgaben- und Servicedefinitionen

AWS ECS Bereitstellen von Containern mithilfe von Aufgaben- und Servicedefinitionen

Dieser Artikel ist Teil 3 eines vierteiligen Leitfadens zum Ausführen von Docker-Containern auf AWS ECS. ECS steht für Elastic Container Service. Es ist ein verwalteter Containerdienst, der Docker-Container ausführen kann run. AWS bietet zwar auch Container-Management mit Kubernetes (EKS) an, hat aber auch seine proprietäre Lösung (ECS).

Der Leitfaden behandelt:

Hier Teil 1 und 2:

Ausführen von Docker-Containern auf AWS mit ECS – Teil 1

Ausführen von Docker-Containern auf AWS ECS – Hochladen von Docker-Images in ECR – Teil 2

Teil 3 dieses Handbuchs behandelt „Bereitstellen von Containern im Cluster mithilfe von Aufgaben- und Dienstdefinitionen“.

Für diese Demonstration verwenden wir das einfache Hello-World-Image, das wir von Docker Hub in unsere ECR-Registrierung gepusht haben. Wir erstellen eine Aufgaben- und Servicedefinition und stellen diese im ECS-Cluster bereit.

Voraussetzungen/Voraussetzungen

Erstellen Sie den AWS Application Load Balancer und die Zielgruppe

Der ALB (Application Load Balancer) ist ein von AWS verwalteter Load Balancer, der Datenverkehr basierend auf OSI-Schicht-7-Protokollen weiterleitet. Wir werden den Load Balancer verwenden, um unseren hello-world-Dienstendpunkt bereitzustellen expose. Wir haben bereits einen AWS-Leitfaden zum Erstellen eines Application Load Balancer unter dem folgenden Link:

Daher werde ich nicht zu sehr auf die ALB eingehen. Wir verwenden die folgende CloudFormation-Vorlage, um unser ECS ALB A zu erstellen und zu konfigurieren. Die Vorlage wird bereitgestellt;

Hinweis: Wenn der Leser/Benutzer seine Dienste intern bereitstellen möchte, sollte er den Load Balancer in den privaten Subnetzen erstellen create. Andernfalls sollte der Load Balancer mit dem Internet verbunden sein und in den öffentlichen Subnetzen erstellt werden. Für einen hochverfügbaren Load Balancer sollte der Benutzer ihn in verschiedenen Subnetzen in verschiedenen Verfügbarkeitszonen bereitstellen.

AWSTemplateFormatVersion: "2010-09-09" Beschreibung: "ALB, Zielgruppen und ALB-Sicherheitsgruppe erstellen" Parameter: VPC: Typ: String Beschreibung: Der vpc zum Starten des Dienstes Standard: vpc-ID PublicSubnet1: Typ: String Beschreibung: The Subnetz, wo der Dienst gestartet werden soll Standard: Subnetz-ID PublicSubnet2: Typ: String Beschreibung: das Subnetz, in dem der Dienst gestartet werden soll Standard: Subnetz-ID Ressourcen: ALBSecurityGroup: Typ: "AWS::EC2::SecurityGroup" Eigenschaften: GroupDescription: Sicherheitsgruppe für ALB" GroupName: "test-prod-ALB-SG" Tags: - Schlüssel: "Projekt" Wert: "test-blog" - Schlüssel: "createdBy" Wert: "Maureen Barasa" - Schlüssel: "Umgebung" Wert : "test" - Schlüssel: "Name" Wert: "test-ALB-SG" VpcId: !Ref VPC SecurityGroupIngress: - CidrIp: "0.0.0.0/0" FromPort: 80 IpProtocol: "tcp" ToPort: 80 - CidrIp: "0.0.0.0/0" FromPort: 443 IpProtocol: "tcp" ToPort: 443 ApplicationLoadBalancer: Typ: "AWS::ElasticLoadBalancingV2::LoadBalancer" Eigenschaften: Name: "test-Application-Load-Balancer" Schema: "internet-facing" Typ: "Anwendung"-Subnetze: - !Ref PublicSubnet1 - !Ref PublicSubnet2 SecurityGroups: - !Ref ALBSecurityGroup IpAddressType: "ipv4" LoadBalancerAttributes: - Schlüssel: "access_logs.s3.aktiviert" Wert: "true" - Schlüssel: "idle_timeout.timeout_seconds" Wert: "60" - Schlüssel: "deletion_protection.aktiviert" Wert: "false" - Schlüssel: "routing.http2.enabled" Wert: "true" - Schlüssel: "routing.http.drop_invalid_header_fields.enabled" Wert: "false" Tags: - Schlüssel: "Projekt" Wert: "test-blog" - Schlüssel: "createdBy" Wert: "Maureen Barasa" - Schlüssel: "Umgebung" Wert: "test" - Schlüssel: "Name " Wert: "test-Application-Load-Balancer" HTTPSlistener: Typ: "AWS::ElasticLoadBalancingV2::Listener" Eigenschaften: LoadBalancerArn: !Ref ApplicationLoadBalancer Port: 443 Protokoll: "HTTPS" SslPolicy: "ELBSecurityPolicy-2016-08" Zertifikate: - CertificateArn: arn:aws:acm:eu-central-1:*************: Zertifikat/************ DefaultActions: - Auftrag: 1 TargetGroupArn: !Ref TestTargetGroup Typ: "forward" HTTPListener: Typ: "AWS::ElasticLoadBalancingV2::Listener" Eigenschaften: LoadBalancerArn: !Ref ApplicationLoadBalancer Port: 80 Protocol: "HTTP" DefaultActions: - Order: 1 RedirectConfig: Protocol: "HTTPS" Port: "443" Host: "#host" Path: "/#path" Query: "# query" StatusCode: "HTTP_301" Typ: "redirect" TestTargetGroup: Typ: "AWS::ElasticLoadBalancingV2::TargetGroup" Properties: HealthCheckIntervalSeconds: 30 HealthCheckPath: "/" Port: 80 Protocol: "HTTP" HealthCheckPort: "traffic-port " HealthCheckProtocol: "HTTP" HealthCheckTimeoutSeconds: 5 UnhealthyThresholdCount: 2 TargetType: "ip" Matcher: HttpCode: "200" HealthyThresholdCount: 5 VpcId: !VPC-Referenzname: "target-group-1" HealthCheckEnabled: true TargetGroupAttributes: - Schlüssel: "stickiness.enabled" Wert: "false" - Schlüssel: "deregistration_delay.timeout_seconds" Wert: "300" - Schlüssel: "klebrigkeit.type" Wert: "lb_cookie" - Schlüssel: "stickiness.lb_cookie.Dauer_Sekunden" Wert: "86400" - Schlüssel: "slow_start.Dauer_Sekunden" Wert: "0" - Schlüssel: "load_balancing.Algorithmus.type" Wert: "round_robin" TestListenerRule1: Typ: "AWS::ElasticLoadBalancingV2::ListenerRule" Eigenschaften: Priorität: "1" ListenerArn: !Ref HTTPSListener Bedingungen: - Feld: "host-header" Werte: - "test1.Hallo Welt.com" Aktionen: - Typ: "weiter" TargetGroupArn: !Ref TestTargetGroup Order: 1 ForwardConfig: TargetGroups: - TargetGroupArn: !Ref TestTargetGroup Weight: 1 TargetGroupStickinessConfig: Enabled: false Ausgaben: ALB: Beschreibung: Der erstellte Loadbalancer-Wert: !Ref ApplicationLoadBalancer TargetGroup: Beschreibung: Der erstellte TargetGroup-Wert: !Ref TestTargetGroup LoadBalancerSecurityGroup: Beschreibung: die Sicherheitsgruppe für den ALB-Wert: !Ref ALBSecurityGroup

Stellen Sie sicher, dass unter HTTPS-Listener das Zertifikat durch Ihren generierten Zertifikat-ARN ersetzt wird. Außerdem sollten wir gemäß der Listener-Regel den Host-Header durch einen Datensatz ersetzen, der vom Benutzer in der gehosteten Zone von Route 53 erstellt wurde.

Die Tags und Namen der Ressourcen sollten ebenfalls an die Anforderungen des Benutzers angepasst werden.

ECS-Aufgaben- und Dienstdefinition

Eine ECS-Aufgabendefinition definiert die Anforderungen an Ihren Docker-Container. Es definiert das zu verwendende Image, die CPU- und Speicheranforderungen e.t.c.

Eine ECS-Dienstdefinition definiert, wie die Anwendung/der Dienst ausgeführt wird. Es definiert den Starttyp, den Cluster, in dem der Dienst ausgeführt wird, die Zielgruppe für die ALB, die zu verwendende Aufgabendefinition e.t.c.

Erstellen der ECS-Aufgabenausführungsrolle

Hinweis: Die Aufgabenausführungsrolle ist normalerweise bereits auf AWS-Konten erstellt. Man kann danach suchen als ecsTaskExecutionRole. Falls in Ihrem Konto noch keine erstellt wurde, verwenden Sie die folgende CloudFormation-Vorlage, um eine zu erstellen.

AWSTemplateFormatVersion: "2010-09-09" Beschreibung: "Vorlage zum Erstellen der ECS-Aufgabenausführungsrolle" Ressourcen: ECSTaskExecutionRole: Typ: 'AWS::IAM::Role' Eigenschaften: Beschreibung: Die ECS-Aufgabenausführungsrolle RoleName: AWSECSTaskExecutionRole AssumeRolePolicyDocument: Version : 2012-10-17 Statement: - Effekt: Allow Principal: Service: - ecs-tasks.Amazonaws.com Aktion: - 'sts:AssumeRole' ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy Tags: - Schlüssel: "Projekt" Wert: "test-blog" - Schlüssel: "Umgebung" Wert : "test" - Schlüssel: "createdBy" Wert: "Maureen Barasa" - Schlüssel: "Name" Wert: "AWSECSTaskExecutionRole" Ausgaben: IAMRole: Beschreibung: die erstellte Rolle Wert: !Ref ECSTaskExecutionRole Export: Name: !Sub "$AWS::StackName-Rollenname"

Erstellen Sie die ECS-Aufgaben- und -Dienstdefinition

Verwenden Sie die folgenden Vorlagen, um die Aufgaben- und Servicedefinition zu erstellen.

Hinweis: Die Vorlage erstellt eine Aufgaben- und Dienstdefinition für einen Fargate-Cluster. Verwenden Sie außerdem für die Aufgabenrolle und die Aufgabenausführungsrolle arn den arn für die oben erstellte Rolle, oder verwenden Sie, falls vorhanden, den arn für die ecsTaskExecutionRole.

Um Aufgaben- und Servicedefinitionen für EC2-Cluster zu erstellen, ersetzen Sie LaunchType in Service Definition durch EC2. In der Aufgabendefinition kann EC2 mit jedem Netzwerkmodus arbeiten; awsvpc, Bridge oder Host. Fargate funktioniert nur mit dem awsvpc-Modus.

AWSTemplateFormatVersion: "2010-09-09" Beschreibung: "hello-world Aufgaben- und Servicedefinition" Parameter: VPC: Typ: Zeichenfolge Beschreibung: Der vpc zum Starten des Dienstes Standard: vpc-ID Subnet1: Typ: String Beschreibung: Das Subnetz, in dem um den Service zu starten Standard: subnet-ID Subnet2: Typ: String Beschreibung: Das Subnetz, in dem der Service gestartet werden soll Standard: subnet-ID Ressourcen: CWLoggroup: Typ: AWS::Logs::LogGroup Properties: LogGroupName: ecs-hello-world -Loggroup TaskDefinition: Typ: "AWS::ECS::TaskDefinition" Eigenschaften: ContainerDefinitions: - Essential: true Image: 429758582529.dkr.ecr.eu-zentral-1.Amazonaws.com/hello-world:latest LogConfiguration: LogDriver: "awslogs" Optionen: awslogs-group: !Ref CWLoggroup AWSlogs-Region: !Ref AWS::Region awslogs-stream-prefix: "ecs" Name: "Hello_World" PortMappings: - ContainerPort: 80 HostPort: 80 Protocol: "tcp" Family: "Hello_World" TaskRoleArn: arn:aws:iam::429758582529:role /AWSECSTaskExecutionRole ExecutionRoleArn: arn:aws:iam::429758582529:role/AWSECSTaskExecutionRole NetworkMode: "awsvpc" ErfordertKompatibilitäten: - "FARGATE" CPU: "256" Speicher: "512" ServiceDefinition: Typ: "AWS:": Eigenschaften: ServiceName: "hello-world" Cluster: "arn:aws:ecs:eu-central-1:429758582529:cluster/eu-central-1-test-ECS-Fargate-Cluster" LoadBalancer: - TargetGroupArn: "arn: aws:elasticloadbalancing:eu-central-1:************:targetgroup/test-fargate-hello/*********" ContainerName: "Hello_World" ContainerPort: 80 DesiredCount : 1 LaunchType: "FARGATE" PlatformVersion: "1.4.0" Aufgabendefinition: !Ref TaskDefinition DeploymentConfiguration: MaximumPercent: 200 MinimumHealthyPercent: 100 NetworkConfiguration: AwsvpcConfiguration: AssignPublicIp: "ENABLED" SecurityGroups: - "sg-ID" Subnets: - !Ref Subnetz1 - !Ref Subnet2 HealthCheckGracePeriodSeconds: 300 SchedulingStrategy: "REPLICA" Ausgaben: HelloTaskDefinition: Beschreibung: Der erstellte Name der ECS TaskDefinition Value: !Ref TaskDefinition HelloService: Beschreibung: Der ECS-Dienst Wert: !Referenzservice

N/B: Die CloudFormation-Vorlage sollte an die Anforderungen des Benutzers angepasst werden. Wir können anpassen:

Wenn Sie fertig sind, sollte der Dienst wie unten beschrieben auf Ihrem ECS-Cluster ausgeführt werden.

ECS-Cluster mit ausgeführtem Task und Dienst

Sie können jetzt über den von Ihnen erstellten Domainnamen auf Ihren Dienst zugreifen.

Wichtige Links

Andere AWS-Leitfäden:

Glückliches Bauen!!!

So löschen Sie PageFile.sys beim Herunterfahren in Windows 10
Seitendatei.sys ist eher ein zusätzlicher RAM, der von Windows für virtuellen Speicher verwendet wird. Es ist im Grunde bekannt, die Geschwindigkeit u...
Die Start-Stopp-Option des DNS-Client-Dienstes ist im Service-Manager-Fix ausgegraut
Der DNS-Client-Dienst ist einer der wichtigsten Dienste für den Zugriff auf das Internet auf Ihrem Windows-System. Der Dienst speichert die Anfragen d...
So blenden Sie die Taskleiste in Windows 10 aus
Die Taskleiste ist sehr nützlich und wir alle sind es gewohnt, sie immer am unteren Rand unserer Windows-Bildschirme zu haben. Aber wenn Sie zu den Be...