Conditions
Conditions
섹션(선택 사항)에는 엔터티가 생성 또는 구성된 환경을 정의하는 문이 포함되어 있습니다. 예를 들어, 조건을 생성하고 이를 리소스 또는 출력에 연결하여 조건이 true인 경우에만 CloudFormation에서 리소스 또는 출력을 생성하도록 할 수 있습니다. 이와 유사하게 조건을 속성에 연결하여 조건이 true인 경우에만 CloudFormation에서 속성을 특정 값으로 설정하도록 할 수 있습니다. 조건이 false인 경우 CloudFormation에서 사용자가 지정한 다른 값으로 속성을 설정합니다.
다양한 컨텍스트(예: 테스트 환경과 프로덕션 환경)에서 리소스를 생성할 수 있는 템플릿을 재사용하려는 경우에 조건을 사용할 수 있습니다. 템플릿에서 prod
또는 test
를 입력으로 수락하는 EnvironmentType
입력 파라미터를 추가할 수 있습니다. 프로덕션 환경에서는 특정 기능을 가진 Amazon EC2 인스턴스를 포함할 수 있지만, 테스트 환경에서는 비용 절감을 위해 더 적은 기능을 사용하려고 합니다. 조건을 사용하여 생성되는 리소스와 각 환경 유형에 대한 리소스 구성 방법을 정의할 수 있습니다.
조건은 스택을 생성하거나 업데이트할 때 지정하는 사전 정의된 가상 파라미터 또는 입력 파라미터를 기준으로 평가합니다. 각 조건 안에서 다른 조건, 파라미터값 또는 매핑을 참조할 수 있습니다. 모든 조건을 정의한 후 템플릿의 Resources
및 Outputs
섹션에서 리소스 또는 리소스 속성과 조건을 연결할 수 있습니다.
스택 생성 또는 스택 업데이트 후 리소스를 생성하기 전에 AWS CloudFormation에서 템플릿의 모든 조건을 평가합니다. true 조건과 연결된 리소스가 생성됩니다. false 조건과 연결된 리소스는 무시됩니다. 또한 CloudFormation은 리소스를 업데이트하기 전에 각 스택 업데이트에서 이러한 조건을 다시 평가합니다. true 조건과 아직 연결된 리소스가 모두 업데이트됩니다. false 조건과 현재 연결된 리소스는 삭제됩니다.
중요
스택 업데이트 중에는 조건을 자체적으로 업데이트할 수 없습니다. 조건은 리소스를 추가, 수정 또는 삭제하는 변경 내용을 포함할 때만 업데이트할 수 있습니다.
조건 사용법 개요
조건부로 생성 또는 구성하고자 하는 엔터티에 따라 다음 템플릿 섹션에 문을 포함해야 합니다.
Parameters
섹션-
조건에서 평가하고자 하는 입력을 정의합니다. 조건은 이러한 입력 파라미터의 값에 따라 true 또는 false로 평가합니다. 조건에서 가상 파라미터를 평가하고자 하는 경우 이 섹션에서 가상 파라미터를 정의할 필요가 없습니다. 가상 파라미터는 CloudFormation에 의해 사전 정의됩니다. 가상 파라미터에 대한 자세한 내용은 가상 파라미터 참조 단원을 참조하십시오.
Conditions
섹션-
내장 조건 함수를 사용하여 조건을 정의합니다. 이러한 조건은 CloudFormation에서 연결된 리소스가 생성되는 경우를 결정합니다. 예제는 샘플 템플릿을 참조하세요.
Resources
및Outputs
섹션-
조건부로 생성하려는 리소스 또는 출력과 조건을 연결합니다. CloudFormation에서는 true 조건과 연결된 엔터티를 생성하고 false 조건과 연결된 엔터티를 무시합니다.
Condition
키와 조건의 논리적 ID를 사용하여 리소스나 출력과 연결합니다. 속성을 조건부로 지정하려면Fn::If
함수를 사용합니다. 예를 들어, 조건 연결을 참조하세요.
구문
Conditions
섹션은 키 이름 Conditions
로 이루어집니다. 각 조건 선언에는 스택을 생성하거나 업데이트할 때 평가되는 내장 함수와 논리적 ID가 포함됩니다. 다음 가상 템플릿에는 Conditions
섹션이 요약되어 있습니다.
JSON
"Conditions" : { "
MyLogicalID
" : {Intrinsic function
} }
YAML
Conditions:
MyLogicalID
:Intrinsic function
조건 내장 함수
다음 내장 함수를 사용하여 조건을 정의할 수 있습니다.
-
Fn::And
-
Fn::Equals
-
Fn::ForEach
-
Fn::If
-
Fn::Not
-
Fn::Or
각 조건 함수에 대한 구문과 정보는 조건 함수를 참조하세요. Fn::ForEach
에 대한 구문과 정보는 Fn::ForEach 단원을 참조하세요.
참고
템플릿의 Resources
섹션과 Outputs
섹션에 있는 메타데이터 속성, 업데이트 정책 속성 및 속성값에서만 Fn::If
가 지원됩니다.
예시
간단한 조건
다음 샘플 템플릿에는 EnvType
입력 파라미터가 포함되어 있는데, 이 파라미터에 prod
를 지정하여 프로덕션용 스택을 생성하거나 test
를 지정하여 테스트용 스택을 생성할 수 있습니다. 프로덕션 환경의 경우 CloudFormation에서는 Amazon EC2 인스턴스를 생성하고 볼륨을 해당 인스턴스에 연결합니다. 테스트 환경의 경우 CloudFormation에서 Amazon EC2 인스턴스만 생성합니다.
CreateProdResources
파라미터가 true
와 동일한 경우 EnvType
조건이 prod
로 평가됩니다. 샘플 템플릿에서 NewVolume
및 MountPoint
리소스는 CreateProdResources
조건과 연결되어 있습니다. 그러므로 리소스는 EnvType
파라미터가 prod
와 동일한 경우에만 생성됩니다.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "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": "ami-0ff8a91507f77f867" } }, "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" ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 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: ami-0ff8a91507f77f867 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
중첩된 조건
다음 샘플 템플릿은 다른 조건 내의 조건을 참조합니다. s3 버킷을 생성하는 스택을 생성할 수 있습니다. 프로덕션 환경에 배포된 스택의 경우 CloudFormation이 S3 버킷에 대한 정책을 생성합니다.
JSON
{ "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket" }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": "..." } } } }
YAML
Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: 'AWS::S3::Bucket' Condition: CreateBucket Policy: Type: 'AWS::S3::BucketPolicy' Condition: CreateBucketPolicy Properties: Bucket: !Ref BucketName PolicyDocument: ...