Schützen Sie Ihre Amazon-ECS-Aufgaben davor, durch Abskalierungsereignisse beendet zu werden - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Schützen Sie Ihre Amazon-ECS-Aufgaben davor, durch Abskalierungsereignisse beendet zu werden

Sie können Amazon ECS Task Scale-in Protection verwenden, um zu verhindern, dass Ihre Aufgaben durch Abskalierungsereignisse von Service-Auto-Scaling oder Bereitstellungen beendet werden.

Bestimmte Anwendungen erfordern einen Mechanismus zum Schutz unternehmenskritischer Aufgaben vor der Beendigung durch Abskalierungsereignisse in Zeiten geringer Auslastung oder während Service-Bereitstellungen. Zum Beispiel:

  • Sie verfügen über eine asynchrone Anwendung mit Warteschlangenverarbeitung, z. B. einen Video-Transkodierungsauftrag, bei dem einige Aufgaben stundenlang ausgeführt werden müssen, selbst wenn die kumulierte Service-Auslastung gering ist.

  • Sie verfügen über eine Gaming-Anwendung, die Spieleserver als Amazon-ECS-Aufgaben ausführt. Diese müssen auch dann ausgeführt werden, wenn sich alle Benutzer abgemeldet haben, um die Startup-Latenz eines Server-Neustarts zu verringern.

  • Wenn Sie eine neue Codeversion bereitstellen, müssen Aufgaben weiterhin ausgeführt werden, da eine erneute Verarbeitung kostenintesiv wäre.

Um zu verhindern, dass Aufgaben, die zu Ihrem Service gehören, bei einem Abskalierungs-Ereignis beendet werden, setzen Sie das ProtectionEnabled-Attribut auf true. Wenn Sie ProtectionEnabled auf „true“ setzen, sind Aufgaben standardmäßig für 2 Stunden geschützt. Sie können dann den Schutzzeitraum mithilfe des ExpiresInMinutes-Attributs anpassen. Sie können Ihre Aufgaben für mindestens 1 Minute und bis zu maximal 2 880 Minuten (48 Stunden) schützen. Wenn Sie den verwenden AWS CLI, können Sie die --protection-enabled Option angeben.

Nachdem eine Aufgabe ihre erforderliche Arbeit beendet hat, können Sie das ProtectionEnabled-Attribut auf false setzen, sodass die Aufgabe durch nachfolgende Abskalierungsereignisse beendet werden kann. Wenn Sie die verwenden AWS CLI, können Sie die --no-protection-enabled Option angeben.

Mechanismus des Abskalierungsschutzes für Aufgaben

Sie können den Abskalierungsschutz für Aufgaben entweder über den Amazon-ECS-Container-Agent-Endpunkt oder die Amazon-ECS-API einrichten und abrufen.

  • Amazon-ECS-Container-Agent-Endpunkt

    Wir empfehlen die Verwendung des Amazon-ECS-Container-Agent-Endpunkts für Aufgaben, die den Schutzbedarf selbst bestimmen können. Verwenden Sie diesen Ansatz für warteschlangenbasierte oder Auftragsverarbeitungs-Workloads.

    Wenn ein Container mit der Verarbeitung von Aufgaben beginnt, z. B. durch Konsumieren einer SQS-Nachricht, können Sie das ProtectionEnabled-Attribut über den Endpunkt-Pfad $ECS_AGENT_URI/task-protection/v1/state zum Abskalierungsschutz für Aufgaben innerhalb des Containers festlegen. Amazon ECS beendet diese Aufgabe bei Abskalierungsereignissen nicht. Nachdem die Aufgabe ihre Arbeit beendet hat, können Sie das ProtectionEnabled-Attribut mithilfe desselben Endpunkts zurücksetzen, so dass die Aufgabe bei nachfolgenden Abskalierungsereignissen beendet werden kann.

    Weitere Informationen zur Verwendung des Agent-Endpunkts des Amazon-ECS-Containers finden Sie unter Endpunkt von Amazon ECS Task Scale-in Protection.

  • Amazon-ECS-API

    Sie können die Amazon-ECS-API verwenden, um den Abskalierungsschutz für Aufgaben festzulegen und abzurufen, wenn Ihre Anwendung über eine Komponente verfügt, die den Status aktiver Aufgaben verfolgt. Verwenden Sie UpdateTaskProtection, um eine oder mehrere Aufgaben als geschützt zu markieren. Verwenden Sie GetTaskProtection, um den Schutzstatus abzurufen.

    Ein Beispiel für diesen Ansatz wäre, wenn Ihre Anwendung Spielserver-Sitzungen als Amazon-ECS-Aufgaben hostet. Wenn sich ein Benutzer bei einer Sitzung auf dem Server (Aufgabe) anmeldet, können Sie die Aufgabe als geschützt markieren. Nachdem sich der Benutzer abgemeldet hat, können Sie entweder den Schutz speziell für diese Aufgabe aufheben oder den Schutz für ähnliche Aufgaben, die keine aktiven Sitzungen mehr haben, regelmäßig aufheben, je nachdem, ob Sie Server im Leerlauf halten möchten.

    Weitere Informationen finden Sie unter UpdateTaskProtectionund GetTaskProtectionin der Amazon Elastic Container Service API-Referenz.

Sie können beide Ansätze kombinieren. Verwenden Sie beispielsweise den Amazon-ECS-Agent-Endpunkt, um den Aufgabenschutz innerhalb eines Containers einzurichten, und verwenden Sie die Amazon-ECS-API, um den Aufgabenschutz für Ihren externen Controller-Service zu entfernen.

Überlegungen

Berücksichtigen Sie die folgenden Punkte, bevor Sie den Abskalierungsschutz für Aufgaben verwenden:

  • Der Abskalierungsschutz wird nur für Aufgaben unterstützt, die über einen Service bereitgestellt werden.

  • Der Abskalierungsschutz wird für Aufgaben unterstützt, die über einen Service bereitgestellt werden, der in Amazon ECS Managed Instances ausgeführt wird.

  • Wir empfehlen die Verwendung des Amazon-ECS-Container-Agent-Endpunkts, da der Amazon-ECS-Agent über integrierte Wiederholungsmechanismen und eine einfachere Schnittstelle verfügt.

  • Sie können den Ablaufzeitraum für den Abskalierungsschutz für Aufgaben zurücksetzen, indem Sie UpdateTaskProtection für eine Aufgabe aufrufen, für die der Schutz bereits aktiviert ist.

  • Bestimmen Sie, wie lange eine Aufgabe benötigen würde, um ihre erforderliche Arbeit abzuschließen, und legen Sie die expiresInMinutes-Eigenschaft entsprechend fest. Wenn Sie den Ablauf des Schutzes länger als nötig festlegen, entstehen Ihnen Kosten und Verzögerungen bei der Bereitstellung neuer Aufgaben.

  • Der Aufgaben-Abskalierungsschutz wird auf dem Amazon-ECS-Container-Agenten 1.65.0 oder höher unterstützt. Sie können Unterstützung für diese Funktion auf EC2 Amazon-Instances hinzufügen, die ältere Versionen des Amazon ECS-Container-Agenten verwenden, indem Sie den Agenten auf die neueste Version aktualisieren. Weitere Informationen finden Sie unter Überprüfen des Amazon-ECS-Container-Agenten.

  • Überlegungen zur Bereitstellung:

    • Wenn der Service eine fortlaufende Aktualisierung verwendet, werden neue Aufgaben erstellt, aber Aufgaben mit älteren Versionen werden nicht beendet, bis protectionEnabled gelöscht wird oder abläuft. Sie können den maximumPercentage-Parameter in der Bereitstellungskonfiguration auf einen Wert anpassen, der es ermöglicht, neue Aufgaben zu erstellen, wenn alte Aufgaben geschützt sind.

    • Wenn ein blue/green Update angewendet wird, wird die blaue Bereitstellung mit geschützten Aufgaben nicht entfernt, wenn dies bei Aufgaben der Fall warprotectionEnabled. Der Datenverkehr wird zu den neu auftretenden Aufgaben umgeleitet, und ältere Aufgaben werden nur entfernt, wenn protectionEnabled gelöscht wird oder abgelaufen ist. Je nach Timeout der CloudFormation Updates kann es bei der CodeDeploy Bereitstellung zu einem Timeout kommen und die älteren Blue-Tasks sind möglicherweise noch vorhanden.

    • Wenn Sie dies verwenden CloudFormation, hat der Update-Stack ein Timeout von 3 Stunden. Wenn Sie also Ihren Task-Schutz auf mehr als 3 Stunden einstellen, kann Ihre CloudFormation Implementierung zu einem Ausfall und Rollback führen.

      Während der Zeit, in der Ihre alten Aufgaben geschützt sind, wird der CloudFormation Stack angezeigtUPDATE_IN_PROGRESS. Wenn der Abskalierungsschutz für Aufgaben entfernt wird oder innerhalb des 3-Stunden-Fensters abläuft, wird Ihre Bereitstellung erfolgreich sein und in den Status UPDATE_COMPLETE wechseln. Wenn die Bereitstellung länger als 3 Stunden in UPDATE_IN_PROGRESS verharrt, schlägt sie fehl, zeigt den UPDATE_FAILED-Status an und wird dann auf den alten Aufgabensatz zurückgesetzt.

    • Amazon ECS sendet Service-Ereignisse, wenn geschützte Aufgaben eine Bereitstellung (fortlaufend oder blau/grün) davon abhalten, den stabilen Zustand zu erreichen, so dass Sie Abhilfemaßnahmen ergreifen können. Wenn Sie beim Versuch, den Schutzstatus einer Aufgabe zu aktualisieren, eine DEPLOYMENT_BLOCKED-Fehlermeldung erhalten, bedeutet dies, dass der Service über mehr geschützte Aufgaben verfügt als die gewünschte Anzahl von Aufgaben für den Service. Führen Sie einen der folgenden Schritte aus, um diesen Fehler zu beheben:

      • Warten Sie, bis der aktuelle Aufgabenschutz abgelaufen ist. Stellen Sie dann den Aufgabenschutz ein.

      • Stellen Sie fest, welche Aufgaben angehalten werden können. Dann verwenden Sie UpdateTaskProtection mit der auf false festgelegten protectionEnabled-Option für diese Aufgaben.

      • Erhöhen Sie die Anzahl der gewünschten Aufgaben des Services auf mehr als die Anzahl der geschützten Aufgaben.

Für den Abskalierungsschutz für Aufgaben erforderliche IAM-Berechtigungen

Die Aufgabe muss über die Amazon-ECS-Aufgabenrolle mit den folgenden Berechtigungen verfügen:

  • ecs:GetTaskProtection: Erlaubt dem Amazon-ECS-Container-Agenten GetTaskProtection aufzurufen.

  • ecs:UpdateTaskProtection: Erlaubt dem Amazon-ECS-Container-Agenten UpdateTaskProtection aufzurufen.