Amazon ECS タスク配置の制約事項
タスク配置の制約事項は、タスク配置中に考慮されるルールです。タスクの実行時または新しいサービスの作成時に、このタスク配置の制約事項を指定できます。タスク配置の制約事項は、既存のサービスに対しても更新できます。詳細については、「Amazon ECS タスクの配置」を参照してください。
制約タイプ
Amazon ECS では、次のタイプのタスク配置制約事項をサポートします。
distinctInstance
-
各タスクを別々のコンテナインスタンスに配置します。タスクの実行時または新しいサービスの作成時に、このタスク配置の制約事項を指定できます。
memberOf
-
式を満たすコンテナインスタンスにタスクを配置します。制約事項に関する式の構文の詳細については、「クラスタークエリ言語」を参照してください。
次のアクションを使用して
memberOf
タスク配置の制約事項を指定できます。-
タスクの実行
-
新しいサービスの作成
-
新しいタスク定義の作成
-
既存のタスク定義の新しいリビジョンの作成
-
ecs.os-family
-
LINUX または WINDOWS_SERVER_<OS_Release>_<FULL or CORE>。
有効な値は
LINUX
またはWINDOWS_SERVER_<O
です。例えば、S_Release
>_<FULL or CORE
>WINDOWS_SERVER_2022_FULL
、WINDOWS_SERVER_2022_CORE
、WINDOWS_SERVER_20H2_CORE
、WINDOWS_SERVER_2019_FULL
、WINDOWS_SERVER_2019_CORE
、WINDOWS_SERVER_2016_FULL
。次のアクションを使用して
ecs.os-family
タスク配置の制約事項を指定できます。-
タスクの実行
-
新しいサービスの作成
-
新しいタスク定義の作成
-
既存のタスク定義の新しいリビジョンの作成
-
属性
コンテナインスタンスに属性と呼ばれるカスタムメタデータを追加できます。各属性には名前とオプションの文字列値があります。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
-
インスタンスのオペレーティングシステム。この属性に指定できる値は
linux
とwindows
です。 ecs.cpu-architecture
-
インスタンスの CPU アーキテクチャ。この属性の値の例は
x86_64
とarm64
です。 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 コンテナエージェントの設定パラメータを参照してください。
カスタム属性をコンソールを使用して追加するには
Amazon ECS コンソール (https://console.aws.amazon.com/ecs/
) を開きます。 -
ナビゲーションペインで、Clustersを選択し、クラスターを選択します。
-
ECS Instancesタブで、コンテナインスタンスのチェックボックスを選択します。
-
Actions、View/Edit Attributesを選択します。
-
各属性について、以下を実行します。
-
Add attributeを選択します。
-
属性の名前と値を入力してチェックマークアイコンを選択します。
-
-
属性の追加が完了したら、[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
属性でフィルタリングする
コンテナインスタンスにフィルタを適用して、カスタム属性を表示できます。
コンソールを使用して、属性によってコンテナインスタンスにフィルタを適用する
Amazon ECS コンソール (https://console.aws.amazon.com/ecs/
) を開きます。 -
コンテナインスタンスのあるクラスターを選択します。
-
ECS Instancesを選択します。
-
歯車アイコン (
) を選択し、表示する属性を選択して、列の表示設定を指定します。この設定は、アカウントに関連付けられているすべてのコンテナクラスターで維持されます。
-
[Filter by attributes] (属性でフィルター) のテキストフィールドを使用して、フィルターを適用する属性を入力または選択します。形式はAttributeName:AttributeValueである必要があります。
[Filter by attributes] (属性でフィルター) では、フィルターを適用する属性を入力または選択します。属性名を選択すると、属性値の入力を求められます。
-
必要に応じてフィルタを適用する追加属性を追加します。属性を削除するには、属性の横にある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 インスタンスにタスクを配置します。次のアクションを使用して指定できます。CreateService、UpdateService、RegisterTaskDefinition、および RunTask。
"placementConstraints": [ { "expression": "attribute:ecs.instance-type =~ t2.*", "type": "memberOf" } ]
この例では、memberOf
制約を使用して、指定されたタスク配置方法に従って、databases
タスクグループ内の他のタスクとともにインスタンスにタスクを配置します。タスクグループの詳細については、「タスクグループ」を参照してください。次のアクションを使用して指定できます。CreateService、UpdateService、RegisterTaskDefinition、および RunTask。
"placementConstraints": [ { "expression": "task:group == databases", "type": "memberOf" } ]
distinctInstance
制約は、グループ内の各タスクを別のインスタンスに配置します。次のアクションを使用して指定できます。CreateService、UpdateService、および RunTask。
"placementConstraints": [ { "type": "distinctInstance" } ]