

これは新しい CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『[AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)』を参照してください。

# ルール関数
<a name="intrinsic-function-reference-rules"></a>

ルール関数は、CloudFormation テンプレートの `Rules` セクションでのみ機能する特殊な関数です。これらの関数は、カスタムロジックを使用してパラメータ値を検証するのに役立ちます。すべての検証は、CloudFormation がリソースを作成または更新する前に行われます。

ルールは、標準のパラメータ制約が不十分な場合に便利です。例えば、SSL が有効になっている場合は、証明書とドメイン名の両方を指定する必要があります。ルールを使用すると、これらの依存関係を確実に満たすことができます。

ルールの条件またはアサーションで、`Fn::Equals`、`Fn::Not`、`Fn::RefAll` などの組み込み関数を使用できます。条件プロパティによって、CloudFormation がアサーションを適用するかどうかが決まります。条件が `true` に評価された場合、スタックの作成または更新時に、CloudFormation はアサーションを評価してパラメータ値が有効かどうか確認します。パラメータ値が有効ではない場合、CloudFormation はスタックを作成または更新しません。条件が `false` に評価される場合、CloudFormation はパラメータ値を確認せず、スタックオペレーションに進みます。

テンプレートでルールを初めて使用する場合は、まず「*AWS CloudFormation ユーザーガイド*」の「[CloudFormation テンプレートの Rules 構文](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/rules-section-structure.html)」トピックを確認することをお勧めします。

**Topics**
+ [`Fn::And`](#fn-and)
+ [`Fn::Contains`](#fn-contains)
+ [`Fn::EachMemberEquals`](#fn-eachmemberequals)
+ [`Fn::EachMemberIn`](#fn-eachmemberin)
+ [`Fn::Equals`](#fn-equals)
+ [`Fn::Not`](#fn-not)
+ [`Fn::Or`](#fn-or)
+ [`Fn::RefAll`](#fn-refall)
+ [`Fn::ValueOf`](#fn-valueof)
+ [`Fn::ValueOfAll`](#fn-valueofall)
+ [サポートされている関数](#supported-rule-functions)
+ [サポートされている属性](#rules-parameter-attributes)

## `Fn::And`
<a name="fn-and"></a>

指定されたすべての条件が `true` に評価された場合は `true` を返します。条件のいずれかが `false` に評価された場合は `false` を返します。`Fn::And` は AND 演算子として機能します。含めることができる条件の最小数は 2 で、最大数は 10 です。

### 宣言
<a name="fn-and-declaration"></a>

```
"Fn::And" : [{condition}, {...}]
```

### パラメータ
<a name="fn-and-parameters"></a>

*condition*  
`true` または `false` に評価されるルール固有の組み込み関数。

### 例
<a name="fn-and-example"></a>

次の例では、参照されるセキュリティグループの名前が `true` と等しい場合、および `sg-mysggroup` パラメータ値が `InstanceType` または `t3.large` の場合に、`t3.small` と評価されます。

```
"Fn::And": [
  {
    "Fn::Equals": [
      "sg-mysggroup",
      {"Ref": "ASecurityGroup"}
    ]
  },
  {
    "Fn::Contains": [
      [
        "t3.large",
        "t3.small"
      ],
      {"Ref": "InstanceType"}
    ]
  }
]
```

## `Fn::Contains`
<a name="fn-contains"></a>

指定された文字列が文字列のリストの少なくとも 1 つの値と一致する場合に、`true` を返します。

### 宣言
<a name="fn-contains-declaration"></a>

```
"Fn::Contains" : [[list_of_strings], string]
```

### パラメータ
<a name="fn-contains-parameters"></a>

*list\$1of\$1strings*  
`"A", "B", "C"` のような文字列のリスト。

*文字列*  
文字列のリストに対して比較する、`"A"` などの文字列。

### 例
<a name="fn-contains-example"></a>

次の関数は、`true` パラメータ値がリスト (`InstanceType` または `t3.large`) に含まれる場合に、`t3.small` と評価されます。

```
"Fn::Contains" : [
  ["t3.large", "t3.small"], {"Ref" : "InstanceType"}
]
```

## `Fn::EachMemberEquals`
<a name="fn-eachmemberequals"></a>

指定された文字列がリストのすべての値と一致した場合に、`true` を返します。

### 宣言
<a name="fn-eachmemberequals-declaration"></a>

```
"Fn::EachMemberEquals" : [[list_of_strings], string]
```

### パラメータ
<a name="fn-eachmemberequals-parameters"></a>

*list\$1of\$1strings*  
`"A", "B", "C"` のような文字列のリスト。

*文字列*  
文字列のリストに対して比較する、`"A"` などの文字列。

### 例
<a name="fn-eachmemberequals-example"></a>

次の関数は、タイプ `AWS::EC2::VPC::Id` のすべてのパラメータの `Department` タグが `IT` という値を持つ場合に `true` を返します。

```
"Fn::EachMemberEquals" : [
  {"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]}, "IT"
]
```

## `Fn::EachMemberIn`
<a name="fn-eachmemberin"></a>

文字列のリストの各メンバーが、文字列の 2 番目のリストの少なくとも 1 つの値に一致する場合に、`true` を返します。

### 宣言
<a name="fn-eachmemberin-declaration"></a>

```
"Fn::EachMemberIn" : [[strings_to_check], [strings_to_match]]
```

### パラメータ
<a name="fn-eachmemberin-parameters"></a>

*strings\$1to\$1check*  
`"A", "B", "C"` のような文字列のリスト。CloudFormation は `strings_to_check` パラメータの各メンバーが `strings_to_match` パラメータにあるかどうか確認します。

*strings\$1to\$1match*  
`"A", "B", "C"` のような文字列のリスト。`strings_to_match` パラメータの各メンバーは、`strings_to_check` パラメータのメンバーに対して比較されます。

### 例
<a name="fn-eachmemberin-example"></a>

次の関数は、有効な仮想プライベートクラウド (VPC) にあるサブネットをユーザーが指定するかどうかを確認します。VPC は、ユーザーがスタックを操作しているアカウントおよびリージョンに存在する必要があります。関数は、`AWS::EC2::Subnet::Id` タイプのすべてのパラメータに適用されます。

```
"Fn::EachMemberIn" : [ 
  {"Fn::ValueOfAll" : ["AWS::EC2::Subnet::Id", "VpcId"]}, {"Fn::RefAll" : "AWS::EC2::VPC::Id"}
]
```

## `Fn::Equals`
<a name="fn-equals"></a>

2 つの値を比較し、同じかどうかを判断します。2 つの値が同じ場合は `true` を返し、同じでない場合は `false` を返します。

### 宣言
<a name="fn-equals-declaration"></a>

```
"Fn::Equals" : ["value_1", "value_2"]
```

### パラメータ
<a name="fn-equals-parameters"></a>

*`value`*  
別の値と比較する任意のタイプの値。

### 例
<a name="fn-equals-example"></a>

次の例では、`true` パラメータの値が と等しい場合に `prod``EnvironmentType` に評価されます。

```
"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]
```

## `Fn::Not`
<a name="fn-not"></a>

`true` に評価される条件に対しては、`false` を返します。`false` に評価される条件に対しては、`true` を返します。`Fn::Not` は NOT 演算子として機能します。

### 宣言
<a name="fn-not-declaration"></a>

```
"Fn::Not" : [{condition}]
```

### パラメータ
<a name="fn-not-parameters"></a>

*`condition`*  
`true` または `false` に評価されるルール固有の組み込み関数。

### 例
<a name="fn-not-example"></a>

次の例では、`EnvironmentType` パラメータの値が `prod` と等しくない場合に `true` に評価されます。

```
"Fn::Not" : [{"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]}]
```

## `Fn::Or`
<a name="fn-or"></a>

指定された条件のいずれかが `true` に評価された場合は `true` を返します。すべての条件が `false` に評価された場合は `false` を返します。`Fn::Or` は OR 演算子として機能します。含めることができる条件の最小数は 2 で、最大数は 10 です。

### 宣言
<a name="fn-or-declaration"></a>

```
"Fn::Or" : [{condition}, {...}]
```

### パラメータ
<a name="fn-or-parameters"></a>

*`condition`*  
`true` または `false` に評価されるルール固有の組み込み関数。

### 例
<a name="fn-or-example"></a>

次の例では、参照されるセキュリティグループの名前が `true` と等しい場合、または `sg-mysggroup` パラメータ値が `InstanceType` または `t3.large` の場合に、`t3.small` と評価されます。

```
"Fn::Or" : [
  {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]},
  {"Fn::Contains" : [["t3.large", "t3.small"], {"Ref" : "InstanceType"}]}
]
```

## `Fn::RefAll`
<a name="fn-refall"></a>

指定したパラメータ型のすべての値を返します。

### 宣言
<a name="fn-refall-declaration"></a>

```
"Fn::RefAll" : "parameter_type"
```

### パラメータ
<a name="fn-refall-parameters"></a>

*parameter\$1type*  
AWS や `AWS::EC2::SecurityGroup::Id` などの `AWS::EC2::VPC::Id` 固有のパラメータ型。詳細については、『AWS CloudFormation ユーザーガイド』の「[サポートされている AWS 固有のパラメータタイプ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported)」を参照してください。

### 例
<a name="fn-refall-example"></a>

次の関数は、スタックを作成または更新中のリージョンと AWS アカウント のすべての VPC ID のリストを返します。

```
"Fn::RefAll" : "AWS::EC2::VPC::Id"
```

## `Fn::ValueOf`
<a name="fn-valueof"></a>

特定のパラメータおよび属性の値の属性値またはリストを返します。

### 宣言
<a name="fn-valueof-declaration"></a>

```
"Fn::ValueOf" : [ "parameter_logical_id", "attribute" ]
```

### パラメータ
<a name="fn-valueof-parameters"></a>

*属性*  
値の取得元となる属性の名前。属性の詳細については、「[サポートされている属性](#rules-parameter-attributes)」を参照してください。

*parameter\$1logical\$1id*  
属性値の取得元となるパラメータの名前。パラメータは、テンプレートの [`Parameters`] セクションで宣言する必要があります。

### 例
<a name="fn-valueof-examples"></a>

次の例では、`ElbVpc` パラメータで指定された VPC の `Department` タグの値を返します:

```
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
```

パラメータに複数の値を指定する場合、Fn::ValueOf 関数はリストを返すことができます。例えば、複数のサブネットを指定して、各メンバーが特定のサブネットのアベイラビリティゾーンであるアベイラビリティゾーンのリストを取得できます。

```
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
```

## `Fn::ValueOfAll`
<a name="fn-valueofall"></a>

特定のパラメータ型および属性のすべての属性値のリストを返します。

### 宣言
<a name="fn-valueofall-declaration"></a>

```
"Fn::ValueOfAll" : ["parameter_type", "attribute"]
```

### パラメータ
<a name="fn-valueofall-parameters"></a>

*属性*  
値の取得元となる属性の名前。属性の詳細については、「[サポートされている属性](#rules-parameter-attributes)」を参照してください。

*parameter\$1type*  
AWS や `AWS::EC2::SecurityGroup::Id` などの `AWS::EC2::VPC::Id` 固有のパラメータ型。詳細については、『AWS CloudFormation ユーザーガイド』の「[サポートされている AWS 固有のパラメータタイプ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-supplied-parameter-types.html#aws-specific-parameter-types-supported)」を参照してください。

### 例
<a name="fn-valueofall-example"></a>

次の例では、`Fn::ValueOfAll` 関数は値のリストを返します。各メンバーは、そのタグを持つ VPC の `Department` タグ値です。

```
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
```

## サポートされている関数
<a name="supported-rule-functions"></a>

`Fn::ValueOf` および `Fn::ValueOfAll` 関数内で他の関数を使用することはできません。ただし、他のすべてのルール固有の組み込み関数内では、以下の関数を使用できます。
+ `Ref`
+ その他のルール固有の組み込み関数

## サポートされている属性
<a name="rules-parameter-attributes"></a>

次の一覧に、特定のリソースおよびパラメータ型に対して取得できる属性値を示します。

`AWS::EC2::VPC::Id` パラメータタイプまたは VPC ID  
+ DefaultNetworkAcl
+ DefaultSecurityGroup
+ タグ。*tag\$1key*

`AWS::EC2::Subnet::Id` パラメータタイプまたはサブネット ID  
+ AvailabilityZone
+ タグ。*tag\$1key*
+ VpcId

`AWS::EC2::SecurityGroup::Id` パラメータタイプまたはセキュリティグループ ID  
+ タグ。*tag\$1key*