AWS Fargate-Kapazitätsanbieter - Amazon ECS

AWS Fargate-Kapazitätsanbieter

Amazon ECS auf AWS Fargate-Kapazitätsanbietern ermöglicht Ihnen die Verwendung von Fargate- und Fargate-Spot-Kapazität mit Ihren Amazon-ECS-Aufgaben. Weitere Hinweise zu Kapazitätsanbietern finden Sie unter Amazon ECS-Kapazitätsanbieter.

Mit Fargate Spot können Sie unterbrechungstolerante Amazon ECS-Aufgaben mit einer reduzierten Gebühr im Vergleich zum Fargate-Preis ausführen. Fargate Spot führt Aufgaben über freie Rechenkapazität aus. Wenn AWS die Kapazität wieder benötigt, werden Ihre Aufgaben zwei Minuten nach einer diesbezüglichen Warnung unterbrochen. Dies wird im Folgenden näher beschrieben.

Überlegungen zu Fargate-Kapazitätsanbietern

Bei der Nutzung von Fargate-Kapazitätsanbietern sollte Folgendes berücksichtigt werden.

  • Der Fargate-Spot-Kapazitätsanbieter wird für Windows-Container auf Fargate nicht unterstützt.

  • Der Fargate-Spot-Kapazitätsanbieter wird nicht für Linux-Aufgaben mit der ARM64-Architektur unterstützt. Fargate Spot unterstützt nur Linux-Aufgaben mit der X86_64-Architektur.

  • Die Kapazitätsanbieter von Fargate und Fargate Spot müssen nicht erstellt werden. Sie sind für alle Konten verfügbar und müssen nur mit einem Cluster verknüpft sein, um zur Verwendung verfügbar zu sein.

  • Um Fargate-Kapazitätsanbieter und Fargate Spot-Kapazitätsanbieter einem vorhandenen Cluster zuzuordnen, müssen Sie die Amazon ECS-API oder AWS CLI verwenden. Weitere Informationen finden Sie unter Hinzufügen von Fargate-Kapazitätsanbietern zu einem vorhandenen Cluster.

  • Die Fargate- und Fargate Spot-Kapazitätsanbieter sind reserviert und können nicht gelöscht werden. Sie können die Zuordnung zu einem Cluster mit der PutClusterCapacityProviders-API trennen.

  • Wenn ein neuer Cluster mit der klassischen Amazon-ECS-Konsole und der Cluster-Vorlage Networking only (Nur Netzwerk) erstellt wird, werden die Kapazitätsanbieter FARGATE und FARGATE_SPOT automatisch dem neuen Cluster zugeordnet.

  • Bei der Nutzung von Fargate Spot muss die Aufgabe außerdem die Plattformversion 1.3.0 oder höher (Linux) verwenden. Weitere Informationen finden Sie unter AWS Fargate-Plattformversionen.

  • Wenn Aufgaben, die die Fargate- und Fargate Spot-Kapazitätsanbieter verwenden, angehalten werden, wird ein Ereignis bezüglich der Änderung des Aufgabenstatus an Amazon EventBridge gesendet. Der Grund für das Anhalten gibt eine Beschreibung der Ursache an. Weitere Informationen finden Sie unter Änderungsereignisse des Aufgabenstatus.

  • Ein Cluster kann eine Mischung aus Fargate- und Auto-Scaling-Gruppenkapazitätsanbietern enthalten. Allerdings darf eine Kapazitätsanbieterstrategie nur entweder einen Fargate- oder einen Auto–Scaling-Gruppenkapazitätsanbieter enthalten, aber nicht beide. Weitere Informationen finden Sie unter Auto-Scaling-Gruppenkapazitätsanbieter im Amazon Elastic Container Service-Entwicklerhandbuch.

Umgang mit Fargate Spot-Kündigungsbenachrichtigungen

Wenn Aufgaben, die Fargate Spot-Kapazität verwenden, aufgrund einer Spot-Unterbrechung angehalten werden, wird zwei Minuten, bevor eine Aufgabe angehalten wird, eine Warnung gesendet. Die Warnung wird als Ereignis zur Änderung des Aufgabenstatus an Amazon EventBridge gesendet und für die laufende Aufgabe wird ein SIGTERM-Signal gesendet. Bei Verwendung von Fargate Spot als Teil eines Service erhält der Scheduler das Signal zur Unterbrechung und zum Versuch, zusätzliche Aufgaben in Fargate Spot zu starten, wenn Kapazität verfügbar ist. Ein Service mit nur einer Aufgabe wird unterbrochen, bis die Kapazität verfügbar ist.

Um sicherzustellen, dass Ihre Container ordnungsgemäß beendet werden, bevor die Aufgabe angehalten wird, können Sie Folgendes konfigurieren:

  • In der Containerdefinition, die die Aufgabe verwendet, kann ein stopTimeout-Wert von 120 Sekunden oder weniger angegeben werden. Wenn Sie einen stopTimeout-Wert angeben, steht Ihnen dieses Zeitfenster zwischen dem Moment, an dem das Ereignis zum Ändern des Aufgabenstatus empfangen wird, und dem Moment, an dem der Container zwangsweise angehalten wird, bereit. Wenn Sie keinen stopTimeout-Wert angeben, wird der Standardwert von 30 Sekunden verwendet. Weitere Informationen finden Sie unter Container-Timeouts.

  • Das SIGTERM-Signal muss innerhalb des Containers empfangen werden, um alle Bereinigungsaktionen ausführen zu können. Wenn dieses Signal nicht verarbeitet wird, wird der Task nach dem konfigurierten stopTimeout ein SIGKILL-Signal empfangen, was zu Datenverlust oder -beschädigung führen kann.

Im Folgenden finden Sie einen Ausschnitt eines Ereignisses zur Aufgabenstatusänderung, in dem der Grund sowie der Code für das Anhalten einer Aufgabe bei einer Fargate Spot-Unterbrechung angezeigt werden.

{ "version": "0", "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "resources": [ "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef" ], "detail": { "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default", "createdAt": "2016-12-06T16:41:05.702Z", "desiredStatus": "STOPPED", "lastStatus": "RUNNING", "stoppedReason": "Your Spot Task was interrupted.", "stopCode": "TerminationNotice", "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE", ... } }

Im Folgenden finden Sie ein Ereignismuster, das zum Erstellen einer EventBridge-Regel für Amazon ECS-Aufgabenstatus-Änderungsereignisse verwendet wird. Optional können Sie im detail-Feld einen Cluster angeben, für den Ereignisse zur Aufgabenstatusänderung empfangen werden sollen. Weitere Informationen finden Sie unter Erstellen einer EventBridge-Regel im Amazon EventBridge-Benutzerhandbuch.

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] } }

Erstellen eines neuen Clusters, der Fargate-Kapazitätsanbieter verwendet

Wenn ein neuer Amazon ECS-Cluster erstellt wird, können Sie einen oder mehrere Kapazitätsanbieter angeben, die dem Cluster zugeordnet werden sollen. Die Kapazitätsanbieter werden verwendet, um eine Kapazitätsanbieterstrategie zu definieren, die die Infrastruktur bestimmt, auf der Ihre Aufgaben ausgeführt werden.

Wenn Sie die AWS Management Console verwenden, werden die Kapazitätsanbieter FARGATE und FARGATE_SPOT automatisch dem Cluster zugeordnet, wenn Sie die Cluster-Vorlage Networking Only (Nur Netzwerk) verwenden. Weitere Informationen finden Sie unter Erstellen eines Clusters mit der klassischen Konsole.

So erstellen Sie einen Amazon ECS-Cluster mit Fargate Kapazitätsanbietern (AWS CLI)

Verwenden Sie den folgenden Befehl, um einen neuen Cluster zu erstellen und ihm sowohl die Fargate- als auch die Fargate Spot-Kapazitätsanbieter zuzuordnen.

  • create-cluster (AWS CLI)

    aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-west-2

Hinzufügen von Fargate-Kapazitätsanbietern zu einem vorhandenen Cluster

Sie können den Pool der verfügbaren Kapazitätsanbieter für einen vorhandenen Amazon-ECS-Cluster mithilfe der PutClusterCapacityProviders-API aktualisieren.

Das Hinzufügen der Fargate- oder der Fargate Spot-Kapazitätsanbieter zu einem bestehenden Cluster wird in AWS Management Console nicht unterstützt. Sie müssen entweder einen neuen Fargate-Cluster in der Konsole erstellen oder die Fargate- oder Fargate Spot-Kapazitätsanbieter dem bestehenden Cluster unter Verwendung der Amazon ECS-API oder von AWS CLI hinzufügen.

So fügen Sie die Fargate-Kapazitätsanbieter einem vorhandenen Cluster hinzu (AWS CLI)

Verwenden Sie den folgenden Befehl, um die Fargate- und Fargate Spot-Kapazitätsanbieter einem vorhandenen Cluster hinzuzufügen. Wenn dem angegebenen Cluster vorhandene Kapazitätsanbieter zugeordnet sind, müssen Sie zusätzlich zu den neuen Kapazitätsanbietern alle vorhandenen Kapazitätsanbieter angeben. Die Cluster-Zuordnung der vorhandenen Kapazitätsanbietern, die aus einem PutClusterCapacityProviders-API-Aufruf weggelassen werden, wird aufgehoben. Die Zuordnung eines vorhandenen Kapazitätsanbieters zu einem Cluster kann nur dann aufgehoben werden, wenn der Kapazitätsanbieter nicht von vorhandenen Aufgaben verwendet wird. Dieselben Regeln gelten für die Standard-Kapazitätsanbieterstrategie des Clusters. Wenn für den Cluster eine Kapazitätsanbieter-Standardstrategie definiert ist, muss diese im von PutClusterCapacityProviders-API-Aufruf enthalten sein. Andernfalls wird sie überschrieben.

  • put-cluster-capacity-providers (AWS CLI)

    aws ecs put-cluster-capacity-providers \ --cluster FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT existing_capacity_provider1 existing_capacity_provider2 \ --default-capacity-provider-strategy existing_default_capacity_provider_strategy \ --region us-west-2

Ausführen von Aufgaben mit einem Fargate-Kapazitätsanbieter

Sie können eine Aufgabe oder einen Service entweder mit den Fargate- oder mit den Fargate Spot-Kapazitätsanbietern ausführen, indem Sie eine Kapazitätsanbieter-Strategie angeben. Wenn keine Kapazitätsanbieter-Strategie angegeben wird, wird die Kapazitätsanbieter-Standardstrategie des Clusters verwendet.

Das Ausführen einer Aufgabe mit den Kapazitätsanbietern von Fargate oder Fargate Spot wird in AWS Management Console unterstützt. Sie müssen die Fargate- oder die Fargate Spot-Kapazitätsanbieter der Kapazitätsanbieter-Standardstrategie des Clusters hinzufügen, wenn Sie AWS Management Console verwenden. Bei Verwendung der Amazon ECS-API oder von AWS CLI können Sie entweder eine Kapazitätsanbieter-Strategie angeben oder die Kapazitätsanbieter-Standardstrategie des Clusters verwenden.

So führen Sie eine Aufgabe mit einem Fargate-Kapazitätsanbieter aus (AWS CLI)

Verwenden Sie den folgenden Befehl, um eine Aufgabe mit den Kapazitätsanbietern von Fargate und Fargate Spot auszuführen.

  • run-task (AWS CLI)

    aws ecs run-task \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count integer \ --region us-west-2
Anmerkung

Wenn Sie eigenständige Aufgaben mit Fargate Spot ausführen, ist es wichtig zu beachten, dass die Aufgabe unterbrochen werden kann, bevor sie abgeschlossen und beendet werden kann. Daher ist es wichtig, dass Sie Ihre Anwendung so programmieren, dass sie innerhalb von 2 Minuten ordnungsgemäß beendet wird, wenn sie ein SIGTERM-Signal empfängt und wieder aufgenommen werden kann. Weitere Informationen finden Sie unter Umgang mit Fargate Spot-Kündigungsbenachrichtigungen.

Erstellen eines Services mit einem Fargate-Kapazitätsanbieter (AWS CLI)

Verwenden Sie den folgenden Befehl, um einen Service mit den Fargate- und den Fargate Spot-Kapazitätsanbietern zu erstellen.

  • create-service (AWS CLI)

    aws ecs create-service \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --service-name FargateService \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count integer \ --region us-west-2