

새로운 *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>

지정된 문자열이 문자열 목록의 값과 하나 이상 일치하면 `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>

문자열 목록의 각 멤버가 두 번째 문자열 목록의 값과 하나 이상 일치하면 `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>

다음 함수는 사용자가 유효한 Virtual Private Cloud(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>

두 값을 비교하여 동일한지 여부를 확인합니다. 두 값이 같으면 `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`로 평가되려면 `EnvironmentType` 파라미터의 값이 `prod`와 같아야 합니다.

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

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

`false`로 평가되는 조건에 대해 `true`를 반환하고 `true`로 평가되는 조건에 대해 `false`를 반환합니다. `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>

다음 예제가 `true`로 평가되려면 `EnvironmentType` 파라미터의 값이 `prod`와 같지 않아야 합니다.

```
"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` 함수는 값 목록을 반환합니다. 여기에서 각 멤버는 `Department` 태그가 있는 VPC의 해당 태그 값입니다.

```
"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*