메뉴
AWS CloudFormation
사용 설명서 (API Version 2010-05-15)

조건

Conditions 섹션(선택 사항)에는 리소스가 생성되는 경우 또는 속성이 정의되는 경우를 정의하는 문이 포함되어 있습니다. 예를 들면 값 하나와 다른 값을 비교하여 값이 동일한지 알아볼 수 있습니다. 해당 조건의 결과에 따라 리소스를 조건부로 생성할 수 있습니다. 여러 조건이 있는 경우 각 조건을 쉼표로 구분합니다.

다양한 컨텍스트(예: 테스트 환경과 프로덕션 환경)에서 리소스를 생성할 수 있는 템플릿을 재사용하려는 경우에 조건을 사용할 수 있습니다. 템플릿에서 prod 또는 test를 입력으로 수락하는 EnvironmentType 입력 파라미터를 추가할 수 있습니다. 프로덕션 환경에서는 특정 기능을 가진 Amazon EC2 인스턴스를 포함할 수 있지만, 테스트 환경에서는 비용 절감을 위해 더 적은 기능을 사용하려고 합니다. 조건을 사용하여 생성되는 리소스와 각 환경 유형에 대한 리소스 구성 방법을 정의할 수 있습니다.

조건은 스택을 생성하거나 업데이트할 때 지정하는 입력 파라미터를 기준으로 평가합니다. 각 조건 안에서 다른 조건, 파라미터 값 또는 매핑을 참조할 수 있습니다. 모든 조건을 정의한 후 템플릿의 ResourcesOutputs 섹션에서 리소스 또는 리소스 속성과 조건을 연결할 수 있습니다.

스택 생성 또는 스택 업데이트 후 리소스를 생성하기 전에 AWS CloudFormation에서 템플릿의 모든 조건을 평가합니다. true 조건과 연결된 리소스가 모두 생성됩니다. false 조건과 연결된 리소스가 모두 무시됩니다.

중요

스택 업데이트 중에는 조건을 자체적으로 업데이트할 수 없습니다. 조건은 리소스를 추가, 수정 또는 삭제하는 변경 내용을 포함할 때만 업데이트할 수 있습니다.

조건 사용법 개요

리소스를 조건부로 생성하려면 템플릿의 세 가지 섹션 안에 문을 포함해야 합니다.

Parameters 섹션

조건에서 평가할 입력 값을 정의합니다. 이러한 입력 파라미터의 값에 따라 조건이 true 또는 false가 됩니다.

Conditions 섹션

내장 조건 함수를 사용하여 조건을 정의합니다. 이러한 조건은 AWS CloudFormation에서 연결된 리소스가 생성되는 경우를 결정합니다.

ResourcesOutputs 섹션

조건부로 생성할 리소스나 출력을 조건과 연결합니다. AWS CloudFormation에서는 true 조건과 연결된 엔터티를 생성하고 false 조건과 연결된 엔터티를 무시합니다. Condition 키와 조건의 논리적 ID를 사용하여 리소스나 출력과 연결합니다. 속성을 조건부로 지정하려면 Fn::If 함수를 사용합니다. 자세한 내용은 조건 함수 단원을 참조하십시오.

구문

Conditions 섹션은 키 이름 Conditions로 이루어집니다. 각 조건 선언에는 스택을 생성하거나 업데이트할 때 평가되는 내장 함수와 논리적 ID가 포함됩니다. 다음 가상 템플릿에는 Conditions 섹션이 요약되어 있습니다.

JSON

Copy
"Conditions" : { "Logical ID" : {Intrinsic function} }

YAML

Copy
Conditions: Logical ID: Intrinsic function

조건 내장 함수

다음 내장 함수를 사용하여 조건을 정의할 수 있습니다.

  • Fn::And

  • Fn::Equals

  • Fn::If

  • Fn::Not

  • Fn::Or

각 함수에 대한 구문 및 정보는 조건 함수 단원을 참조하십시오.

참고

템플릿의 리소스 섹션과 출력 섹션에 있는 메타데이터 속성, 업데이트 정책 속성 및 속성 값에서만 Fn::If가 지원됩니다.

예제

다음 샘플 템플릿에는 EnvType 입력 파라미터가 포함되어 있는데, 이 파라미터에 prod를 지정하여 프로덕션용 스택을 생성하거나 test를 지정하여 테스트용 스택을 생성할 수 있습니다. 프로덕션 환경의 경우 AWS CloudFormation에서는 Amazon EC2 인스턴스를 생성하고 볼륨을 해당 인스턴스에 연결합니다. 테스트 환경의 경우에는, AWS CloudFormation에서 Amazon EC2 인스턴스만 생성합니다.

EnvType 파라미터가 prod와 동일한 경우 CreateProdResources 조건이 true로 평가됩니다. 샘플 템플릿에서 NewVolumeMountPoint 리소스는 CreateProdResources 조건과 연결되어 있습니다. 그러므로 리소스는 EnvType 파라미터가 prod와 동일한 경우에만 생성됩니다.

JSON

Copy
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-7f418316", "TestAz" : "us-east-1a" }, "us-west-1" : { "AMI" : "ami-951945d0", "TestAz" : "us-west-1a" }, "us-west-2" : { "AMI" : "ami-16fd7026", "TestAz" : "us-west-2a" }, "eu-west-1" : { "AMI" : "ami-24506250", "TestAz" : "eu-west-1a" }, "sa-east-1" : { "AMI" : "ami-3e3be423", "TestAz" : "sa-east-1a" }, "ap-southeast-1" : { "AMI" : "ami-74dda626", "TestAz" : "ap-southeast-1a" }, "ap-southeast-2" : { "AMI" : "ami-b3990e89", "TestAz" : "ap-southeast-2a" }, "ap-northeast-1" : { "AMI" : "ami-dcfa4edd", "TestAz" : "ap-northeast-1a" } } }, "Parameters" : { "EnvType" : { "Description" : "Environment type.", "Default" : "test", "Type" : "String", "AllowedValues" : ["prod", "test"], "ConstraintDescription" : "must specify prod or test." } }, "Conditions" : { "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]} }, "Resources" : { "EC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "MountPoint" : { "Type" : "AWS::EC2::VolumeAttachment", "Condition" : "CreateProdResources", "Properties" : { "InstanceId" : { "Ref" : "EC2Instance" }, "VolumeId" : { "Ref" : "NewVolume" }, "Device" : "/dev/sdh" } }, "NewVolume" : { "Type" : "AWS::EC2::Volume", "Condition" : "CreateProdResources", "Properties" : { "Size" : "100", "AvailabilityZone" : { "Fn::GetAtt" : [ "EC2Instance", "AvailabilityZone" ]} } } }, "Outputs" : { "VolumeId" : { "Value" : { "Ref" : "NewVolume" }, "Condition" : "CreateProdResources" } } }

YAML

Copy
AWSTemplateFormatVersion: "2010-09-09" Mappings: RegionMap: us-east-1: AMI: "ami-7f418316" TestAz: "us-east-1a" us-west-1: AMI: "ami-951945d0" TestAz: "us-west-1a" us-west-2: AMI: "ami-16fd7026" TestAz: "us-west-2a" eu-west-1: AMI: "ami-24506250" TestAz: "eu-west-1a" sa-east-1: AMI: "ami-3e3be423" TestAz: "sa-east-1a" ap-southeast-1: AMI: "ami-74dda626" TestAz: "ap-southeast-1a" ap-southeast-2: AMI: "ami-b3990e89" TestAz: "ap-southeast-2a" ap-northeast-1: AMI: "ami-dcfa4edd" TestAz: "ap-northeast-1a" Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test. Conditions: CreateProdResources: !Equals [ !Ref EnvType, prod ] Resources: EC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", AMI] MountPoint: Type: "AWS::EC2::VolumeAttachment" Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: "AWS::EC2::Volume" Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt EC2Instance.AvailabilityZone Outputs: VolumeId: Condition: CreateProdResources Value: !Ref NewVolume

이 페이지에서: