CloudFormation 템플릿 Mappings 구문
선택 사항인 Mappings
섹션을 사용하면 특정 조건이나 종속성을 기반으로 값을 지정하는 데 사용할 수 있는 키-값 페어를 만들 수 있습니다.
Mappings
섹션의 일반적인 사용 사례 중 하나는 스택이 배포된 AWS 리전을 기반으로 값을 설정하는 것입니다. AWS::Region
가상 파라미터를 사용하여 설정할 수 있습니다. AWS::Region
가상 파라미터는 CloudFormation에서 스택이 생성되는 리전으로 확인되는 값입니다. 가상 파라미터는 스택 생성 시 CloudFormation에서 확인됩니다.
맵에서 값을 검색하려면 템플릿의 Resources
섹션 내에서 Fn::FindInMap
내장 함수를 사용하면 됩니다.
구문
Mappings
섹션에서는 다음 구문을 사용합니다.
JSON
"Mappings" : { "
MappingLogicalName
" : { "Key1
" : { "Name
" : "Value1
" }, "Key2
" : { "Name
" : "Value2
" }, "Key3
" : { "Name
" : "Value3
" } } }
YAML
Mappings:
MappingLogicalName
:Key1
:Name
:Value1
Key2
:Name
:Value2
Key3
:Name
:Value3
-
MappingLogicalName
은 매핑의 논리명입니다. -
매핑 내에서 각 맵은 키이며, 그 뒤에는 다른 매핑이 이어집니다.
-
키는 이름-값 페어의 맵이어야 하며 매핑 내에서 고유해야 합니다.
-
이름-값 페어는 레이블과, 매핑할 값입니다. 값에 이름을 지정하여 두 개 이상의 값 세트를 키로 매핑할 수 있습니다.
-
매핑의 키는 문자열이어야 합니다.
-
값은
String
또는List
유형이 될 수 있습니다.
참고
Mappings
섹션에는 파라미터, 가상 파라미터 또는 내장 함수를 포함할 수 없습니다.
매핑의 값이 현재 스택에서 사용되지 않는 경우, 매핑만 업데이트할 수는 없습니다. 리소스를 추가, 수정 또는 삭제하는 변경 내용을 포함해야 합니다.
예시
기본 매핑
다음 예제에서는 Mappings
맵을 사용하는 RegionMap
매핑을 보여줍니다. 이 매핑에는 단일 문자열 값을 포함하는 이름-값 페어로 매핑된 다섯 개 키가 들어 있습니다. 키는 리전 이름입니다. 각 이름-값 페어는 키로 표현되는 리전에서 사용할 수 있는 T 패밀리의 인스턴스 유형입니다. 이름-값 페어에는 이름(이 예제에서는 InstanceType
)과 값이 지정됩니다.
JSON
"Mappings" : { "RegionMap" : { "us-east-1" : {"InstanceType": "t2.micro"}, "us-west-1" : {"InstanceType": "t2.micro"}, "eu-west-1" : {"InstanceType": "t2.micro"}, "eu-north-1" : {"InstanceType": "t3.micro"}, "me-south-1" : {"InstanceType": "t3.micro"} } }
YAML
Mappings: RegionMap: us-east-1: InstanceType: t2.micro us-west-1: InstanceType: t2.micro eu-west-1: InstanceType: t2.micro eu-north-1: InstanceType: t3.micro me-south-1: InstanceType: t3.micro
여러 값을 사용하여 매핑
다음 예제에는 MyAMI1
및 MyAMI2
, 이렇게 두 가지 값 세트로 매핑되는 리전 키가 있습니다.
JSON
"AMIIDMap" : { "us-east-1" : {"MyAMI1" : "ami-0ff8a91507f77f867", "MyAMI2" : "ami-0a584ac55a7631c0c"}, "us-west-1" : {"MyAMI1" : "ami-0bdb828fd58c52235", "MyAMI2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"MyAMI1" : "ami-047bb4163c506cd98", "MyAMI2" : "ami-0a7c483d527806435"}, "ap-southeast-1" : {"MyAMI1" : "ami-08569b978cc4dfa10", "MyAMI2" : "ami-0be9df32ae9f92309"}, "ap-northeast-1" : {"MyAMI1" : "ami-06cd52961ce9f0d85", "MyAMI2" : "ami-053cdd503598e4a9d"} }
YAML
AMIIDMap: us-east-1: MyAMI1: ami-0ff8a91507f77f867 MyAMI2: ami-0a584ac55a7631c0c us-west-1: MyAMI1: ami-0bdb828fd58c52235 MyAMI2: ami-066ee5fd4a9ef77f1 eu-west-1: MyAMI1: ami-047bb4163c506cd98 MyAMI2: ami-0a7c483d527806435 ap-southeast-1: MyAMI1: ami-08569b978cc4dfa10 MyAMI2: ami-0be9df32ae9f92309 ap-northeast-1: MyAMI1: ami-06cd52961ce9f0d85 MyAMI2: ami-053cdd503598e4a9d
매핑에서 값 반환
Fn::FindInMap
함수를 사용하여 지정한 키에 따라 명명된 값을 반환할 수 있습니다. 다음 예제 템플릿에는 FindInMap
함수를 통해 ImageId
속성이 할당된 Amazon EC2 리소스가 포함되어 있습니다. FindInMap
함수는 키를 스택이 생성되는 리전(AWS::Region
가상 파라미터 사용)으로 지정하고 MyAMI1
을 매핑할 값으로 지정합니다. 가상 파라미터에 대한 자세한 내용은 가상 파라미터를 사용하여 AWS 값 가져오기 단원을 참조하십시오.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "AMIIDMap" : { "us-east-1" : {"MyAMI1" : "ami-0ff8a91507f77f867", "MyAMI2" : "ami-0a584ac55a7631c0c"}, "us-west-1" : {"MyAMI1" : "ami-0bdb828fd58c52235", "MyAMI2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"MyAMI1" : "ami-047bb4163c506cd98", "MyAMI2" : "ami-0a7c483d527806435"}, "ap-northeast-1" : {"MyAMI1" : "ami-06cd52961ce9f0d85", "MyAMI2" : "ami-053cdd503598e4a9d"}, "ap-southeast-1" : {"MyAMI1" : "ami-08569b978cc4dfa10", "MyAMI2" : "ami-0be9df32ae9f92309"} } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "AMIIDMap", { "Ref" : "AWS::Region" }, "MyAMI1" ]}, "InstanceType" : "t2.micro" } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Mappings: AMIIDMap: us-east-1: MyAMI1: ami-0ff8a91507f77f867 MyAMI2: ami-0a584ac55a7631c0c us-west-1: MyAMI1: ami-0bdb828fd58c52235 MyAMI2: ami-066ee5fd4a9ef77f1 eu-west-1: MyAMI1: ami-047bb4163c506cd98 MyAMI2: ami-0a7c483d527806435 ap-northeast-1: MyAMI1: ami-06cd52961ce9f0d85 MyAMI2: ami-053cdd503598e4a9d ap-southeast-1: MyAMI1: ami-08569b978cc4dfa10 MyAMI2: ami-0be9df32ae9f92309 Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap [AMIIDMap, !Ref "AWS::Region", MyAMI1] InstanceType: t2.micro
입력 파라미터 및 Fn::FindInMap
Fn::FindInMap
함수와 함께 입력 파라미터를 사용하여 맵에서 특정 값을 참조할 수 있습니다. 예를 들어, 특정 보안 그룹 ID로 매핑하는 리전 및 환경 유형의 목록이 있다고 가정해 보겠습니다. 입력 파라미터(EnvironmentType
)를 사용하여 스택에 사용되는 보안 그룹 ID를 선택할 수 있습니다. 리전을 확인하려면 AWS::Region
가상 파라미터를 사용합니다. 이 가상 파라미터는 스택을 생성하는 AWS 리전을 가져옵니다.
또한 이 예제에서는 Systems Manager 파라미터 별칭(/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
)을 EC2 인스턴스 ImageId
속성의 기본값으로 제공하는 Systems Manager 파라미터 유형을 선언합니다. 이는 CloudFormation이 스택이 생성되는 리전의 최신 Amazon Linux 2 AMI에 대한 AMI ID 값으로 확인하는 값입니다.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "LatestAmiId" : { "Description" : "The latest Amazon Linux 2 AMI from the Parameter Store", "Type" : "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default" : "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" }, "EnvironmentType" : { "Description" : "The environment type (Dev or Prod)", "Type" : "String", "Default" : "Dev", "AllowedValues" : [ "Dev", "Prod" ] } }, "Mappings" : { "SecurityGroupMap" : { "us-east-1" : { "Dev" : "sg-12345678", "Prod" : "sg-abcdef01" }, "us-west-2" : { "Dev" : "sg-ghijkl23", "Prod" : "sg-45678abc" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Ref" : "LatestAmiId" }, "InstanceType" : "t2.micro", "SecurityGroupIds" : [{ "Fn::FindInMap" : [ "SecurityGroupMap", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" } ]}] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroupMap: us-east-1: Dev: "sg-12345678" Prod: "sg-abcdef01" us-west-2: Dev: "sg-ghijkl23" Prod: "sg-45678abc" Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref LatestAmiId InstanceType: t2.micro SecurityGroupIds: - !FindInMap [SecurityGroupMap, !Ref "AWS::Region", !Ref EnvironmentType]
관련 리소스
이러한 관련 주제는 Fn::FindInMap
함수를 사용하는 템플릿을 개발할 때 도움이 될 수 있습니다.