Überlegungen zur Fargate-Aufgabendefinition - Amazon ECS

Überlegungen zur Fargate-Aufgabendefinition

Aufgaben, die den Fargate-Starttyp verwenden, unterstützen nicht alle verfügbaren Amazon-ECS-Aufgabendefinitionsparameter. Einige Parameter werden generell nicht unterstützt, bei anderen weicht deren Verhalten für Fargate-Aufgaben ab.

Die folgenden Aufgabendefinitionsparameter sind in Fargate-Aufgaben nicht gültig:

  • devices

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • dockerVolumeConfiguration

  • extraHosts

  • host

  • hostname

  • links

  • placementConstraints – Standardmäßig werden Fargate-Aufgaben über mehrere Availability Zones verteilt.

  • privileged

  • sharedMemorySize

  • tmpfs

Wichtig

Wenn einer der Parameter der Aufgabendefinition nicht unterstützt wird, werden wahrscheinlich auch keine Unterkennzeichen für diesen Parameter unterstützt.

Die folgenden Parameter der Aufgabendefinition erzeugen ein unterschiedliches Verhalten für Aufgaben vom Typ Fargate:

  • Bei Verwendung von logConfiguration sind die für Fargate-Aufgaben unterstützten Protokolltreiber awslogs, splunk und awsfirelens.

    Windows-Aufgaben unterstützen keine awsfirelens-Protokolltreiber.

  • Bei Verwendung von linuxParameters für capabilities kann der Parameter drop verwendet werden, aber der Parameter add wird nicht unterstützt.

  • Der Parameter healthCheck wird nur für Aufgaben vom Typ Fargate mit Plattform-Version 1.1.0 oder höher unterstützt.

  • Wenn Sie den Parameter portMappings verwenden, geben Sie nur containerPort an. hostPort kann entweder leer gelassen oder auf den gleichen Wert wie containerPort gesetzt werden.

  • Der operatingSystemFamily-Parameter ist für Aufgaben erforderlich, die auf Linux-Containern und Windows-Containern ausgeführt werden.

Um sicherzustellen, dass Ihre Aufgabendefinition für den Fargate-Starttyp anwendbar ist, können Sie beim Registrieren der Aufgabendefinition Folgendes angeben:

  • Geben Sie in der AWS Management Console im Feld Requires Compatibilities (Erfordert Kompatibilität) FARGATE an.

  • Geben Sie in der AWS CLI für die Option --requires-compatibilities FARGATE an.

  • Legen Sie in der API das Flag requiresCompatibilities fest.

Netzwerkmodus

Für Fargate-Aufgabendefinitionen muss der Netzwerkmodus awsvpc sein. Der Netzwerkmodus awsvpc vergibt an jede Aufgabe eine eigene Elastic-Network-Schnittstelle. Beim Erstellen eines Service oder dem manuellen Ausführen von Aufgaben wird auch eine Netzwerkkonfiguration benötigt. Weitere Informationen finden Sie unter Fargate-Aufgabenvernetzung im Benutzerhandbuch zum Amazon Elastic Container Service für AWS Fargate.

CPU und Arbeitsspeicher der Aufgabe

Für Fargate-Aufgabendefinitionen müssen Sie CPU und Speicher auf Aufgabenebene angeben. Sie können auch die CPU- und Speicherauslastung für Fargate-Aufgaben auf Container-Ebene festlegen. Das ist jedoch optional. Für die meisten Anwendungsfälle ist es in Ordnung, diese Ressourcen nur auf Aufgabenebene anzugeben. Die folgende Tabelle zeigt die gültigen Kombinationen von CPU- und Speicherauslastung auf Aufgabenebene.

CPU-Wert

Speicherwert

256 (0,25 vCPU)

0,5 GB, 1 GB, 2 GB

512 (0,5 vCPU)

1 GB, 2 GB, 3 GB, 4 GB

1024 (1 vCPU)

2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB

2048 (2 vCPU)

Zwischen 4 GB und 16 GB in 1-GB-Schritten

4096 (4 vCPU)

Zwischen 8 GB und 30 GB in 1-GB-Schritten

Protokollierung

Fargate-Aufgabendefinitionen unterstützen die Protokolltreiber awslogs, splunk und awsfirelens für die Protokollkonfiguration. Der folgende Code zeigt einen Ausschnitt einer Aufgabendefinition, in der der Protokolltreiber awslogs konfiguriert wurde:

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" }

Weitere Informationen zur Verwendung des Protokolltreibers awslogs in Aufgabendefinitionen zum Senden Ihrer Containerprotokolle an CloudWatch Logs finden Sie unter Verwenden des awslogs-Protokolltreibers.

Weitere Informationen zur Verwendung des Protokolltreibers awsfirelens in einer Aufgabendefinition finden Sie unter Routing benutzerdefinierter Protokolle.

IAM-Rolle für die Amazon-ECS-Aufgabenausführung

Sie können eine optionale IAM-Rolle zur Aufgabenausführung für Fargate festlegen, damit Fargate-Aufgaben API-Aufrufe an Amazon ECR senden können. Die API-Aufrufe rufen Container-Images ab. Sie rufen auch Amazon CloudWatch auf, um Container-Anwendungsprotokolle zu speichern. Weitere Informationen finden Sie unter IAM-Rolle für die Amazon ECS-Aufgabenausführung.

Beispiel für eine Aufgabendefinition

Im Folgenden finden Sie eine beispielhafte Aufgabendefinition, die die Linux-Container im Fargate-Launchtyp verwendet, um einen Webserver einzurichten:

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "requiresCompatibilities": [ "FARGATE" ] }

Aufgabenspeicher

Für Amazon ECS-Aufgaben in Fargate werden die folgenden Speichertypen unterstützt:

  • Amazon EFS-Volumes für persistenten Speicher. Weitere Informationen finden Sie unter Amazon EFS-Volumes.

  • Flüchtiger Speicher für nicht persistenten Speicher.

Bei der Bereitstellung wird jeder in Fargate gehosteten Amazon ECS-Aufgabe folgenden flüchtigen Speicher zugewiesen. Die Speicherkonfiguration hängt davon ab, welche Plattformversion die Aufgabe verwendet. Nachdem eine Fargate-Aufgabe beendet wurde, wird der flüchtige Speicher gelöscht. Weitere Informationen zu den standardmäßigen Service-Begrenzungen von Amazon ECS finden Sie unter Amazon-ECS-Service-Kontingente.

Anmerkung

Die Parameter host und sourcePath werden nicht für Fargate-Aufgaben unterstützt.

Fargate-Linux-Plattformversionen

Fargate-Aufgaben mit Plattformversion 1.4.0 oder höher

Alle Amazon ECS-Aufgaben in Fargate, die die Plattformversion 1.4.0 oder höher verwenden, erhalten mindestens 20 GiB flüchtigen Speicher. Sowohl das gezogene, komprimierte als auch das unkomprimierte Container-Image für die Aufgabe wird auf dem flüchtigen Speicher gespeichert. Um die Gesamtmenge des flüchtigen Speichers zu ermitteln, die Ihre Aufgabe verwenden muss, müssen Sie die Speichermenge, die Ihr Containerimage verwendet, von der Gesamtmenge abziehen.

Bei Aufgaben mit Plattformversion 1.4.0 oder höher, die am 28. Mai 2020 oder später gestartet wurden, wird der flüchtige Speicher mit einem AES-256-Verschlüsselungsalgorithmus unter Verwendung eines von AWS Fargate verwalteten Verschlüsselungsschlüssels verschlüsselt.

Fargate-Aufgaben mit Plattformversion 1.3.0 oder früher

Für Amazon ECS-Aufgaben in Fargate, die Plattformversion 1.3.0 oder früher verwenden, erhält jede Aufgabe den folgenden flüchtigen Speicher:

  • 10 GB Speicher auf Docker-Ebene

    Anmerkung

    Dieser Betrag umfasst sowohl komprimierte als auch unkomprimierte Container-Image-Artifakte.

  • Zusätzliche 4 GB für Volumen-Mounts. Diese können eingebunden und mit den Parametern volumes, mountPoints und volumesFrom in der Aufgabendefinition von allen Containern verwendet werden.

Fargate-Windows-Plattformversionen

Fargate-Aufgaben mit Plattformversion 1.0.0 oder höher

Alle Amazon ECS-Aufgaben in Fargate, die die Plattformversion 1.0.0 oder höher verwenden, erhalten mindestens 20 GiB flüchtigen Speicher. Sowohl das gezogene, komprimierte als auch das unkomprimierte Container-Image für die Aufgabe wird auf dem flüchtigen Speicher gespeichert. Um die Gesamtmenge des flüchtigen Speichers zu ermitteln, die Ihre Aufgabe verwenden muss, müssen Sie die Speichermenge, die Ihr Containerimage verwendet, von der Gesamtmenge abziehen.

Der flüchtige Speicher wird mit einem AES-256-Verschlüsselungsalgorithmus eines AWS Fargate-verwalteten Verschlüsselungsschlüssels verschlüsselt.

Beispiel für eine Aufgabendefinition

In diesem Beispiel haben Sie zwei Anwendungscontainer, die auf denselben Scratch-Dateispeicherort zugreifen müssen.

So stellen Sie nicht persistenten, leeren Speicher für Container in Fargate-Aufgaben bereit

  1. Definieren Sie im Abschnitt volumes der Aufgabendefinition ein Volume mit dem Namen application_scratch.

    "volumes": [ { "name": "application_scratch", "host": {} } ]
  2. Erstellen Sie im Abschnitt containerDefinitions die Containerdefinitionen der Datenbank so, dass sie den nicht persistenten Speicher mounten.

    "containerDefinitions": [ { "name": "application1", "image": "my-repo/application", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "application_scratch", "containerPath": "/var/scratch" } ] }, { "name": "application2", "image": "my-repo/application", "cpu": 100, "memory": 100, "essential": true, "mountPoints": [ { "sourceVolume": "application_scratch", "containerPath": "/var/scratch" } ] } ]