Fn::FindInMap - AWS CloudFormation

새로운 AWS CloudFormation 템플릿 참조 안내서입니다. 북마크와 링크를 업데이트하세요. CloudFormation을 시작하는 데 도움이 필요한 경우 AWS CloudFormation 사용 설명서를 참조하세요.

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 사용

다음 예제에서는 AWSInstanceType2ArchAWSRegionArch2AMI의 두 가지 매핑이 포함된 템플릿에서 Fn::FindInMap를 사용하는 방법을 보여줍니다. 또한 t3.microt4g.nano 중에서 선택할 수 있는 InstanceType 파라미터도 포함되어 있습니다. 기본값은 t3.micro이지만 스택 생성 중 재정의할 수 있습니다.

Fn::FindInMap는 먼저 선택한 인스턴스 유형을 기반으로 아키텍처(HVM64 또는 ARM64)를 확인한 다음 현재 AWS 리전에서 해당 아키텍처에 대한 올바른 AMI ID를 조회합니다.

참고

이 예제에 표시된 AMI ID는 데모용 자리 표시자입니다. 가능하면 Mappings 섹션의 대안으로 AWS Systems Manager 파라미터에 대한 동적 참조를 사용하는 것이 좋습니다. 사용하려는 AMI가 변경될 때마다 모든 템플릿을 새 ID로 업데이트하지 않으려면 스택이 생성되거나 업데이트될 때 AWS Systems Manager 파라미터를 사용하여 최신 AMI ID를 검색하세요. 일반적으로 사용되는 AMI의 최신 버전도 Systems Manager의 퍼블릭 파라미터로 사용할 수 있습니다. 자세한 내용은 동적 참조를 사용하여 다른 서비스에 저장된 값 가져오기를 참조하세요.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "InstanceType": { "Description": "The EC2 instance type", "Type": "String", "AllowedValues": [ "t3.micro", "t4g.nano" ], "Default": "t3.micro" } }, "Mappings": { "AWSInstanceType2Arch": { "t3.micro": { "Arch": "HVM64" }, "t4g.nano": { "Arch": "ARM64" } }, "AWSRegionArch2AMI": { "us-east-1" : { "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" }, "us-west-1" : { "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890" }, "eu-west-1" : { "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" }, "ap-southeast-1" : { "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" }, "ap-northeast-1" : { "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" } } }, "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : { "Ref": "InstanceType" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}] } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Parameters: InstanceType: Description: The EC2 instance type Type: String AllowedValues: - t3.micro - t4g.nano Default: t3.micro Mappings: AWSInstanceType2Arch: t3.micro: Arch: HVM64 t4g.nano: Arch: ARM64 AWSRegionArch2AMI: us-east-1: HVM64: ami-12345678901234567 ARM64: ami-23456789012345678 us-west-1: HVM64: ami-34567890123456789 ARM64: ami-45678901234567890 eu-west-1: HVM64: ami-56789012345678901 ARM64: ami-67890123456789012 ap-southeast-1: HVM64: ami-78901234567890123 ARM64: ami-89012345678901234 ap-northeast-1: HVM64: ami-90123456789012345 ARM64: ami-01234567890123456 Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - Fn::FindInMap: - AWSInstanceType2Arch - Ref: InstanceType - Arch

환경별 구성에 Fn::FindInMap 사용

다음 예제에서는 단일 맵 SecurityGroups이 포함된 Mappings 섹션이 있는 템플릿에 Fn::FindInMap을 사용하는 방법을 보여줍니다. 또한 환경이 Dev인지 Prod인지 지정할 수 있는 EnvironmentType 파라미터도 포함되어 있습니다. 기본적으로 Dev이지만 스택 생성 중 재정의할 수 있습니다.

Fn::FindInMapEnvironmentType 파라미터를 기반으로 적절한 SecurityGroupIds를 반환합니다. 그런 다음 Fn::Split은 보안 그룹 ID의 쉼표로 구분된 문자열을 SecurityGroupIds에 대한 예상 형식인 목록으로 분할합니다.

EnvironmentTypeDev로 설정하여 이 스택을 배포하는 경우 EC2InstanceSecurityGroupIdssg-12345678이 됩니다. EnvironmentTypeProd로 설정하는 경우 sg-abcdef01sg-ghijkl23이 사용됩니다.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "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": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 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: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' 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 함수를 사용하는 템플릿을 개발할 때 도움이 될 수 있습니다.