Ü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
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 Protokolltreiberawslogs
,splunk
undawsfirelens
.Windows-Aufgaben unterstützen keine
awsfirelens
-Protokolltreiber. -
Bei Verwendung von
linuxParameters
fürcapabilities
kann der Parameterdrop
verwendet werden, aber der Parameteradd
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 nurcontainerPort
an.hostPort
kann entweder leer gelassen oder auf den gleichen Wert wiecontainerPort
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 |
Für AWS Fargate unterstützte Betriebssysteme |
---|---|---|
256 (0,25 vCPU) |
512 MiB, 1 GB, 2 GB |
Linux |
512 (0,5 vCPU) |
1 GB, 2 GB, 3 GB, 4 GB |
Linux |
1024 (1 vCPU) |
2 GB, 3 GB, 4 GB, 5 GB, 6 GB, 7 GB, 8 GB |
Linux, Windows |
2048 (2 vCPU) |
Zwischen 4 GB und 16 GB in 1-GB-Schritten |
Linux, Windows |
4096 (4 vCPU) |
Zwischen 8 GB und 30 GB in 1-GB-Schritten |
Linux, Windows |
8 192 (8 vCPU) Diese Option erfordert die Linux-Plattform |
Zwischen 16 GB und 60 GB in 4-GB-Schritten |
Linux |
16 384 (16 vCPU) Diese Option erfordert die Linux-Plattform |
Zwischen 32 GB und 120 GB in 8-GB-Schritten |
Linux |
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.
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
undvolumesFrom
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.
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
-
Definieren Sie im Abschnitt
volumes
der Aufgabendefinition ein Volume mit dem Namenapplication_scratch
."volumes": [ { "name": "
application_scratch
", "host": {} } ] -
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
" } ] } ]