

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立表達式以定義 Amazon ECS 任務的容器執行個體
<a name="cluster-query-language"></a>

叢集查詢是可讓您將物件分組的運算式。例如，您可以依屬性 (例如可用區域、執行個體類型或自訂中繼資料) 將容器執行個體分組。如需詳細資訊，請參閱[Amazon ECS 容器執行個體屬性](task-placement-constraints.md#attributes)。

在您定義一組容器執行個體之後，即可自訂 Amazon ECS 以根據群組在容器執行個體上放置任務。如需詳細資訊，請參閱 [將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md) 和 [建立 Amazon ECS 滾動更新部署](create-service-console-v2.md)。您也可以在列出容器執行個體時套用群組篩選條件。

## 運算式語法
<a name="expression-syntax"></a>

運算式的語法如下：

```
subject operator [argument]
```

**主旨**  
要評估的屬性或欄位。

`agentConnected`  
依 Amazon ECS 容器代理程式連線狀態來選取容器執行個體。您可以使用此篩選條件來搜尋具有代理程式已中斷連線的執行個體容器。  
有效運算子：equals (==)、not\$1equals (\$1=)、in、not\$1in (\$1in)、matches (=\$1)、not\$1matches (\$1\$1)

`agentVersion`  
依 Amazon ECS 容器代理程式版本來選取容器執行個體。您可以使用此篩選條件，尋找正在執行過期版本 Amazon ECS 容器代理程式的執行個體。  
有效運算子：equals (==)、not\$1equals (\$1=)、greater\$1than (>)、greater\$1than\$1equal (>=)、less\$1than (<)、less\$1than\$1equal (<=)

`attribute:attribute-name`  
依屬性選取容器執行個體。如需詳細資訊，請參閱[Amazon ECS 容器執行個體屬性](task-placement-constraints.md#attributes)。

`ec2InstanceId`  
依 Amazon EC2 執行個體 ID 選取容器執行個體。  
有效運算子：equals (==)、not\$1equals (\$1=)、in、not\$1in (\$1in)、matches (=\$1)、not\$1matches (\$1\$1)

`registeredAt`  
依容器執行個體註冊日期來選取容器執行個體。您可以使用此篩選條件，尋找新註冊執行個體或非常舊的執行個體。  
有效運算子：equals (==)、not\$1equals (\$1=)、greater\$1than (>)、greater\$1than\$1equal (>=)、less\$1than (<)、less\$1than\$1equal (<=)  
有效日期格式：2018-06-18T22:28:28\$100:00, 2018-06-18T22:28:28Z, 2018-06-18T22:28:28, 2018-06-18

`runningTasksCount`  
依執行中的任務數量來選取容器執行個體。您可以使用此篩選條件來尋找空白或接近空白 (在其上執行的任務很少) 的執行個體。  
有效運算子：equals (==)、not\$1equals (\$1=)、greater\$1than (>)、greater\$1than\$1equal (>=)、less\$1than (<)、less\$1than\$1equal (<=)

`task:group`  
依任務群組選取容器執行個體。如需詳細資訊，請參閱[將相關的 Amazon ECS 任務分在同一組](task-groups.md)。

**運算子**  
比較運算子。下列是支援的運算子。


|  運算子  |  Description  | 
| --- | --- | 
|  ==、equals  |  字串相等  | 
|  \$1=、not\$1equals  |  字串不相等  | 
|  >、greater\$1than  |  大於  | 
|  >=、greater\$1than\$1equal  |  大於或等於  | 
|  <、less\$1than  |  小於  | 
|  <=、less\$1than\$1equal  |  小於或等於  | 
|  exists  |  主旨存在  | 
|  \$1exists、not\$1exists  |  主旨不存在  | 
|  in  |  引數清單中的值  | 
|  \$1in、not\$1in  |  不在引數清單中的值  | 
|  =\$1、matches  |  模式相符  | 
|  \$1\$1、not\$1matches  |  模式不相符  | 

**注意**  
單一運算式不能包含括號。不過，可以使用括號指定複合運算式中的優先順序。

**引數**  
對於許多運算子而言，引數是一種常值。

`in` 和 `not_in` 運算子需要有參數清單做為引數。您可以指定引數清單，如下所示：

```
[argument1, argument2, ..., argumentN]
```

matches 和 not\$1matches 運算子需要有符合 Java 一般運算式語法的引數。如需詳細資訊，請參閱 [java.util.regex.Pattern](http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html)。

**複合運算式**

您可以使用下列布林值運算子來合併運算式：
+ &&, 和
+ \$1\$1, 或
+ \$1, 非

您可以使用括號來指定優先順序：

```
(expression1 or expression2) and expression3
```

## 範例運算式
<a name="expression-examples"></a>

下列是範例運算式。

**範例：字串相等**  
下列運算式會選取具有指定之執行個體類型的執行個體。

```
attribute:ecs.instance-type == t2.small
```

**範例：引數清單**  
下列運算式會選取 us-east-1a 或 us-east-1b 可用區域中的執行個體。

```
attribute:ecs.availability-zone in [us-east-1a, us-east-1b]
```

**範例：複合運算式**  
下列運算式會選取不在 us-east-1d 可用區域中的 G2 執行個體。

```
attribute:ecs.instance-type =~ g2.* and attribute:ecs.availability-zone != us-east-1d
```

**範例：任務親和性**  
下列運算式會選取在 `service:production` 群組中託管任務的執行個體。

```
task:group == service:production
```

**範例：任務反親和性**  
下列運算式會選取未在資料庫群組中託管任務的執行個體。

```
not(task:group == database)
```

**範例：執行中任務計數**  
下列運算式會選取僅執行一項任務的執行個體。

```
runningTasksCount == 1
```

**範例：Amazon ECS 容器代理程式版本**  
下列運算式會選取正在執行低於 1.14.5 版本容器代理程式的執行個體。

```
agentVersion < 1.14.5
```

**範例：執行個體註冊時間**  
下列運算式會選取在 2018 年 2 月 13 日之前註冊的執行個體。

```
registeredAt < 2018-02-13
```

**範例：Amazon EC2 執行個體 ID**  
下列運算式會選取具有下列 Amazon EC2 執行個體 ID 的執行個體。

```
ec2InstanceId in ['i-abcd1234', 'i-wxyx7890']
```