Amazon ECSタスク配置の制約事項 - Amazon Elastic Container Service

Amazon ECSタスク配置の制約事項

タスク配置の制約事項は、タスク配置中に考慮されるルールです。タスクの実行時または新しいサービスの作成時に、このタスク配置の制約事項を指定できます。タスク配置の制約事項は、既存のサービスに対しても更新できます。詳細については、「Amazon ECS タスクの配置」を参照してください。

制約タイプ

Amazon ECS では、次のタイプのタスク配置制約事項をサポートします。

distinctInstance

各タスクを別々のコンテナインスタンスに配置します。タスクの実行時または新しいサービスの作成時に、このタスク配置の制約事項を指定できます。

memberOf

式を満たすコンテナインスタンスにタスクを配置します。制約事項に関する式の構文の詳細については、「クラスタークエリ言語」を参照してください。

次のアクションを使用して memberOf タスク配置の制約事項を指定できます。

  • タスクの実行

  • 新しいサービスの作成

  • 新しいタスク定義の作成

  • 既存のタスク定義の新しいリビジョンの作成

属性

コンテナインスタンスに属性と呼ばれるカスタムメタデータを追加できます。各属性には名前とオプションの文字列値があります。Amazon ECS が提供する組み込み属性を使用することも、カスタム属性を定義することもできます。

組み込み属性

Amazon ECS は次の属性を自動的にコンテナインスタンスに適用します。

ecs.ami-id

インスタンスの起動に使用される AMI の ID。この属性の値の例は「ami-1234abcd」です。

ecs.availability-zone

インスタンスのアベイラビリティーゾーン。この属性の値の例は「us-east-1a」です。

ecs.instance-type

インスタンスのインスタンスタイプ。この属性の値の例は「g2.2xlarge」です。

ecs.os-type

インスタンスのオペレーティングシステム。この属性に指定できる値は linuxwindows です。

ecs.cpu-architecture

インスタンスの CPU アーキテクチャ。この属性の値の例は、x86_64arm64 です。

ecs.vpc-id

インスタンスが起動された VPC。この属性の値の例は「vpc-1234abcd」です。

ecs.subnet-id

インスタンスが使用しているサブネット。この属性の値の例は「subnet-1234abcd」です。

オプションの属性

Amazon ECS では、コンテナインスタンスに次の属性を追加することができます。

ecs.awsvpc-trunk-id

この属性が存在する場合、インスタンスにトランクネットワークインターフェイスがあります。詳細については、「Elastic Network Interface のトランキング」を参照してください。

ecs.outpost-arn

この属性が存在する場合は、Outpost の Amazon Resource Name (ARN) が含まれます。詳細については、AWS Outposts の Amazon Elastic Container Service を参照してください。

ecs.capability.external

この属性が存在する場合、インスタンスは外部インスタンスとして識別されます。詳細については、「外部インスタンス (Amazon ECS Anywhere)」を参照してください。

カスタム属性

コンテナインスタンスに、カスタム属性を適用できます。たとえば、「stack」という名前で「prod」という値の属性を定義できます。

カスタム属性を指定する際は、次の点を考慮する必要があります。

  • name は、1~128 文字で指定する必要があります。文字 (大文字と小文字)、数字、ハイフン、アンダースコア、スラッシュ、バックスラッシュ、ピリオドを使用できます。

  • value は、1 ~ 128 文字で指定する必要があります。文字 (大文字と小文字)、数字、ハイフン、アンダースコア、ピリオド、アットマーク (@)、スラッシュ、バックスラッシュ、コロン、またはスペースを使用できます。値の先頭または末尾にスペースを含めることはできません。

属性の追加

インスタンス登録時に、コンテナエージェントを使用して、または AWS Management Consoleを使用して手動で、カスタム属性を追加できます。コンテナエージェントの使用の詳細については、Amazon ECS コンテナエージェントの設定パラメータを参照してください。

カスタム属性をコンソールを使用して追加するには

  1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。

  2. ナビゲーションペインで、[Clusters] を選択し、クラスターを選択します。

  3. [ECS Instances] タブで、コンテナインスタンスのチェックボックスを選択します。

  4. [Actions]、[View/Edit Attributes] を選択します。

  5. 各属性について、以下を実行します。

    1. [Add attribute] を選択します。

    2. 属性の名前と値を入力し、チェックマークアイコンを選択します。

  6. 属性の追加が完了したら、[Close] を選択します。

AWS CLI を使用してカスタム属性を追加する

次の例では、put-attributes コマンドを使用してカスタム属性を追加する方法を説明します。

例: 単一属性

以下は、指定のコンテナインスタンスにカスタム属性「stack=prod」を追加する例です。

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

例: 複数の属性

以下は、指定のコンテナインスタンスにカスタム属性「stack=prod」および「project=a」を追加する例です。

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

属性でフィルタリングする

コンテナインスタンスにフィルタを適用して、カスタム属性を表示できます。

コンソールを使用して、属性によってコンテナインスタンスにフィルタを適用する

  1. Amazon ECS コンソール (https://console.aws.amazon.com/ecs) を開きます。

  2. コンテナインスタンスのあるクラスターを選択します。

  3. [ECS Instances] を選択します。

  4. 歯車アイコン ( ) を選択し、表示する属性を選択して、列の表示設定を指定します。この設定は、アカウントに関連付けられているすべてのコンテナクラスターで維持されます。

  5. [Filter by attributes] テキストフィールドを使用すると、フィルタを適用する属性を入力または選択できます。形式は AttributeName:AttributeValue である必要があります。

    [Filter by attributes] で、フィルタを適用する属性を入力または選択します。属性名を選択した後で、属性値の入力を求められます。

  6. 必要に応じてフィルタを適用する追加属性を追加します。属性を削除するには、属性の横にある [X] を選択します。

AWS CLI を使用して属性でコンテナインスタンスにフィルタを適用する

次の例は、list-constainer-instances コマンドを使用して、属性でコンテナインスタンスをフィルタリングする方法を示しています。フィルタの構文の詳細については、「クラスタークエリ言語」を参照してください。

例: 組み込み属性

次の例では、g2.2xlarge のインスタンスをリスト表示する組み込み属性を使用しています。

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

例: カスタム属性

次の例では、カスタム属性「stack=prod」を持つインスタンスがリスト表示されます。

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

例: 属性値を除外する

次の例では、カスタム属性が「stack」であり属性値が「prod」ではないインスタンスをリスト表示します。

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

例: 複数の属性値

次の例では、組み込み属性を使用して、タイプが t2.small または t2.medium のインスタンスをリスト表示します。

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

例: 複数の属性

次の例は、組み込み属性を使用して us-east-1a アベイラビリティーゾーンの T2 インスタンスをリスト表示します。

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

制約事項の例

以下はタスク配置の制約事項の例です。

この例では、memberOf 制約を使用して T2 インスタンスにタスクを配置します。次のアクションを使用して指定できます。CreateServiceUpdateServiceRegisterTaskDefinition、および RunTask

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

この例では、memberOf 制約を使用して、指定されたタスク配置方法に従って、databases タスクグループ内の他のタスクとともにインスタンスにタスクを配置します。タスクグループの詳細については、タスクグループ を参照してください。次のアクションを使用して指定できます。CreateServiceUpdateServiceRegisterTaskDefinition、および RunTask

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

distinctInstance 制約は、グループ内の各タスクを別のインスタンスに配置します。次のアクションを使用して指定できます。CreateServiceUpdateService、および RunTask

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