Conditions - AWS CloudFormation

Conditions

Conditions 섹션(선택 사항)에는 엔터티가 생성 또는 구성된 환경을 정의하는 문이 포함되어 있습니다. 예를 들어, 조건을 생성하고 이를 리소스 또는 출력에 연결하여 조건이 true인 경우에만 CloudFormation에서 리소스 또는 출력을 생성하도록 할 수 있습니다. 이와 유사하게 조건을 속성에 연결하여 조건이 true인 경우에만 CloudFormation에서 속성을 특정 값으로 설정하도록 할 수 있습니다. 조건이 false인 경우 CloudFormation에서 사용자가 지정한 다른 값으로 속성을 설정합니다.

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

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

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

중요

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

조건 사용법 개요

조건부로 생성 또는 구성하고자 하는 엔터티에 따라 다음 템플릿 섹션에 문을 포함해야 합니다.

Parameters 섹션

조건에서 평가하고자 하는 입력을 정의합니다. 조건은 이러한 입력 파라미터의 값에 따라 true 또는 false로 평가합니다. 조건에서 가상 파라미터를 평가하고자 하는 경우 이 섹션에서 가상 파라미터를 정의할 필요가 없습니다. 가상 파라미터는 CloudFormation에 의해 사전 정의됩니다. 가상 파라미터에 대한 자세한 내용은 가상 파라미터 참조 단원을 참조하십시오.

Conditions 섹션

내장 조건 함수를 사용하여 조건을 정의합니다. 이러한 조건은 CloudFormation에서 연결된 리소스가 생성되는 경우를 결정합니다. 예제는 샘플 템플릿을 참조하세요.

ResourcesOutputs 섹션

조건부로 생성하려는 리소스 또는 출력과 조건을 연결합니다. 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로 평가됩니다. 샘플 템플릿에서 NewVolumeMountPoint 리소스는 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: ...