Verwenden des Amazon-ECS-Plattformzweigs - AWS Elastic Beanstalk

Verwenden des Amazon-ECS-Plattformzweigs

Anmerkung
  • Für den Plattformzweig Multi-Container-Docker auf Amazon Linux mit 64 Bit (die Vorgängerversion von Amazon Linux 2) ist am 30. Juni 2022 die Außerbetriebnahme geplant. Weitere Informationen zur Plattform-Support-Richtlinie und zu außer Betrieb genommenen Plattformzweigen finden Sie in der Plattform-Support-Richtlinie.

  • Weitere Informationen zum Migrieren Ihrer Anwendungen, die auf dem Plattformzweig Multi-Container-Docker auf Amazon Linux ausgeführt werden, zum Plattformzweig Amazon ECS auf Amazon Linux 2 finden Sie unter Migration von Multi-Container-Docker auf Amazon Linux zu ECS auf Amazon Linux 2.

Dieses Thema behandelt sowohl den Plattformzweig von Amazon ECS auf Amazon Linux 2 als auch den Plattformzweig, den er ersetzt, Multi-Container-Docker auf AL1 (ebenfalls ECS-verwaltet). Sofern nicht anders angegeben, gelten alle Informationen in diesem Thema für beide Plattformzweige.

ECS-verwaltete Docker-Plattform

Elastic Beanstalk verwendet Amazon Elastic Container Service (Amazon ECS), um Container-Bereitstellungen in ECS-verwalteten Docker-Umgebungen zu koordinieren. Amazon ECS bietet Tools zum Verwalten eines Instance-Clusters mit Docker-Containern. Elastic Beanstalk übernimmt Amazon ECS-Aufgaben wie Clustererstellung, Aufgabendefinition und -ausführung. Alle Instances in der Umgebung werden im gleichen Satz von Containern ausgeführt, die in einer Dockerrun.aws.json-v2-Datei definiert sind. Um Docker bestmöglich zu nutzen, können Sie mit Elastic Beanstalk eine Umgebung erstellen, in der Ihre Amazon EC2-Instances mehrere Docker-Container parallel ausführen.

Das folgende Diagramm zeigt ein Beispiel für eine Elastic Beanstalk-Umgebung, die mit drei Docker-Containern konfiguriert ist, die auf jeder Amazon EC2-Instance in einer Auto Scaling-Gruppe ausgeführt werden:

Anmerkung

Elastic Beanstalk bietet Erweiterbarkeits-Funktionen für alle seine Plattformen, mit denen Sie die Bereitstellung und Ausführung Ihrer Anwendungen anpassen können. Für den Plattformzweig ECS auf Amazon Linux 2 unterscheidet sich die Implementierung dieser Funktionen im Instance-Bereitstellungs-Workflow von den anderen Plattformen. Weitere Informationen finden Sie unter Workflow zur Instance-Bereitstellung für ECS auf Amazon Linux 2.

Dockerrun.aws.json file

Container-Instances – Amazon-EC2-Instances, die ECS-verwaltete Docker in einer Elastic-Beanstalk-Umgebung ausführen – benötigen eine Konfigurationsdatei mit dem Namen Dockerrun.aws.json. Diese Datei gilt nur für Elastic Beanstalk und kann eigenständig oder in Kombination mit Quellcode und Inhalten in einem Quell-Bundle verwendet werden,um eine Umgebung auf einer Docker-Plattform zu erstellen.

Anmerkung

Version 1 des Dockerrun.aws.json-Formats wird verwendet, um einen einzelnen Docker-Container in einer Elastic-Beanstalk-Umgebung zu launchen, die auf Amazon Linux AMI (die Vorgängerversion von Amazon Linux 2) ausgeführt wird. Die Umgebung basiert auf dem Plattformzweig Docker auf Amazon Linux mit 64 Bit, der am 30. Juni 2022 außer Betrieb genommen wird. Weitere Informationen über das Dockerrun.aws.json-v1-Format erhalten Sie unter Konfiguration der Docker-Plattform ohne Docker Compose.

Version 2 von Dockerrun.aws.json fügt Support für mehrere Container pro Amazon-EC2-Instance hinzu und kann nur mit der ECS-verwalteten Docker-Plattform verwendet werden. Das Format unterscheidet sich deutlich von der früheren Version.

Detaillierte Informationen zum aktualisierten Format und eine Beispieldatei finden Sie unter Dockerrun.aws.json v2.

Docker-Images

Die ECS-verwaltete Docker-Plattform für Elastic Beanstalk erfordert, dass Images vorerstellt und in einem öffentlichen oder privaten Online-Image-Repository gespeichert werden.

Anmerkung

Das Erstellen benutzerdefinierter Images während der Bereitstellung mit einer Dockerfile wird von der ECS-verwalteten Docker-Plattform auf Elastic Beanstalk nicht unterstützt. Erstellen Sie Ihre Images und stellen Sie sie in einem Online-Repository bereit, bevor Sie eine Elastic Beanstalk-Umgebung erstellen.

Geben Sie Images nach Namen in Dockerrun.aws.json v2 an. Beachten Sie diese Konventionen:

  • Abbilder in offiziellen Repositorys in Docker Hub verwenden einen einzelnen Namen (z. B. ubuntu oder mongo).

  • Images in anderen Repositorys in Docker Hub sind mit einem Organisationsnamen qualifiziert (z. B, amazon/amazon-ecs-agent).

  • Images in anderen Online-Verzeichnissen sind durch einen Domänennamen zusätzlich qualifiziert (z. B, quay.io/assemblyline/ubuntu).

Zum Konfigurieren von Elastic Beanstalk für die Authentifizierung an ein privates Repository fügen Sie den authentication-Parameter in die Dockerrun.aws.json-v2-Datei ein.

Rolle für Container-Instances

Elastic Beanstalk verwendet ein Amazon ECS-optimiertes AMI mit einem Amazon ECS-Container-Agenten, der in einem Docker-Container ausgeführt wird. Der Agent kommuniziert mit Amazon ECS zum Koordinieren von Container-Bereitstellungen. Für die Kommunikation mit Amazon ECS muss jede Amazon EC2-Instance über entsprechende Berechtigungen in IAM verfügen. Diese Berechtigungen werden an das standardmäßige Instance-Profil angefügt, wenn Sie eine Umgebung in der Elastic-Beanstalk-Konsole erstellen:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECSAccess", "Effect": "Allow", "Action": [ "ecs:Poll", "ecs:StartTask", "ecs:StopTask", "ecs:DiscoverPollEndpoint", "ecs:StartTelemetrySession", "ecs:RegisterContainerInstance", "ecs:DeregisterContainerInstance", "ecs:DescribeContainerInstances", "ecs:Submit*" ], "Resource": "*" } ] }

Wenn Sie Ihr eigenes Instance-Profil erstellt haben, können Sie die verwaltete AWSElasticBeanstalkMulticontainerDocker-Richtlinie anfügen, um sicherzustellen, dass die Berechtigungen immer auf dem neuesten Stand sind. Anweisungen zum Erstellen von Richtlinien und Rollen in IAM; finden Sie unter Erstellen von IAM-Rollen im IAM-Benutzerhandbuch.

Von Elastic Beanstalk erstellte Amazon ECS-Ressourcen

Wenn Sie eine Umgebung mit der ECS-verwalteten Docker-Plattform erstellen, erstellt und konfiguriert Elastic Beanstalk automatisch verschiedene Ressourcen von Amazon Elastic Container Service beim Entwickeln der Umgebung. Dabei werden die erforderlichen Container auf jeder Amazon-EC2-Instance erstellt.

  • Amazon ECS-Cluster – Container-Instances in Amazon ECS sind in Cluster organisiert. Bei Verwendung mit Elastic Beanstalk wird ein Cluster immer für jede ECS-verwaltete Docker-Umgebung erstellt.

  • Amazon-ECS-Aufgabendefinition – Elastic Beanstalk nutzt Dockerrun.aws.json v2 in Ihrem Projekt zum Generieren der Amazon-ECS-Aufgabendefinition, die für die Konfiguration der Container-Instances in der Umgebung verwendet wird.

  • Amazon ECS-Aufgabe – Elastic Beanstalk kommuniziert mit Amazon ECS über die Ausführung einer Aufgabe auf allen Instances in der Umgebung zum Koordinieren der Container-Bereitstellung. In einer skalierbaren Umgebung initiiert Elastic Beanstalk eine neue Aufgabe, wenn eine Instance zum Cluster hinzugefügt wird. In seltenen Fällen müssen Sie möglicherweise die Größe des für Container und Images vorgesehenen Platzes erhöhen. Erfahren Sie mehr im Konfigurieren von Docker-Umgebungen-Abschnitt.

  • Amazon ECS Container-Agent – Der Agent wird in einem Docker-Container auf den Instances in Ihrer Umgebung ausgeführt. Der Agent ruft den Amazon ECS Service ab und wartet, bis eine Aufgabe ausgeführt wird.

  • Amazon-ECS-Daten-Volumes – Elastic Beanstalk fügt Volume-Definitionen (zusätzlich zu den Volumes, die Sie in Dockerrun.aws.json v2 definieren) zu den Aufgabendefinitionen hinzu, um die Protokollerfassung zu erleichtern.

    Elastic Beanstalk erstellt Protokoll-Volumes auf der Container-Instance, eines für jeden Container, unter /var/log/containers/containername. Diese Volumes haben den Namen awseb-logs-containername und werden für Container für das Mounting bereitgestellt. Details zum Mounting finden Sie unter Format der Containerdefinition.

Verwenden mehrerer Elastic Load Balancing-Listener

Sie können mehrere Listener für Elastic Load Balancing auf einer von ECS-verwalteten Docker-Umgebung konfigurieren, um eingehenden Datenverkehr für Proxys oder andere Services zu unterstützen, die nicht auf dem Standard-HTTP-Port ausgeführt werden.

Erstellen Sie einen .ebextensions-Ordner in Ihrem Quell-Bundle und fügen Sie eine Datei mit einer .config-Dateierweiterung hinzu. Das folgende Beispiel zeigt eine Konfigurationsdatei, die einen Elastic Load Balancing-Listener auf Port 8080 erstellt.

.ebextensions/elb-listener.config

option_settings: aws:elb:listener:8080: ListenerProtocol: HTTP InstanceProtocol: HTTP InstancePort: 8080

Wenn Ihre Umgebung in einer von Ihnen erstellten benutzerdefinierten Amazon Virtual Private Cloud (Amazon VPC) läuft, kümmert sich Elastic Beanstalk um den Rest. In einer Standard-VPC müssen Sie die Sicherheitsgruppe Ihrer Instance so konfigurieren, dass Sie eingehenden Datenverkehr vom Load Balancer erlaubt. Fügen Sie eine zweite Konfigurationsdatei hinzu, die eine Ingress-Regel zur Sicherheitsgruppe hinzufügt:

.ebextensions/elb-ingress.config

Resources: port8080SecurityGroupIngress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]} IpProtocol: tcp ToPort: 8080 FromPort: 8080 SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }

Weitere Informationen zum Konfigurationsdateiformat finden Sie unter Hinzufügen und Anpassen von Elastic Beanstalk-Umgebungsressourcen und Optionseinstellungen.

Zusätzlich zum Hinzufügen eines Listeners zur Konfiguration von Elastic Load Balancing und dem Öffnen eines Port in der Sicherheitsgruppe müssen Sie den Port auf der Host-Instance einem Port auf dem Docker-Container im containerDefinitions-Abschnitt der Dockerrun.aws.json-v2-Datei zuordnen. Der folgende Auszug zeigt ein Beispiel:

"portMappings": [ { "hostPort": 8080, "containerPort": 8080 } ]

Weitere Informationen zum Dockerrun.aws.json v2-v2-Dateiformat finden Sie unter Dockerrun.aws.json.

Fehlgeschlagene Container-Bereitstellungen

Wenn eine Amazon ECS-Aufgabe fehlschlägt, werden ein oder mehrere Container in Ihrer Elastic Beanstalk-Umgebung nicht gestartet. Elastic Beanstalk setzt Multi-Container-Umgebungen aufgrund einer fehlgeschlagenen Amazon-ECS-Aufgabe nicht zurück. Wenn ein Container in der Umgebung nicht startet, stellen Sie die aktuelle Version oder eine frühere funktionierende Version mit der Elastic Beanstalk-Konsole erneut bereit.

So stellen Sie eine vorhandene Version bereit

  1. Öffnen Sie die Elastic Beanstalk-Konsole in der Region Ihrer Umgebung.

  2. Klicken Sie auf Actions (Aktionen) rechts neben Ihrem Anwendungsnamen und klicken Sie dann auf Anwendungsversionen anzeigen.

  3. Wählen Sie eine Version Ihrer Anwendung und klicken Sie auf Deploy (Bereitstellen).