

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

# 範本限制規則
<a name="reference-template_constraint_rules"></a>

定義 AWS Service Catalog 產品組合中範本限制的規則說明最終使用者何時可以使用範本，以及他們可以為用於建立其嘗試使用之產品之 CloudFormation 範本中宣告的參數指定哪些值。規則有助於防止最終使用者在無意間指定了錯誤的值。例如，您可以新增規則來驗證最終使用者是否在指定的 VPC 中指定有效的子網路，或測試環境使用的`m1.small`執行個體類型。在建立產品資源之前， CloudFormation 會使用規則來驗證參數值。

每個規則包含兩種屬性：規則條件 (選用) 和宣告 (必要)。規則條件決定規則是否生效。宣告說明了使用者可針對特定參數指定的值。如果您未定義規則條件，則該規則的宣告一律生效。若要定義規則條件，您可以使用*規則特定的內部函數*，這些函式只能在範本的 `Rules` 區塊中使用。您可以建立巢狀函式，但規則條件或宣告的最終結果必須為 true 或 false。

舉例來說，假設您在 `Parameters` 區塊中宣告了 VPC 和子網路參數。您可以建立一個規則，用來驗證特定的子網路是否在特定的 VPC 中。因此，當使用者指定 VPC 時， 會 CloudFormation 評估宣告，以在建立或更新堆疊之前檢查子網路參數值是否在該 VPC 中。如果參數值無效，則 CloudFormation 立即無法建立或更新堆疊。如果使用者未指定 VPC， CloudFormation 則不會檢查子網路參數值。

## 語法
<a name="template-constraint-rules-syntax"></a>

範本的 `Rules` 區塊包含了金鑰名稱 `Rules`，後面接著單一冒號。所有的規則宣告皆會以括弧括起。如果宣告多項規則，這些規則會以逗號分隔。對於每項規則，您會在引號中宣告其邏輯名稱，後面依序接著冒號和括號，括號之中是規則條件與宣告。

規則可包含 `RuleCondition` 屬性，而且必須包含 `Assertions` 屬性。針對每項規則，您只能定義一個規則條件；您可以在 `Assertions` 屬性中定義一個或多個宣告。您可以使用規則特定的內部函數，來定義規則條件和宣告，如下列的虛擬範本所示：

```
"Rules":{
   "Rule01":{
      "RuleCondition":{
         "Rule-specific intrinsic function"
      },
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         },
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   },
   "Rule02":{
      "Assertions":[
         {
            "Assert":{
               "Rule-specific intrinsic function"
            },
            "AssertDescription":"Information about this assert"
         }
      ]
   }
}
```

虛擬範本顯示包含兩個名為 `Rule01` 和 `Rule02` 規則的 `Rules` 區段。`Rule01` 包含規則條件和兩個聲明。如果規則條件中的函式計算結果為 true，則會評估和套用每個宣告中的兩種函式。如果規則條件為 false，該規則不會生效。`Rule02` 始終生效，因為它沒有規則條件，這表示一律評估和套用一個宣告。

如需定義規則條件和聲明的規則特定內部函數資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[AWS 規則函數](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html)。

## 範例：有條件地驗證參數值
<a name="template-constraint-rules-example"></a>

下列兩項規則會檢查 `InstanceType` 參數的值。視環境參數 (`test` 或 `prod`) 的值而定，使用者必須針對 `m1.small` 參數指定 `m1.large` 或 `InstanceType`。`InstanceType` 與 `Environment` 參數必須在同一個範本的 `Parameters` 區塊中宣告。

```
"Rules" : {
  "testInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "test"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.small"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the test environment, the instance type must be m1.small"
      }
    ]
  },
  "prodInstanceType" : {
    "RuleCondition" : {"Fn::Equals":[{"Ref":"Environment"}, "prod"]},
    "Assertions" : [
      {
        "Assert" :  { "Fn::Contains" : [ ["m1.large"], {"Ref" : "InstanceType"} ] },
        "AssertDescription" : "For the prod environment, the instance type must be m1.large"
      }
    ]
  }
}
```