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.
Sicherstellung der Idempotenz
Wenn Sie einen Mutationsvorgang durchführen, wird möglicherweise eine Ausnahme angezeigt, die auf Timeouts oder Serverprobleme zurückzuführen ist, die nach der Mutation der Ressourcen auftreten. Dies kann es schwierig machen, festzustellen, ob die Mutation aufgetreten ist, und kann zu mehreren Wiederholungsversuchen führen. Wenn der ursprüngliche Vorgang und die nachfolgenden Wiederholungen die Mutationen jedoch tatsächlich durchgeführt haben, haben Sie möglicherweise Stacking-Änderungen vorgenommen oder mehr Ressourcen erstellt, als Sie beabsichtigt hatten. Idempotenz stellt sicher, dass eine Operation Ressourcen nicht öfter als einmal mutiert. Wenn bei einer idempotenten Anfrage die ursprüngliche Anfrage erfolgreich mutiert wurde, werden alle nachfolgenden Versuche erfolgreich abgeschlossen, ohne dass eine weitere Mutation durchgeführt wird.
Themen
Idempotenz in Amazon ECS
Die folgenden API-Aktionen unterstützen optional Idempotenz mithilfe eines Client-Tokens. Die entsprechenden AWS CLI Befehle unterstützen auch Idempotenz mithilfe eines Client-Tokens. Ein Client-Token ist eine eindeutige Zeichenfolge, bei der Groß- und Kleinschreibung beachtet wird. Um mit einer dieser Aktionen eine idempotente API-Anfrage zu stellen, geben Sie in der Anfrage ein Client-Token an. Sie sollten dasselbe Client-Token nicht für andere API-Anfragen wiederverwenden. Wenn Sie eine Anfrage, die erfolgreich abgeschlossen wurde, mit demselben Client-Token und denselben Parametern erneut versuchen, ist die Wiederholung erfolgreich, ohne dass weitere Aktionen ausgeführt werden.
Ich bin impotent, wenn ein Client-Token verwendet wird
-
CreateService
Das Client-Token kann bis zu 36 ASCII-Zeichen im Bereich von 33—126 (einschließlich) enthalten.
-
CreateTaskSet
Das Client-Token kann bis zu 36 ASCII-Zeichen im Bereich von 33—126 (einschließlich) enthalten.
RunTask
Das Client-Token kann bis zu 64 ASCII-Zeichen im Bereich von 33—126 (einschließlich) enthalten.
Arten von Idempotenz
-
Cluster — Anfragen mit demselben Token im selben Cluster sind idempotent. Beispielsweise kann ClientToken A nur einmal als Anforderungsparameter für
RunTaskAnfragen in Cluster X verwendet werden.RunTaskAnfragen an andere Cluster werden als separate Anfrage betrachtet. Daher können Sie ClientToken A für eineRunTaskAnfrage für Cluster Y verwenden.
Idempotenz für RunTask
Die RunTask API unterstützt Idempotenz mithilfe eines Client-Tokens. Ein Client-Token ist eine eindeutige Zeichenfolge, die Sie beim Senden einer API-Anforderung angeben. Wenn Sie eine API-Anforderung mit demselben Client-Token und denselben Anforderungsparametern wiederholen, nachdem sie erfolgreich abgeschlossen wurde, wird das Ergebnis der ursprünglichen Anforderung zurückgegeben. Wenn Sie eine erfolgreiche Anfrage mit demselben Client-Token erneut versuchen, aber einer oder mehrere der Parameter anders sind als die Region oder Availability Zone, schlägt der erneute Versuch mit einem fehl. ConflictException Wenn Sie kein eigenes Client-Token angeben, generiert das AWS SDK AWS Command Line Interface automatisch ein Client-Token für die Anfrage, um sicherzustellen, dass sie idempotent ist. Ein Client-Token kann eine beliebige Zeichenfolge sein, die bis zu 64 ASCII-Zeichen im Bereich von 33—126 (einschließlich) enthält.
Die Gültigkeitsdauer (TTL) für das RunTask Client-Token beträgt 24 Stunden. Sie sollten dasselbe Client-Token nicht für verschiedene Anfragen wiederverwenden. Die maximale TTL des Client-Tokens ist gültig, je nachdem, welcher der beiden folgenden Werte niedriger ist:
-
24 Stunden
-
Die Lebensdauer der Ressource plus eine Stunde
Die Lebensdauer einer Ressource entspricht dem Zeitstempel, zu dem die Aufgabe erstellt wurde, und dem Zeitstempel, zu dem der letzte Status (
lastStatus) übergegangen ist.STOPPEDWenn SieRunTaskmehr als eine Aufgabe starten, entspricht die Lebensdauer der Ressource der Lebensdauer der letzten Aufgabe, zu der gewechselt wurde.STOPPED
RunTask Regeln und Antworten erneut versuchen
Wenn Sie eine Anfrage erneut versuchen, weil Sie eine 5xx-Ausnahme erhalten haben, enthält die wiederholte erfolgreiche Antwort normalerweise alle Informationen, die bei der ursprünglichen Anfrage zurückgegeben worden wären. Aufgaben, die für weniger als eine Stunde angehalten wurden, enthalten nur den ARN der Aufgabe, den letzten Status und den gewünschten Status.
Im Folgenden finden Sie ein Beispiel für die Antwort auf einen erneuten Versuch, wenn eine Aufgabe ausgeführt, eine Aufgabe gestoppt wurde und eine Aufgabe nicht gestartet werden konnte.
{ "failures": [ { "arn": "arn:aws:ecs:us-east-1:123456789012:container/4df26bb4-f057-467b-a079-961675296e64", "reason": "RESOURCE:MEMORY" } ], "tasks": [ { "desiredStatus": "RUNNING", "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/default/fdf2c302-468c-4e55-b884-5331d816e7fb", ... }, { "taskArn": "arn:aws:ecs:us-east-1:123456789012:task/default/fdf2c302-468c-4e55-b884-5331d819999", "lastStatus": "STOPPED", ... } ] }
Fehler, die älter als eine Stunde sind, beinhalten nur die Anzahl der fehlgeschlagenen Aufgaben.
Beispiele
AWS CLI Beispiele für Befehle
Um einen AWS CLI Befehl idempotent zu machen, fügen Sie die --client-token Option hinzu.
Beispiel: create-service
Der folgende Befehl create-service verwendet Idempotenz, da er ein Client-Token enthält.
aws ecs create-service \ --cluster MyCluster \ --service MyService \ --task-definition MyTaskDefinition:2 \ --desired-count 2 \ --launch-type FARGATE \ --platform-version LATEST \ --network-configuration "awsvpcConfiguration={subnets=["subnet-12344321"],securityGroups=["sg-12344321"],assignPublicIp="ENABLED"}" \ --client-token 550e8400-e29b-41d4-a716-44665544
Beispiel: create-task-set
Der folgende Befehl create-task-set verwendet Idempotenz, da er ein Client-Token enthält.
aws ecs create-task-set \ --cluster MyCluster \ --service MyService \ --task-definition MyTaskDefinition:2 \ --network-configuration "awsvpcConfiguration={subnets=["subnet-12344321"],securityGroups=["sg-12344321"]}" \ --client-token 550e8400-e29b-41d4-a716-44665544
Beispiel: run-task
Der folgende Run-Task-Befehl verwendet Idempotenz, da er ein Client-Token enthält.
aws ecs run-task \ --cluster MyCluster \ --task-definition MyTaskDefinition:2 \ --client-token 550e8400-e29b-41d4-a716-446655440000
Beispiele für API-Anfragen
Um eine API-Anfrage idempotent zu machen, fügen Sie den clientToken Parameter hinzu.
Beispiel: CreateService
Die folgende CreateServiceAPI-Anfrage verwendet Idempotenz, da sie ein Client-Token enthält.
POST / HTTP/1.1 Host: ecs.us-east-1.amazonaws.com Accept-Encoding: identity Content-Length: 87 X-Amz-Target: AmazonEC2ContainerServiceV20141113.CreateService X-Amz-Date: 20150429T170125Z Content-Type: application/x-amz-json-1.1 Authorization: AUTHPARAMS { "serviceName": "MyService", "taskDefinition": "MyTaskDefinition:2", "desiredCount": 10, "capacityProviderStrategy": [ { "base": "number", "capacityProvider": "FARGATE", "weight": 1 } ], "capacityProviderStrategy": [ { "base": "number", "capacityProvider": "FARGATE_SPOT", "weight": 1 } ], "clientToken": "550e8400-e29b-41d4-a716-44665544" }
Beispiel: CreateTaskSet
Die folgende CreateTaskSetAPI-Anfrage verwendet Idempotenz, da sie ein Client-Token enthält.
POST / HTTP/1.1 Host: ecs.us-east-1.amazonaws.com Accept-Encoding: identity Content-Length: 87 X-Amz-Target: AmazonEC2ContainerServiceV20141113.CreateTaskSet X-Amz-Date: 20150429T170125Z Content-Type: application/x-amz-json-1.1 Authorization: AUTHPARAMS { "serviceName": "MyService", "taskDefinition": "mytask:1", "desiredCount": 1, "capacityProviderStrategy": [ { "base": "number", "capacityProvider": "FARGATE", "weight": 1 } ], "capacityProviderStrategy": [ { "base": "number", "capacityProvider": "FARGATE_SPOT", "weight": 1 } ], "clientToken": "550e8400-e29b-41d4-a716-44665544" }
Beispiel: RunTask
Die folgende RunTaskAPI-Anfrage verwendet Idempotenz, da sie ein Client-Token enthält.
POST / HTTP/1.1 Host: ecs.us-east-1.amazonaws.com Accept-Encoding: identity Content-Length: 45 X-Amz-Target: AmazonEC2ContainerServiceV20141113.RunTask X-Amz-Date: 20161121T215740Z User-Agent: aws-cli/1.11.13 Python/2.7.12 Darwin/16.1.0 botocore/1.4.66 Content-Type: application/x-amz-json-1.1 Authorization: AUTHPARAMS { "count": 1, "taskDefinition": "mytask:1", "clientToken": "550e8400-e29b-41d4-a716-446655440000" }
Versuchen Sie es erneut mit den Empfehlungen für idempotente Anfragen
Die folgende Tabelle zeigt einige häufig vorkommende Antworten, die Sie auf idempotente API-Anfragen erhalten könnten, und stellt Empfehlungen zu Wiederholungsversuchen bereit.
| Antwort | Empfehlung | Kommentare |
|---|---|---|
|
200 (OK) |
Nicht erneut versuchen |
Die ursprüngliche Anfrage wurde erfolgreich abgeschlossen. Alle nachfolgenden Wiederholungsversuche werden als erfolgreich zurückgegeben. |
|
Nicht erneut versuchen |
Es liegt eins der folgenden Probleme mit der Anfrage vor:
Wenn die Anfrage eine Ressource umfasst, deren Status sich gerade ändert, könnte ein erneuter Anfrageversuch möglicherweise erfolgreich sein. |
|
|
Antwortcodes der Serie 500 (Serverfehler) |
Erneut versuchen |
Der Fehler wird durch ein AWS serverseitiges Problem verursacht und ist im Allgemeinen vorübergehend. Wiederholen Sie die Anfrage mit einer geeigneten Back-off-Strategie. |