

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# テンプレート制約のルール
<a name="reference-template_constraint_rules"></a>

 AWS Service Catalog ポートフォリオでテンプレート制約を定義するルールでは、エンドユーザーがテンプレートを使用できるタイミングと、使用しようとしている製品の作成に使用される CloudFormation テンプレートで宣言されたパラメータに指定できる値について説明します。ルールは、エンドユーザーが意図せずに不適切な値を指定することを防ぐために役立ちます。たとえば、エンドユーザーが特定の VPC で有効なサブネットを指定したか、テスト環境に`m1.small`インスタンスタイプを使用したかを検証するルールを追加できます。 は、製品のリソースを作成する前に、ルール CloudFormation を使用してパラメータ値を検証します。

各ルールは、ルール条件 (オプション) とアサーション (必須) の 2 つのプロパティで構成されます。ルール条件では、ルールがいつ有効になるかを決定します。アサーションでは、特定のパラメータにユーザーが指定できる値を示します。ルール条件を定義しない場合、ルールのアサーションが常に有効になります。ルール条件とアサーションを定義するには、ルール固有の組み込み関数を使用します。これは、テンプレートの `Rules` セクションでのみ使用できる関数です。関数をネストすることができますが、ルール条件またはアサーションの最終結果は、true または false である必要があります。

例として、`Parameters` セクションで VPC とサブネットパラメータを宣言したとします。特定のサブネットが特定の VPC 内にあることを検証するルールを作成できます。したがって、ユーザーが VPC を指定すると、 はアサーション CloudFormation を評価して、スタックを作成または更新する前にサブネットパラメータ値がその VPC にあるかどうかを確認します。パラメータ値が無効の場合、 CloudFormation すぐにスタックの作成または更新に失敗します。ユーザーが VPC を指定しない場合、サブネットパラメータ値はチェック CloudFormation されません。

## 構文
<a name="template-constraint-rules-syntax"></a>

テンプレートの `Rules` セクションは、キーの名前 `Rules` とそれに続く単一のコロンで構成されます。ルールの宣言全体を中括弧で囲みます。複数のルールを宣言する場合は、カンマで区切ります。ルールごとに、引用符で囲んだ論理名、単一のコロン、およびルール条件とアサーションを囲む中括弧から成る形式で宣言します。

ルールには `RuleCondition` プロパティを含めることができ、`Assertions` プロパティを含める必要があります。ルールごとに、1 つのルール条件のみを定義できます。`Assertions` プロパティ内に 1 つ以上のアサーションを定義できます。次の擬似テンプレートに示すように、ルール固有の組み込み関数を使用してルール条件とアサーションを定義します。

```
"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"
         }
      ]
   }
}
```

擬似テンプレートには、`Rules` および `Rule01` という 2 つのルールを含む `Rule02` セクションが表示されます。`Rule01`​ には、ルール条件と 2 つのアサーションが含まれます。ルール条件の関数が true に評価される場合、各アサーションの両方の関数が評価および適用されます。ルール条件が false の場合、ルールは有効になりません。`Rule02` にはルール条件がないため、常に有効になります。つまり、1 つのアサーションが常に評価および適用されます。

ルール条件とアサーションを定義するルール固有の組み込み関数については、「AWS CloudFormation ユーザーガイド」の「[AWS ルール関数](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-rules.html)」を参照してください。

## 例: パラメータ値の条件付きの確認
<a name="template-constraint-rules-example"></a>

次の 2 つのルールでは、`InstanceType` パラメータの値を確認します。Environment パラメータの値 (`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"
      }
    ]
  }
}
```