Direkt zum Inhalt

Wie kann ich Probleme mit Amazon ECS-Aufgabenplatzierungsbeschränkungen beheben?

Lesedauer: 4 Minute
0

Ich möchte Aufgabenplatzierungsbeschränkungen verwenden, um Aufgaben auf Amazon Elastic Container Service (Amazon ECS) auszuführen. Die Aufgaben bleiben jedoch im Status PENDING stecken und können nicht gestartet werden.

Kurzbeschreibung

Wenn du für deine Aufgabendefinition, deine Aufgabe oder deinen Service Aufgabenplatzierungsbeschränkungen konfigurierst, musst du eine Container-Instance haben, die seinen Attributen entspricht. Andernfalls bleiben Aufgaben im Status PENDING hängen oder können nicht gestartet werden, und du erhältst eine der folgenden Fehlermeldungen:

  • Der Service (service-name) konnte keine Aufgabe platzieren, da keine Container-Instance alle Voraussetzungen erfüllt hat. Der am ehesten übereinstimmenden Container-Instance (a1b2c3d4-5678-90ab-cdef-11111EXAMPLE) fehlt ein erforderliches Attribut.
  • TaskFailedToStart: MemberOf-Platzierungsbeschränkung nicht erfüllt
  • TaskFailedToStart: ATTRIBUTE

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.

Prüfe zunächst die Attribute, die du in der Aufgabenplatzierungsbeschränkung angegeben hast, um Probleme bei der Aufgabenplatzierung zu lösen. Vergewissere dich anschließend, dass die Container-Instances über die erforderlichen Attribute verfügen.

Aufgabenplatzierungsbeschränkungen, die nur in der Aufgabendefinition angegeben sind, überprüfen

Wenn du die Aufgabenplatzierungsbeschränkungen nur in der Aufgabendefinition verwendest, führe den folgenden Befehl aus, um zu prüfen, ob den Container-Instances Attribute fehlen:

ecs-cli check-attributes --task-def example-task-def --cluster example-cluster --region region-code --container-instances example-container-instance-id

Hinweis: Ersetze example-task-def durch deine Aufgabendefinition, example-cluster durch deinen Clusternamen, region-code durch deine AWS-Region und example-container-instance-id durch deine Container-Instance-ID.

Weitere Informationen findest du unter Prüfen auf fehlende Attribute und Debuggen von Fehlern bei Ursachenattributen auf der GitHub-Website.

Aufgabenplatzierungsbeschränkungen, die in der Aufgabendefinition, dem Service oder der Aufgabe angegeben sind, überprüfen

Führe die folgenden Schritte aus, um die Platzierungsbeschränkungen in der Aufgabendefinition zu überprüfen:

  1. Öffne die Amazon-ECS-Konsole.
  2. Wähle im Navigationsbereich Aufgabendefinitionen aus.
  3. Wähle die Aufgabendefinition und dann die Revision deiner Aufgabendefinition aus.
  4. Wähle ** Aufgabenplatzierung**.

Führe die folgenden Schritte aus, um die für den Service angegebenen Platzierungsbeschränkungen zu überprüfen:

  1. Öffne die Amazon-ECS-Konsole.
  2. Wähle im Navigationsbereich die Option Cluster aus.
  3. Wähle auf der Seite Cluster deinen Cluster aus.
  4. Wähle unter Services deinen Service aus.
  5. Wähle Konfiguration und Netzwerk und dann Aufgabenplatzierungsstrategie und Einschränkungen aus.

Um die für eine bestimmte Aufgabe angegebene Platzierungsbeschränkung zu überprüfen, führe den folgenden AWS CLI-Befehl describe-tasks aus:

    aws ecs describe-tasks  --cluster example-cluster --region region-code
    --tasks task-id

Hinweis: Ersetze example-cluster durch deinen Clusternamen, region-code durch deine Region und task-id durch deine Task-ID. Überprüfe in der Ausgabe des Befehls den Wert placementConstraints.

Vergewissere dich, dass deine Container-Instances über die erforderlichen Attribute verfügen.

Verwende entweder die Amazon ECS-Konsole oder die AWS CLI, um die Attribute deiner Container-Instance zu überprüfen.

Amazon-ECS-Konsole

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-ECS-Konsole.
  2. Wähle im Navigationsbereich die Option Cluster aus.
  3. Wähle auf der Seite Cluster deinen Cluster aus.
  4. Wähle die Registerkarte Infrastruktur aus.
  5. Wähle unter Container-Instances deine Container-Instance aus.
  6. Wähle Aktionen und dann Attribute anzeigen/bearbeiten aus.
  7. Vergewissere dich, dass die Container-Instance über die erforderlichen Attribute verfügt, die in der Platzierungsbeschränkung angegeben sind.

AWS CLI

Führe den folgenden Befehl vom Typ describe-container-instances aus:

aws ecs describe-container-instances --cluster example-cluster --region region-code
--container-instances example-container-instance-id

Hinweis: Ersetze example-cluster durch deinen Clusternamen, region-code durch deine Region und example-container-instance-id durch deine Container-Instance-ID.

Führe den Befehl list-container-instances aus, um alle Container-Instances mit einem bestimmten Attribut anzuzeigen:

aws ecs list-container-instances --cluster example-cluster --region region-code --filter "attribute:ecs.instance-type == t2.micro"

Hinweis: Ersetze example-cluster durch deinen Clusternamen, region-code mit deiner Region, und attribute:ecs.instance-type == t2.micro durch dein Attribut. Der vorangehende Befehl listet alle Container-Instances im Cluster auf, die einen Instance-Typ „t2.micro“ haben.

Um mithilfe der AWS CLI ein Attribut für eine Container-Instance hinzuzufügen oder zu aktualisieren, führe den folgenden Befehl put-attributes aus:

aws ecs put-attributes \
    --cluster example-cluster \
    --region region-code \
    --attributes name=stack,value=production,targetId=example-container-instance-id

Hinweis: Ersetze example-cluster durch deinen Clusternamen, region-code durch deine Region und example-container-instance-id durch deine Container-Instance-ID. Füge deine Attribute der Option --attributes hinzu. Der vorangehende Beispielbefehl fügt der Container-Instance den Stack-Namen und den Produktionswert hinzu.

(Optional) Die Aufgabenplatzierungsbeschränkungen aktualisieren

Wenn die Aufgabenplatzierungsbeschränkungen falsch oder zu restriktiv sind, aktualisiere sie in der Aufgabendefinition oder im Service. Oder führe den folgenden Befehl register-task-definition aus, um eine neue Aufgabendefinitionsrevision zu erstellen:

aws ecs register-task-definition \
    --cli-input-json file://jsonfilepath/filename.json

Hinweis: Ersetze jsonfilepath.filename.json durch die JSON-Datei der Aufgabendefinition.

Um die Platzierungsbeschränkungen für eine eigenständige Aufgabe zu aktualisieren, führe den folgenden run-task-Befehl aus:

aws ecs run-task \
    --cluster clustername \
    --placement-constraints exampleconstraints

Hinweis: Ersetze clustername durch deinen Clusternamen und exampleconstraints durch deine Platzierungseinschränkungen.

AWS OFFICIALAktualisiert vor einem Jahr