メニュー
Amazon EC2 Container Service
開発者ガイド (API Version 2014-11-13)

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

タスク配置の制約事項は、タスク配置中に考慮されるルールです。詳細については、「Amazon ECS タスクの配置」を参照してください。

制約タイプ

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

distinctInstance

各タスクを別々のコンテナインスタンスに配置します。

memberOf

式を満たすコンテナインスタンスにタスクを配置します。

式の構文の詳細については、「クラスタークエリ言語」を参照してください。

属性

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

組み込み属性

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

ecs.ami-id

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

ecs.availability-zone

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

ecs.instance-type

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

ecs.os-type

インスタンスのオペレーティングシステム。この属性に指定できる値は「linux」および「windows」です。

カスタム属性

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

属性の追加

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

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

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

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

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

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

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

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

    2. 属性の名前と値を入力します。

    3. チェックマークアイコンを選択して属性を保存します。

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

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

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

例: 単一属性

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

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

例: 複数の属性

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

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

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

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

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

  1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。

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

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

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

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

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

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

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

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

例: 組み込み属性

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

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

例: カスタム属性

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

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

例: 属性値を除外する

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

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

例: 複数の属性値

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

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

例: 複数の属性

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

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

タスクグループ

一連の関連するタスクをタスクグループとして識別できます。同じタスクグループ名のすべてのタスクは、スプレッド配置の実行時にセットとしてみなされます。たとえば、データベースやウェブサーバーのように、1 つのクラスターで異なるアプリケーションを実行しているとします。データベースを確実に各アベイラビリティーゾーン間に均等に分散するには、データベースを「databases」という名前のタスクグループに追加して、このタスクグループをタスク配置の制約として使用します。

RunTask または StartTask アクションを使用してタスクを起動する際に、そのタスクのタスクグループの名前を指定できます。タスクのタスクグループを指定しない場合、デフォルトの名前は、タスク定義のファミリー名です (たとえば、family:my-task-definition)。

サービススケジューラーによって起動されるタスクの場合は、タスクグループ名はサーバーの名前です (たとえば、service:my-service-name)。

制限

  • タスクグループ名は 255 文字以下にする必要があります。

  • 各タスクを 1 つのグループと同一にできます。

  • タスクを起動した後でタスクグループを変更することはできません。

制約事項の例

次のアクションを使用してタスク配置の制約を指定できます。CreateServiceRegisterTaskDefinition、および RunTask

次の制約は T2 インスタンスにタスクを配置します。

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

次の制約はデータベースタスクグループのインスタンスにタスクを配置します。

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

次の制約はグループ内の各タスクを別のインスタンスに配置します。

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