

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

# AWS Service Catalog テンプレートの制限
<a name="catalogs_constraints_template-constraints"></a>

**注記**  
AWS Service Catalog は、Terraform Open Source または Terraform Cloud 製品のテンプレート制約をサポートしていません。

ユーザーが製品を起動するときに使用可能なオプションを制限するには、テンプレート制約を適用します。テンプレート制約を適用し、エンドユーザーが組織のコンプライアンス要件に違反することなく製品を使用できるようにします。 AWS Service Catalog ポートフォリオ内の製品にテンプレート制約を適用します。テンプレート制約を定義するには、ポートフォリオに 1 つ以上の製品が含まれている必要があります。

テンプレート制約は、製品の基盤となる CloudFormation テンプレートで定義されているパラメータの許容値を絞り込む 1 つ以上のルールで構成されます。 CloudFormation テンプレートのパラメータでは、スタックを作成するときにユーザーが指定できる値のセットを定義します。たとえば、パラメータで、EC2 インスタンスを含むスタックを起動するときにユーザーが選択できるさまざまなインスタンスタイプを定義します。

テンプレートのパラメータ値のセットが、ポートフォリオの対象者に対して広範囲すぎる場合、製品を起動するときにユーザーが選択できる値を制限するようテンプレート制約を定義できます。たとえば、テンプレートパラメータに、スモールインスタンスタイプ (`t2.micro` や `t2.small` など) のみを使用するユーザーにとって大きすぎる EC2 インスタンスタイプが含まれている場合は、エンドユーザーが選択できるインスタンスタイプを制限するテンプレート制約を追加できます。 CloudFormation テンプレートパラメータの詳細については、 *CloudFormation ユーザーガイド*の[「パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)」を参照してください。

テンプレート制約はポートフォリオ内にバインドされます。1 つのポートフォリオで製品にテンプレート制約を適用し、別のポートフォリオに製品を含める場合、制約は 2 番目のポートフォリオの製品には適用されません。

既にユーザーと共有されている製品にテンプレート制約を適用する場合、制約は後続のすべての製品の起動と、ポートフォリオ内の製品のすべてのバージョンに対してすぐに有効になります。

テンプレート制約ルールを定義するには、ルールエディタを使用するか、 AWS Service Catalog 管理者コンソールでルールを JSON テキストとして記述します。構文と例を含むルールの詳細については、「[テンプレート制約のルール](reference-template_constraint_rules.md)」を参照してください。

ユーザーに公開する前に制約をテストするには、同じ製品を含むテストポートフォリオを作成し、そのポートフォリオで制約をテストします。

**製品にテンプレート制約を適用するには**

1. Service Catalog コンソール ([https://console.aws.amazon.com/servicecatalog/](https://console.aws.amazon.com/servicecatalog/)) を開きます。

1. [**ポートフォリオ**] ページで、テンプレート制約を適用する製品を含むポートフォリオを選択します。

1. [**制約**] セクションを展開し、[**制約の追加**] を選択します。

1. [**商品とタイプの選択**] ウィンドウの [**製品**] で、テンプレート制約を定義する製品を選択します。次に、[**制約タイプ**]で、[**テンプレート**] を選択します。**[続行]** を選択します。

1. [**テンプレート制約ビルダー**] ページで、JSON エディタまたはルールビルダーのインターフェイスを使用して制約ルールを編集します。
   + ルールの JSON コードを編集するには、[**制約テキストエディタ**] タブを選択します。このタブには、使用を開始するためにいくつかの例が含まれています。

     ルールビルダーのインターフェイスを使用してルールを構築するには、[**ルールビルダー**] タブを選択します。このタブで、製品向けにテンプレートで指定される任意のパラメータを選択し、そのパラメータで許可される値を指定できます。パラメータの種類に応じて、チェックリストで項目を選択する、数を指定する、またはカンマ区切りリストで値のセットを指定することで、許可される値を指定します。

     ルールの構築を終了したら、[**ルールの追加**] を選択します。[**ルールビルダー**] タブのテーブルにルールが表示されます。JSON 出力を確認して編集するには、[**制約テキストビルダー**] タブを選択します。

1. 制約のルールの編集を終了したら、[**送信**] を選択します。制約を表示するには、ポートフォリオの詳細ページに移動し、[**制約**] を展開します。

# テンプレート制約のルール
<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"
      }
    ]
  }
}
```