Amazon ECS-Aufgabenplatzierungseinschränkungen - Amazon Elastic Container Service

Amazon ECS-Aufgabenplatzierungseinschränkungen

Eine Aufgabenplatzierungs-Beschränkung ist eine Regel, die während der Aufgabenplatzierung berücksichtigt wird. Aufgabenplatzierungsbedingungen können sowohl beim Ausführen einer Aufgabe als auch beim Erstellen eines neuen Service festgelegt werden. Die Aufgabenplatzierungsbedingungen können auch für vorhandene Services aktualisiert werden. Weitere Informationen finden Sie unter Amazon ECS-Aufgabenplatzierung.

Bedingungstypen

Amazon ECS unterstützt die folgenden Typen von Aufgabenplatzierungsbedingungen:

distinctInstance

Platzierung jeder Aufgabe auf einer anderen Container-Instance. Diese Aufgabenplatzierungsbedingung kann sowohl beim Ausführen einer Aufgabe als auch beim Erstellen eines neuen Service festgelegt werden.

memberOf

Platzierung von Aufgaben auf Container-Instances, die einem Ausdruck entsprechen. Weitere Informationen zur Syntax von Bedingungen finden Sie unter Cluster-Abfragesprache.

Die Aufgabenplatzierungsbedingung memberOf kann mit den folgenden Aktionen festgelegt werden:

  • Ausführen einer Aufgabe

  • Erstellen eines neuen Service

  • Erstellen einer neuen Aufgabendefinition

  • Erstellen einer neuen Version einer vorhandenen Aufgabendefinition

ecs.os-family

LINUX oder WINDOWS_SERVER_<OS_Release>_<FULL oder CORE>.

Die gültigen Werte sind LINUX und WINDOWS_SERVER_<OS_Release>_<FULL or CORE>. Beispiel: WINDOWS_SERVER_2022_FULL, WINDOWS_SERVER_2022_CORE, WINDOWS_SERVER_20H2_CORE, WINDOWS_SERVER_2019_FULL, WINDOWS_SERVER_2019_CORE und WINDOWS_SERVER_2016_FULL.

Die Aufgabenplatzierungsbedingung ecs.os-family kann mit den folgenden Aktionen festgelegt werden:

  • Ausführen einer Aufgabe

  • Erstellen eines neuen Service

  • Erstellen einer neuen Aufgabendefinition

  • Erstellen einer neuen Version einer vorhandenen Aufgabendefinition

Attribute

Sie können zu Ihren Container-Instances benutzerdefinierte Metadaten hinzufügen, die als Attribute bezeichnet werden. Jedes Attribut hat einen Namen und einen optionalen Zeichenfolgenwert. Sie können die von Amazon ECS vergebenen Attribute verwenden oder benutzerdefinierte Attribute erstellen.

Die folgenden Abschnitte enthalten Beispiele für integrierte, optionale und benutzerdefinierte Attribute.

Integrierte Attribute

Amazon ECS wendet automatisch die folgenden Attribute auf Ihre Container-Instances an.

ecs.ami-id

Die ID des zum Start der Instance verwendeten AMI. Ein Beispielwert für dieses Attribut ist ami-1234abcd.

ecs.availability-zone

Die Availability Zone für die Instance. Ein Beispielwert für dieses Attribut ist us-east-1a.

ecs.instance-type

Den Instance-Typ für die Instance. Ein Beispielwert für dieses Attribut ist g2.2xlarge.

ecs.os-type

Das Betriebssystem für die Instance. Die möglichen Werte für dieses Attribut sind linux und windows.

ecs.cpu-architecture

Die CPU-Architektur für die Instance. Beispielwerte für dieses Attribut sind x86_64 und arm64.

ecs.vpc-id

Die VPC, in der die Instance gestartet wurde. Ein Beispielwert für dieses Attribut ist vpc-1234abcd.

ecs.subnet-id

Das Subnetz, das die Instance verwendet. Ein Beispielwert für dieses Attribut ist subnet-1234abcd.

Optionale Attribute

Amazon ECS kann die folgenden Attribute zu Ihren Container-Instances hinzufügen.

ecs.awsvpc-trunk-id

Wenn dieses Attribut vorhanden ist, verfügt die Instance über eine Trunk-Netzwerkschnittstelle. Weitere Informationen finden Sie unter Elastic-Network-Schnittstellen-Trunking.

ecs.outpost-arn

Wenn dieses Attribut existiert, enthält es den Amazon-Ressourcennamen (ARN) des Outpost. Weitere Informationen finden Sie unter Amazon Elastic Container Service auf AWS Outposts.

ecs.capability.external

Wenn dieses Attribut vorhanden ist, wird die Instance als externe Instance identifiziert. Weitere Informationen finden Sie unter Externe Instances (Amazon ECS Anywhere).

Custom attributes (Benutzerdefinierte Attribute)

Sie können benutzerdefinierte Attribute für Ihre Container-Instances festlegen. Beispielsweise können Sie ein Attribut mit dem Namen „stack“ und dem Wert „prod“ definieren.

Bei der Angabe benutzerdefinierter Attribute sollte Folgendes berücksichtigt werden.

  • name muss zwischen 1 und 128 Zeichen sein und Name kann Buchstaben (Groß- und Kleinbuchstaben), Ziffern, Bindestriche, Unterstriche, Schrägstriche, Gegenschrägstriche oder Punkte enthalten.

  • value muss zwischen 1 und 128 Zeichen sein und Buchstaben (Groß- und Kleinbuchstaben), Ziffern, Bindestriche, Unterstriche, Punkte, At-Zeichen (@), Schrägstriche, Gegenschrägstriche, Doppelpunkte oder Leerzeichen enthalten. Der Wert darf keine führenden oder nachgestellten Leerzeichen enthalten.

Hinzufügen eines Attributs

Sie können benutzerdefinierte Attribute zum Zeitpunkt der Instance-Registrierung mithilfe des Container-Agenten oder manuell über die AWS Management Console hinzufügen. Weitere Informationen zur Verwendung des Container-Agenten finden Sie unter Amazon ECS Container Agent Konfigurationsparameter.

So fügen Sie benutzerdefinierte Attribute mithilfe der Konsole hinzu

  1. Öffnen Sie die Amazon ECS-Konsole unter https://console.aws.amazon.com/ecs/.

  2. Wählen Sie im Navigationsbereich Cluster und wählen Sie einen Cluster aus.

  3. Wählen Sie in der Registerkarte ECS Instances das Kontrollkästchen für die Container-Instance aus.

  4. Wählen Sie Actions, View/Edit Attributes.

  5. Gehen Sie für alle Attribute wie folgt vor:

    1. Wählen Sie Add attribute.

    2. Geben Sie einen Namen und einen Wert für das Attribut ein und wählen Sie das Häkchensymbol.

  6. Sobald Sie die Attribute hinzugefügt haben, wählen Sie Close (Schließen).

Hinzufügen benutzerdefinierter Attribute über die AWS CLI

Die folgenden Beispiele zeigen, wie Sie benutzerdefinierte Attribute mit dem Befehl put-attributes hinzufügen können.

Beispiel: einzelnes Attribut

Im folgenden Beispiel wird das benutzerdefinierte Attribut „stack=prod“ zu der angegebenen Container-Instance im Standard-Cluster hinzugefügt.

aws ecs put-attributes --attributes name=stack,value=prod,targetId=arn

Beispiel: mehrere Attribute

Im folgenden Beispiel werden die benutzerdefinierten Attribute „stack=prod“ und „project=a“ zu der angegebenen Container-Instance im Standard-Cluster hinzugefügt.

aws ecs put-attributes --attributes name=stack,value=prod,targetId=arn name=project,value=a,targetId=arn

Filtern nach Attribut

Sie können für Ihre Container-Instances einen Filter setzen, der es Ihnen ermöglicht, benutzerdefinierte Attribute anzuzeigen.

So filtern Sie Container-Instances mithilfe der Konsole nach Attributen

  1. Öffnen Sie die Amazon ECS-Konsole unter https://console.aws.amazon.com/ecs/.

  2. Wählen Sie einen Cluster, der Container-Instances beinhaltet.

  3. Wählen Sie ECS Instances.

  4. Legen Sie die Einstellungen für die Spaltensichtbarkeit über das Zahnradsymbol ( ) und die Auswahl der anzuzeigenden Attribute fest. Diese Einstellung gilt für alle Container-Cluster, die Ihrem Konto zugeordnet ist.

  5. Geben Sie im Textfeld Filter by attributes (Nach Attributen filtern) die Attribute ein oder wählen Sie Attribute aus, nach denen Sie filtern möchten. Das Format muss AttributeName: AttributeValue sein.

    Geben Sie für Filter by attributes (Nach Attributen filtern) die Attribute ein oder wählen Sie die Attribute aus, nach denen gefiltert werden soll. Nachdem Sie den Attributnamen ausgewählt haben, werden Sie aufgefordert, den Attributwert einzugeben.

  6. Fügen Sie dem Filter bei Bedarf weitere Attribute hinzu. Löschen Sie ein Attribut, indem Sie das nebenstehende X auswählen.

Filtern von Container-Instances nach Attribut mithilfe der AWS CLI

Das folgende Beispiel zeigt, wie Sie Container-Instances nach Attribut über den Befehl list-constainer-instances filtern können. Weitere Informationen über die Syntax von Filtern finden Sie unter Cluster-Abfragesprache.

Beispiel: integrierte Attribute

Im folgenden Beispiel werden integrierte Attribute zur Auflistung der g2.2xlarge-Instances verwendet.

aws ecs list-container-instances --filter "attribute:ecs.instance-type == g2.2xlarge"

Beispiel: benutzerdefiniertes Attribut

Im folgenden Beispiel werden die Instances mit dem benutzerdefinierten Attribut „stack=prod“ aufgelistet.

aws ecs list-container-instances --filter "attribute:stack == prod"

Beispiel: einen Attributwert ausschließen

Im folgenden Beispiel werden die Instances mit dem benutzerdefinierten Attribut „stack“ aufgelistet, wenn der Attributwert nicht „prod“ ist.

aws ecs list-container-instances --filter "attribute:stack != prod"

Beispiel: mehrere Attributwerte

Im folgenden Beispiel werden integrierte Attribute zur Auflistung der von Instances vom Typ t2.small oder t2.medium verwendet.

aws ecs list-container-instances --filter "attribute:ecs.instance-type in [t2.small, t2.medium]"

Beispiel: mehrere Attribute

Im folgenden Beispiel werden integrierte Attribute zur Auflistung der T2-Instances in der Availability Zone us-east-1a verwendet.

aws ecs list-container-instances --filter "attribute:ecs.instance-type =~ t2.* and attribute:ecs.availability-zone == us-east-1a"

Beispielbedingungen

Nachfolgend finden Sie Beispiele für Aufgabenplatzierungsbedingungen.

In diesem Beispiel wird die Bedingung memberOf verwendet, um Aufgaben in T2-Instances zu platzieren. Sie kann mit den folgenden Aktionen festgelegt werden: CreateService, UpdateService, RegisterTaskDefinition und RunTask.

"placementConstraints": [ { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" } ]

In dem Beispiel wird die memberOf-Bedingung verwendet, um Aufgaben in Instances mit anderen Aufgaben in der databases-Aufgabengruppe unter Beachtung aller ebenfalls angegebenen Strategien zur Aufgaben-Platzierung zu platzieren. Weitere Informationen über Aufgabengruppen finden Sie unter Aufgabengruppen. Sie kann mit den folgenden Aktionen festgelegt werden: CreateService, UpdateService, RegisterTaskDefinition und RunTask.

"placementConstraints": [ { "expression": "task:group == databases", "type": "memberOf" } ]

Mit der Bedingung distinctInstance wird jede Aufgabe in der Gruppe auf einer anderen Instance platziert. Sie kann mit den folgenden Aktionen festgelegt werden: CreateService, UpdateService und RunTask

"placementConstraints": [ { "type": "distinctInstance" } ]