

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

# 了解多變體特徵標記規則
<a name="appconfig-creating-multi-variant-feature-flags-rules"></a>

當您建立特徵標記變體時，您可以為其指定規則。規則是將內容值作為輸入並產生布林值結果作為輸出的表達式。例如，您可以定義規則，為 Beta 使用者選取標記變體，並以其帳戶 ID 識別，以測試使用者介面重新整理。在此案例中，您可以執行下列動作：

1. 建立新的特徵標記組態設定檔，稱為 *UI Refresh*。

1. 建立名為 *ui\$1refresh* 的新功能旗標。

1. 在建立特徵標記之後對其進行編輯，以新增變體。

1. 建立並啟用名為 *BetaUsers* 的新變體。

1. 定義 *BetaUsers* 規則，如果請求內容中的帳戶 ID 位於核准檢視新 Beta 體驗的帳戶 IDs 清單中，則會選取變體。

1. 確認預設變體的狀態設定為**已停用**。

**注意**  
變體會根據在主控台中定義的順序，評估為排序清單。首先評估清單頂端的變體。如果沒有規則符合提供的內容， 會 AWS AppConfig 傳回預設變體。

當 AWS AppConfig 處理特徵標記請求時，它會先比較提供的內容，其中包括 AccountID （在此範例中為 ) 與 BetaUsers 變體。如果內容符合 BetaUsers 的規則， 會 AWS AppConfig 傳回 Beta 體驗的組態資料。如果內容不包含帳戶 ID，或帳戶 ID 結尾不是 123， 會 AWS AppConfig 傳回預設規則的組態資料，這表示使用者檢視目前的生產體驗。

**注意**  
如需擷取多變體功能旗標的資訊，請參閱 [擷取基本和多變體功能旗標](appconfig-integration-retrieving-feature-flags.md)。

## 了解分割運算子
<a name="appconfig-creating-multi-variant-feature-flags-rules-operators-split"></a>

下一節說明 `split`運算子在不同案例中使用時的行為。提醒您， 會根據所提供內容值的一致雜湊，`split`評估給 `true`的指定流量百分比。為了更清楚這一點，請考慮以下使用分割搭配兩個變體的基準案例：

```
A: (split by::$uniqueId pct::20)
C: <no rule>
```

如預期，提供隨機`uniqueId`的值集會產生大約如下的分佈：

```
A: 20%
C: 80%
```

如果您新增第三個變體，但使用相同的分割百分比，如下所示：

```
A: (split by::$uniqueId pct::20)
B: (split by::$uniqueId pct::20)
C: <default>
```

最後，您會使用下列分佈：

```
A: 20%
B: 0%
C: 80%
```

由於每個變體規則會依序評估，且第一個相符項目會決定傳回的變體，因此可能會發生此潛在非預期的分佈。評估規則 A 時，20% `uniqueId`的值會相符，因此會傳回第一個變體。接著，評估規則 B。不過，`uniqueId`變體規則 A 已比對所有符合第二個分割陳述式的值，因此沒有符合 B 的值。會改為傳回預設變體。

現在請考慮第三個範例。

```
A: (split by::$uniqueId pct::20)
B: (split by::$uniqueId pct::25)
C: <default>
```

與上一個範例一樣，前 20% `uniqueId`的值符合規則 A。對於變體規則 B，所有`uniqueId`值的 25% 會符合，但先前符合的大部分規則 A。這會留下變體 B 總數的 5%，其餘接收變體 C。分佈看起來如下：

```
A: 20%
B: 5%
C: 75%
```

**使用 `seed` 屬性**  
您可以使用 `seed` 屬性來確保指定內容值的流量一致分割，無論分割運算子在何處使用。如果您不指定 `seed`，雜湊會在*本機*一致，這表示該旗標的流量會一致分割，但接收相同內容值的其他旗標可能會以不同方式分割流量。如果`seed`提供 ，則保證每個唯一值在特徵標記、組態描述檔和 之間一致地分割流量 AWS 帳戶。

一般而言，客戶在分割相同內容屬性上的流量時，會在旗標內的變體間使用相同的`seed`值。不過，有時使用不同的種子值是合理的。以下是針對規則 A 和 B 使用不同種子的範例：

```
A: (split by::$uniqueId pct::20 seed::"seed_one")
B: (split by::$uniqueId pct::25 seed::"seed_two")
C: <default>
```

與之前一樣，20% 的相符`uniqueId`值符合規則 A。這表示 80% 的值會通過，並根據變體規則 B 進行測試。由於種子不同，相符 A 的值與相符 B 的值之間沒有關聯。不過，只有 80% `uniqueId`的值要分割為該數字相符規則 B 的 25%，而沒有 75%。這適用於下列分佈：

```
A: 20%
B: 20% (25% of what falls through from A, or 25% of 80%) 
C: 60%
```