

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
<a name="task-scale-in-protection"></a>

Mit Amazon ECS Task Scale-in Protection können Sie verhindern, dass 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. 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.

## Mechanismen von Task Scale-in Protection
<a name="task-scale-in-protection-mechanisms"></a>

Task Scale-in Protection können Sie entweder über den Endpunkt des Amazon-ECS-Container-Agenten 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 Pfad des Endpunkts von Task Scale-in Protection `$ECS_AGENT_URI/task-protection/v1/state` 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](task-scale-in-protection-endpoint.md).
+ **Amazon-ECS-API**

  Über die Amazon-ECS-API können Sie Task Scale-in Protection festlegen und abrufen, 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 [UpdateTaskProtection](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateTaskProtection.html)und [GetTaskProtection](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_GetTaskProtection.html)in 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
<a name="task-scale-in-protection-considerations"></a>

Berücksichtigen Sie die folgenden Punkte, bevor Sie Task Scale-in Protection verwenden:
+ Task Scale-in Protection wird nur für Aufgaben unterstützt, die über einen Service bereitgestellt werden.
+ Task Scale-in Protection 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 Task Scale-in Protection 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.
+ Task Scale-in Protection wird im Amazon-ECS-Container-Agenten `1.65.0` oder höher unterstützt. Sie können Unterstützung für dieses Feature auf Amazon EC2-Instances hinzufügen, indem Sie ältere Versionen der Amazon-ECS-Container-Agenten auf die aktuelle Version aktualisieren. Weitere Informationen finden Sie unter [Überprüfen des Amazon-ECS-Container-Agenten](ecs-agent-update.md).
+ Ü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 das blaue Deployment mit geschützten Aufgaben nicht entfernt, wenn dies bei Aufgaben der Fall war`protectionEnabled`. 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 angezeigt`UPDATE_IN_PROGRESS`. Wenn Task Scale-in Protection 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 Task Scale-in Protection erforderliche IAM-Berechtigungen
<a name="task-scale-in-protection-iam"></a>

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.

# Endpunkt von Amazon ECS Task Scale-in Protection
<a name="task-scale-in-protection-endpoint"></a>

Der Amazon-ECS-Container-Agent fügt die `ECS_AGENT_URI`-Umgebungsvariable automatisch in die Amazon-ECS-Aufgabencontainer ein, um eine Methode für die Interaktion mit dem Container-Agent-API-Endpunkt bereitzustellen.

Wir empfehlen die Verwendung des Amazon-ECS-Container-Agent-Endpunkts für Aufgaben, die den Schutzbedarf selbst bestimmen können. 

Wenn ein Container mit der Verarbeitung von Aufgaben beginnt, können Sie das `protectionEnabled`-Attribut über den Pfad des Endpunkts von Task Scale-in Protection `$ECS_AGENT_URI/task-protection/v1/state` innerhalb des Containers festlegen. 

Eine PUT-Anfrage an diesen URI innerhalb eines Containers legt Task Scale-in Protection fest. Eine GET-Anfrage an diese URI ruft den aktuellen Schutzstatus einer Aufgabe ab.

## Anfrageparameter von Task Scale-in Protection
<a name="task-scale-in-protection-request"></a>

Task Scale-in Protection können Sie mithilfe des `${ECS_AGENT_URI}/task-protection/v1/state`-Endpunkts mit den folgenden Anfrageparametern einrichten.

`ProtectionEnabled`  
Geben Sie `true` an, um eine Aufgabe als geschützt zu markieren. Geben Sie `false` an, um den Schutz aufzuheben und die Aufgabe für die Beendigung zu berechtigen.  
Typ: Boolescher Wert  
Erforderlich: Ja

`ExpiresInMinutes`  
Die Anzahl der Minuten, für die Aufgabe geschützt ist. Sie können mindestens 1 Minute bis zu 2 880 Minuten (48 Stunden) angeben. Während dieses Zeitraums wird Ihre Aufgabe nicht durch Abskalierungsereignisse des Services Auto Scaling oder durch Bereitstellungen beendet. Nach Ablauf dieses Zeitraums wird der `protectionEnabled`-Parameter auf `false` gesetzt.  
Wenn Sie keinen Zeitraum angeben, wird die Aufgabe automatisch für 120 Minuten (2 Stunden) geschützt.  
Typ: Ganzzahl  
Erforderlich: Nein

Die folgenden Beispiele zeigen, wie Sie den Aufgabenschutz mit unterschiedlichen Laufzeiten festlegen können.

**Beispiel für den Schutz einer Aufgabe mit der Standardzeitspanne**

Dieses Beispiel zeigt, wie eine Aufgabe mit dem Standardzeitraum von 2 Stunden geschützt wird.

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true}'
```

**Beispiel dafür, wie eine Aufgabe 60 Minuten lang geschützt wird**

Dieses Beispiel zeigt, wie eine Aufgabe mit dem `expiresInMinutes`-Parameter 60 Minuten lang geschützt wird.

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":60}'      
```

**Beispiel dafür, wie eine Aufgabe 24 Stunden lang geschützt wird**

Dieses Beispiel zeigt, wie eine Aufgabe mit dem `expiresInMinutes`-Parameter 24 Stunden lang geschützt wird.

```
curl --request PUT --header 'Content-Type: application/json' ${ECS_AGENT_URI}/task-protection/v1/state --data '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}'      
```

**Beispiele für Windows-Container**

Für Windows-Container können Sie PowerShell das `Invoke-RestMethod` Cmdlet's anstelle von curl verwenden. Die folgenden Beispiele zeigen die PowerShell Entsprechungen der vorherigen curl-Befehle.

**Beispiel für den Schutz einer Windows-Container-Aufgabe mit der Standardzeitspanne**

Dieses Beispiel zeigt, wie Sie eine Aufgabe mit dem Standardzeitraum von 2 Stunden schützen können, indem Sie. PowerShell

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true}' -ContentType 'application/json'
```

**Beispiel dafür, wie eine Windows-Container-Aufgabe 60 Minuten lang geschützt wird**

Dieses Beispiel zeigt, wie eine Aufgabe mithilfe des `expiresInMinutes` Parameters with 60 Minuten lang geschützt wird PowerShell.

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true,"ExpiresInMinutes":60}' -ContentType 'application/json'
```

**Beispiel dafür, wie eine Windows-Container-Aufgabe 24 Stunden lang geschützt wird**

Dieses Beispiel zeigt, wie eine Aufgabe mithilfe des `expiresInMinutes` Parameters with für 24 Stunden geschützt wird PowerShell.

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Put -Body '{"ProtectionEnabled":true,"ExpiresInMinutes":1440}' -ContentType 'application/json'
```

Die PUT-Anfrage gibt die folgende Antwort zurück.

```
{
  "protection": {
    "ExpirationDate": "2023-12-20T21:57:44.837Z",
    "ProtectionEnabled": true,
    "TaskArn": "arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
  }
}
```

## Antwortparameter von Task Scale-in Protection
<a name="task-scale-in-protection-response"></a>

Die folgenden Informationen werden in der JSON-Antwort des Endpunkts `${ECS_AGENT_URI}/task-protection/v1/state` von Task Scale-in Protection zurückgegeben.

`ExpirationDate`  
Die Epochenzeit, zu der der Schutz für die Aufgabe abläuft. Wenn die Aufgabe nicht geschützt ist, ist dieser Wert Null.

`ProtectionEnabled`  
Der Schutzstatus der Aufgabe. Wenn der Abskalierungsschutz für eine Aufgabe aktiviert ist, ist der Wert `true`. Andernfalls ist es `false`.

`TaskArn`  
Der vollständige Amazon Resource Name (ARN) der Aufgabe, zu der der Container gehört.

Das folgende Beispiel zeigt die für eine geschützte Aufgabe zurückgegebenen Details.

```
curl --request GET ${ECS_AGENT_URI}/task-protection/v1/state
```

Verwenden Sie für Windows-Container den folgenden PowerShell Befehl, um den Schutzstatus abzurufen:

```
Invoke-RestMethod -Uri $env:ECS_AGENT_URI/task-protection/v1/state -Method Get
```

```
{
    "protection":{
        "ExpirationDate":"2023-12-20T21:57:44Z",
        "ProtectionEnabled":true,
        "TaskArn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0"
    }
}
```

Die folgenden Informationen werden zurückgegeben, wenn ein Fehler auftritt.

`Arn`  
Der vollständige Amazon-Ressourcenname (ARN) der Aufgabe.

`Detail`  
Die auf den Fehler bezogenen Details.

`Reason`  
Der Grund für den Fehlschlag.

Das folgende Beispiel zeigt die für eine nicht geschützte Aufgabe zurückgegebenen Details.

```
{
    "failure":{
        "Arn":"arn:aws:ecs:us-west-2:111122223333:task/1234567890abcdef0",
        "Detail":null,
        "Reason":"TASK_NOT_VALID"
    }
}
```

Die folgenden Informationen werden zurückgegeben, wenn eine Ausnahme auftritt.

`requestID`  
Die AWS Anforderungs-ID für den Amazon ECS-API-Aufruf, der zu einer Ausnahme führt.

`Arn`  
Der vollständige Amazon-Ressourcenname (ARN) der Aufgabe oder des Services.

`Code`  
Der Fehlercode.

`Message`  
Die Fehlermeldung.  
Wenn ein `RequestError`- oder `RequestTimeout`-Fehler auftritt, ist es wahrscheinlich, dass es sich um ein Netzwerkproblem handelt. Versuchen Sie, VPC-Endpunkte für Amazon ECS zu verwenden.

Das folgende Beispiel zeigt die Details, die zurückgegeben werden, wenn ein Fehler auftritt.

```
{
    "requestID":"12345-abc-6789-0123-abc",
    "error":{
        "Arn":"arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0",
        "Code":"AccessDeniedException",
        "Message":"User: arn:aws:sts::444455556666:assumed-role/my-ecs-task-role/1234567890abcdef0 is not authorized to perform: ecs:GetTaskProtection on resource: arn:aws:ecs:us-west-2:555555555555:task/test/1234567890abcdef0 because no identity-based policy allows the ecs:GetTaskProtection action"
    }    
}
```

Der folgende Fehler wird angezeigt, wenn der Amazon-ECS-Agent aus Gründen wie Netzwerkproblemen oder einem Ausfall der Amazon-ECS-Steuerebene keine Antwort vom Amazon-ECS-Endpunkt erhalten kann.

```
{
  "error": {
    "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0",
    "Code": "RequestCanceled",
    "Message": "Timed out calling Amazon ECS Task Protection API"
  }
}
```

Der folgende Fehler wird angezeigt, wenn der Amazon-ECS-Agent eine Drosselungsausnahme von Amazon ECS erhält.

```
{
  "requestID": "12345-abc-6789-0123-abc",
  "error": {
    "Arn": "arn:aws:ecs:us-west-2:555555555555:task/my-cluster-name/1234567890abcdef0",
    "Code": "ThrottlingException",
    "Message": "Rate exceeded"
  }
}
```