

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Service Catalog 템플릿 제약 조건
<a name="catalogs_constraints_template-constraints"></a>

**참고**  
AWS Service Catalog 는 Terraform Open Source 또는 Terraform Cloud 제품에 대한 템플릿 제약 조건을 지원하지 않습니다.

최종 사용자가 제품을 시작할 때 사용할 수 있는 옵션을 제한하려면 템플릿 제약 조건을 적용합니다. 최종 사용자가 조직의 규정 준수 요건을 위반하지 않고 제품을 사용할 수 있도록 템플릿 제약 조건을 적용합니다. AWS Service Catalog 포트폴리오의 제품에 템플릿 제약 조건을 적용합니다. 템플릿 제약 조건을 정의하려면 포트폴리오에 제품이 하나 이상 들어 있어야 합니다.

템플릿 제약 조건은 제품의 기본 CloudFormation 템플릿에 정의된 파라미터의 허용 가능한 값을 좁히는 하나 이상의 규칙으로 구성됩니다. CloudFormation 템플릿의 파라미터는 사용자가 스택을 만들 때 지정할 수 있는 값 세트를 정의합니다. 예를 들어 파라미터는 EC2 인스턴스가 포함된 스택을 시작할 때 사용자가 선택할 수 있는 다양한 인스턴스 유형을 정의할 수 있습니다.

템플릿의 파라미터 값 세트가 포트폴리오의 대상 고객에게 너무 광범위할 경우, 사용자가 제품을 시작할 때 선택할 수 있는 값을 제한하도록 템플릿 제약 조건을 정의할 수 있습니다. 예를 들어 템플릿 파라미터에 스몰 인스턴스 유형(예: `t2.micro` 또는 `t2.small`)만 사용해야 하는 사용자에게 너무 큰 EC2 인스턴스 유형이 있을 경우, 최종 사용자가 선택할 수 있는 인스턴스 유형을 제한하도록 템플릿 제약 조건을 추가할 수 있습니다. CloudFormation 템플릿 파라미터에 대한 자세한 내용은 *CloudFormation 사용 설명서*의 [파라미터를](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html) 참조하세요.

템플릿 제약 조건은 한 포트폴리오 내에만 적용됩니다. 한 포트폴리오의 제품에 템플릿 제약 조건을 적용한 후 다른 포트폴리오의 제품을 포함시킬 경우, 두 번째 포트폴리오의 제품에는 제약 조건이 적용되지 않습니다.

사용자와 이미 공유한 제품에 템플릿 제약 조건을 적용하는 경우, 모든 후속 제품 시작 및 포트폴리오의 모든 제품 버전에 대해 제약 조건이 즉시 활성화됩니다.

규칙 편집기를 사용하거나 AWS Service Catalog 관리자 콘솔에서 규칙을 JSON 텍스트로 작성하여 템플릿 제약 규칙을 정의합니다. 구문 및 예제를 비롯한 규칙에 대한 자세한 내용은 [템플릿 제약 조건 규칙](reference-template_constraint_rules.md)을 참조하십시오.

사용자에게 릴리스하기 전에 제약 조건을 테스트하려면 동일한 제품이 들어 있는 테스트 포트폴리오를 만들고 해당 포트폴리오에서 제약 조건을 테스트합니다.

**제품에 템플릿 제약 조건을 적용하려면**

1. Service Quotas 콘솔([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 사용하여 파라미터 값을 검증합니다.

각 규칙은 규칙 조건(선택 사항)과 어설션(필수)이라는 두 가지 속성으로 구성됩니다. 규칙 조건은 규칙이 적용되는 시기를 결정합니다. 어설션은 사용자가 특정 파라미터에 대해 지정할 수 있는 값을 설명합니다. 규칙 조건을 정의하지 않은 경우, 규칙의 어설션이 항상 적용됩니다. 규칙 조건과 어설션을 정의하려면 템플릿의 `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`)의 값에 따라 사용자는 `InstanceType` 파라미터에 대해 `m1.small` 또는 `m1.large`를 지정해야 합니다. `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"
      }
    ]
  }
}
```