Fn::FindInMap
Fn::FindInMap
내장 함수는 Mappings
섹션에서 선언된 2수준 맵의 키에 해당하는 값을 반환합니다.
선언
JSON
{ "Fn::FindInMap" : [ "
MapName
", "TopLevelKey
", "SecondLevelKey
"] }
YAML
전체 함수 이름의 구문:
Fn::FindInMap: [
MapName
,TopLevelKey
,SecondLevelKey
]
짧은 형식의 구문:
!FindInMap [
MapName
,TopLevelKey
,SecondLevelKey
]
참고
두 함수의 인스턴스 두 개는 짧은 형식으로 중첩할 수 없습니다.
파라미터
- MapName
-
키 및 값이 포함된 매핑 섹션에서 선언된 매핑의 논리적 이름입니다.
- TopLevelKey
-
최상위 키 이름입니다. 이 값은 키-값 페어 목록입니다.
- SecondLevelKey
-
TopLevelKey
에 할당된 목록의 키 중 하나로 설정된 두 번째 수준 키 이름입니다.
반환 값
SecondLevelKey
에 할당된 값입니다.
예시
다음은 Fn::FindInMap
함수의 사용 방법을 설명하는 예제입니다.
리전별 값과 함께 Fn::FindInMap 사용
다음 예에서는 AMI를 AWS 리전과 연결하는 단일 맵 Fn::FindInMap
이 포함된 Mappings
섹션이 있는 템플릿에 RegionMap
을 사용하는 방법을 보여줍니다.
-
이 맵에는 다양한 AWS 리전에 해당하는 5가지 최상위 키가 있습니다.
-
각 최상위 키는 AMI의 아키텍처에 해당하는 두 번째 수준 키 2개
"HVM64"
및"HVMG2"
가 있는 목록에 할당됩니다. -
각각의 두 번째 수준 키에는 적절한 AMI 이름이 할당됩니다.
예제 템플릿에는 AWS::EC2::Instance
함수를 통해 ImageId
속성이 설정된 FindInMap
리소스가 포함되어 있습니다.
이 예제에서는 MapName
이 관심 맵인 "RegionMap"
으로 설정되어 있습니다. TopLevelKey
는 스택이 생성된 리전으로 설정되어 있습니다. 리전은 "AWS::Region"
가상 파라미터를 사용하여 결정됩니다. SecondLevelKey
는 이 예제에 필요한 아키텍처인 "HVM64"
로 설정되어 있습니다.
FindInMap
은 FindInMap
에 할당된 AMI을 반환합니다. us-east-1의 HVM64 인스턴스의 경우 FindInMap
은 "ami-0ff8a91507f77f867"
를 반환합니다.
참고
Mappings
섹션 대신 AWS Systems Manager 파라미터를 고려해 보세요. 사용하려는 AMI 가 변경될 때마다 모든 템플릿을 새 ID로 업데이트하지 않으려면 스택이 생성되거나 업데이트될 때 AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
파라미터 유형을 사용하여 최신 AMI ID를 검색하세요. 일반적으로 사용되는 AMI의 최신 버전도 Systems Manager의 공용 파라미터로 사용할 수 있습니다. 자세한 내용은 CloudFormation에서 제공하는 파라미터 유형을 사용하여 런타임 시 기존 리소스 지정 단원을 참조하십시오.
JSON
{ ... "Mappings" : { "RegionMap" : { "us-east-1" : { "HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c" }, "us-west-1" : { "HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1" }, "eu-west-1" : { "HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435" }, "ap-southeast-1" : { "HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309" }, "ap-northeast-1" : { "HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "HVM64" ] }, "InstanceType" : "t2.micro" } } } }
YAML
Mappings: RegionMap: us-east-1: HVM64: "ami-0ff8a91507f77f867" HVMG2: "ami-0a584ac55a7631c0c" us-west-1: HVM64: "ami-0bdb828fd58c52235" HVMG2: "ami-066ee5fd4a9ef77f1" eu-west-1: HVM64: "ami-047bb4163c506cd98" HVMG2: "ami-0a7c483d527806435" ap-southeast-1: HVM64: "ami-08569b978cc4dfa10" HVMG2: "ami-0be9df32ae9f92309" ap-northeast-1: HVM64: "ami-06cd52961ce9f0d85" HVMG2: "ami-053cdd503598e4a9d" Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - HVM64 InstanceType: t2.micro
환경별 구성에 Fn::FindInMap 사용
다음 예제에서는 단일 맵 SecurityGroups
이 포함된 Mappings
섹션이 있는 템플릿에 Fn::FindInMap
을 사용하는 방법을 보여줍니다. 또한 환경이 Dev
인지 Prod
인지 지정할 수 있는 EnvironmentType
파라미터도 포함되어 있습니다. 기본적으로 Dev
이지만 스택 생성 중 재정의할 수 있습니다.
Fn::FindInMap
은 EnvironmentType
파라미터를 기반으로 적절한 SecurityGroupIds
를 반환합니다. 그런 다음 Fn::Split
은 보안 그룹 ID의 쉼표로 구분된 문자열을 SecurityGroupIds에 대한 예상 형식인 목록으로 분할합니다.
EnvironmentType
을 Dev
로 설정하여 이 스택을 배포하는 경우 EC2Instance
의 SecurityGroupIds
는 sg-12345678
이 됩니다. EnvironmentType
을 Prod
로 설정하는 경우 sg-abcdef01
과 sg-ghijkl23
이 사용됩니다.
JSON
{ ... "Parameters":{ "EnvironmentType":{ "Description":"The environment type (Dev or Prod)", "Type":"String", "Default":"Dev", "AllowedValues":[ "Dev", "Prod" ] } }, "Mappings":{ "SecurityGroups":{ "Dev":{ "SecurityGroupIds":"sg-12345678" }, "Prod":{ "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23" } } }, "Resources":{ "Ec2Instance":{ "Type":"AWS::EC2::Instance", "Properties":{ "ImageId": "ami-0a70b9d193ae8a799", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }
YAML
Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroups: Dev: SecurityGroupIds: sg-12345678 Prod: SecurityGroupIds: sg-abcdef01,sg-ghijkl23 Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0a70b9d193ae8a799 InstanceType: t2.micro SecurityGroupIds: Fn::Split: - "," - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]
지원되는 함수
Fn::FindInMap
함수에서 다음과 같은 함수를 사용할 수 있습니다.
-
Fn::FindInMap
-
Ref
관련 리소스
Fn::FindInMap
함수에서 다른 내장 함수나 기본값을 사용하려면 템플릿 내에서 AWS::LanguageExtensions
변환을 선언해야 합니다. 자세한 내용은 Fn::FindInMap
enhancements 단원을 참조하십시오.
이러한 관련 주제는 Fn::FindInMap
함수를 사용하는 템플릿을 개발할 때 도움이 될 수 있습니다.