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:Value1Key2:Name:Value2Key3:Name:Value3
-
MappingLogicalName은 매핑의 논리명입니다. -
매핑 내에서 각 맵은 키이며, 그 뒤에는 다른 매핑이 이어집니다.
-
키는 이름-값 페어의 맵이어야 하며 매핑 내에서 고유해야 합니다.
-
이름-값 페어는 레이블과, 매핑할 값입니다. 값에 이름을 지정하여 두 개 이상의 값 세트를 키로 매핑할 수 있습니다.
-
매핑의 키는 문자열이어야 합니다.
-
값은
String또는List유형이 될 수 있습니다.
참고
Mappings 섹션에는 파라미터, 가상 파라미터 또는 내장 함수를 포함할 수 없습니다.
매핑의 값이 현재 스택에서 사용되지 않는 경우, 매핑만 업데이트할 수는 없습니다. 리소스를 추가, 수정 또는 삭제하는 변경 내용을 포함해야 합니다.
예시
기본 매핑
다음 예제에서는 Mappings 맵을 사용하는 RegionToInstanceType 매핑을 보여줍니다. 이 매핑에는 단일 문자열 값을 포함하는 이름-값 페어로 매핑된 다섯 개 키가 들어 있습니다. 키는 리전 이름입니다. 각 이름-값 페어는 키로 표현되는 리전에서 사용할 수 있는 T 패밀리의 인스턴스 유형입니다. 이름-값 페어에는 이름(이 예제에서는 InstanceType)과 값이 지정됩니다.
JSON
"Mappings" : { "RegionToInstanceType" : { "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: RegionToInstanceType: 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, 이렇게 두 가지 값 세트로 매핑되는 리전 키가 있습니다.
참고
이 예제에 표시된 AMI ID는 데모용 자리 표시자입니다. 가능하면 Mappings 섹션의 대안으로 AWS Systems Manager 파라미터에 대한 동적 참조를 사용하는 것이 좋습니다. 사용하려는 AMI가 변경될 때마다 모든 템플릿을 새 ID로 업데이트하지 않으려면 스택이 생성되거나 업데이트될 때 AWS Systems Manager 파라미터를 사용하여 최신 AMI ID를 검색하세요. 일반적으로 사용되는 AMI의 최신 버전도 Systems Manager의 퍼블릭 파라미터로 사용할 수 있습니다. 자세한 내용은 동적 참조를 사용하여 다른 서비스에 저장된 값 가져오기를 참조하세요.
JSON
"Mappings" : { "RegionToAMI" : { "us-east-1" : { "MyAMI1" : "ami-12345678901234567", "MyAMI2" : "ami-23456789012345678" }, "us-west-1" : { "MyAMI1" : "ami-34567890123456789", "MyAMI2" : "ami-45678901234567890" }, "eu-west-1" : { "MyAMI1" : "ami-56789012345678901", "MyAMI2" : "ami-67890123456789012" }, "ap-southeast-1" : { "MyAMI1" : "ami-78901234567890123", "MyAMI2" : "ami-89012345678901234" }, "ap-northeast-1" : { "MyAMI1" : "ami-90123456789012345", "MyAMI2" : "ami-01234567890123456" } } }
YAML
Mappings: RegionToAMI: us-east-1: MyAMI1:ami-12345678901234567MyAMI2:ami-23456789012345678us-west-1: MyAMI1:ami-34567890123456789MyAMI2:ami-45678901234567890eu-west-1: MyAMI1:ami-56789012345678901MyAMI2:ami-67890123456789012ap-southeast-1: MyAMI1:ami-78901234567890123MyAMI2:ami-89012345678901234ap-northeast-1: MyAMI1:ami-90123456789012345MyAMI2:ami-01234567890123456
매핑에서 값 반환
Fn::FindInMap 함수를 사용하여 지정한 키에 따라 명명된 값을 반환할 수 있습니다. 다음 예제 템플릿에는 InstanceType 함수를 통해 FindInMap 속성이 할당된 Amazon EC2 리소스가 포함되어 있습니다. FindInMap 함수는 키를 스택이 생성되는 AWS 리전(AWS::Region 가상 파라미터 사용)으로 지정하고 InstanceType을 매핑할 값 이름으로 지정합니다. ImageId는 Systems Manager 파라미터를 사용하여 최신 Amazon Linux 2 AMI를 동적으로 검색합니다. 가상 파라미터에 대한 자세한 내용은 가상 파라미터를 사용하여 AWS 값 가져오기 단원을 참조하십시오.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionToInstanceType" : { "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" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap" : [ "RegionToInstanceType", { "Ref" : "AWS::Region" }, "InstanceType" ]} } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionToInstanceType: 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 Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionToInstanceType, !Ref 'AWS::Region', InstanceType]
입력 파라미터 및 Fn::FindInMap
다음 예제 템플릿은 여러 매핑을 사용하여 EC2 인스턴스를 생성하는 방법을 보여줍니다. 템플릿은 중첩 매핑을 사용하여 대상 AWS 리전 및 환경 유형(Dev 또는 Prod)에 따라 적절한 인스턴스 유형과 보안 그룹을 자동으로 선택합니다. 또한 Systems Manager 파라미터를 사용하여 최신 Amazon Linux 2 AMI를 동적으로 검색합니다.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "EnvironmentType" : { "Description" : "The environment type (Dev or Prod)", "Type" : "String", "Default" : "Dev", "AllowedValues" : [ "Dev", "Prod" ] } }, "Mappings" : { "RegionAndEnvironmentToInstanceType" : { "us-east-1" : { "Dev" : "t3.micro", "Prod" : "c5.large" }, "us-west-1" : { "Dev" : "t2.micro", "Prod" : "m5.large" } }, "RegionAndEnvironmentToSecurityGroup" : { "us-east-1" : { "Dev" : "sg-12345678", "Prod" : "sg-abcdef01" }, "us-west-1" : { "Dev" : "sg-ghijkl23", "Prod" : "sg-45678abc" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap": [ "RegionAndEnvironmentToInstanceType", { "Ref": "AWS::Region" }, { "Ref": "EnvironmentType" } ]}, "SecurityGroupIds" : [{ "Fn::FindInMap" : [ "RegionAndEnvironmentToSecurityGroup", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" } ]}] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: RegionAndEnvironmentToInstanceType: us-east-1: Dev: t3.micro Prod: c5.large us-west-1: Dev: t2.micro Prod: m5.large RegionAndEnvironmentToSecurityGroup: us-east-1: Dev:sg-12345678Prod:sg-abcdef01us-west-1: Dev:sg-ghijkl23Prod:sg-45678abcResources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionAndEnvironmentToInstanceType, !Ref 'AWS::Region', !Ref EnvironmentType] SecurityGroupIds: - !FindInMap [RegionAndEnvironmentToSecurityGroup, !Ref 'AWS::Region', !Ref EnvironmentType]
관련 리소스
이러한 관련 주제는 Fn::FindInMap 함수를 사용하는 템플릿을 개발할 때 도움이 될 수 있습니다.