

새로운 *CloudFormation 템플릿 참조 안내서*입니다. 북마크와 링크를 업데이트하세요. CloudFormation을 시작하는 데 도움이 필요한 경우 [AWS CloudFormation 사용 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 참조하세요.

# `Fn::FindInMap`
<a name="intrinsic-function-reference-findinmap"></a>

`Fn::FindInMap` 내장 함수는 `Mappings` 섹션에서 선언된 2수준 맵의 키에 해당하는 값을 반환합니다.

## 선언
<a name="w2aac24c25b5"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-syntax.json"></a>

```
{ "Fn::FindInMap" : [ "{{MapName}}", "{{TopLevelKey}}", "{{SecondLevelKey}}"] }
```

### YAML
<a name="intrinsic-function-reference-findinmap-syntax.yaml"></a>

전체 함수 이름의 구문:

```
Fn::FindInMap: [ {{MapName}}, {{TopLevelKey}}, {{SecondLevelKey}} ]
```

짧은 형식의 구문:

```
!FindInMap [ {{MapName}}, {{TopLevelKey}}, {{SecondLevelKey}} ]
```

**참고**  
두 함수의 인스턴스 두 개는 짧은 형식으로 중첩할 수 없습니다.

## 파라미터
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
키 및 값이 포함된 매핑 섹션에서 선언된 매핑의 논리적 이름입니다.

TopLevelKey  <a name="TopLevelKey"></a>
최상위 키 이름입니다. 이 값은 키-값 페어 목록입니다.

SecondLevelKey  <a name="SecondLevelKey"></a>
`TopLevelKey`에 할당된 목록의 키 중 하나로 설정된 두 번째 수준 키 이름입니다.

## 반환 값
<a name="w2aac24c25b9"></a>

`SecondLevelKey`에 할당된 값입니다.

## 예제
<a name="intrinsic-function-reference-findinmap-examples"></a>

다음은 `Fn::FindInMap` 함수의 사용 방법을 설명하는 예제입니다.

**Topics**
+ [리전별 값과 함께 Fn::FindInMap 사용](#intrinsic-function-reference-findinmap-region-example)
+ [환경별 구성에 Fn::FindInMap 사용](#intrinsic-function-reference-findinmap-environment-example)

### 리전별 값과 함께 Fn::FindInMap 사용
<a name="intrinsic-function-reference-findinmap-region-example"></a>

다음 예제에서는 `AWSInstanceType2Arch` 및 `AWSRegionArch2AMI`의 두 가지 매핑이 포함된 템플릿에서 `Fn::FindInMap`를 사용하는 방법을 보여줍니다. 또한 `t3.micro` 및 `t4g.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의 퍼블릭 파라미터로 사용할 수 있습니다. 자세한 내용은 [동적 참조를 사용하여 다른 서비스에 저장된 값 가져오기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)를 참조하세요.

#### JSON
<a name="intrinsic-function-reference-findinmap-region-example.json"></a>

```
{
  "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
<a name="intrinsic-function-reference-findinmap-region-example.yaml"></a>

```
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 사용
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

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

`Fn::FindInMap`은 `EnvironmentType` 파라미터를 기반으로 적절한 `SecurityGroupIds`를 반환합니다. 그런 다음 `Fn::Split`은 보안 그룹 ID의 쉼표로 구분된 문자열을 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids)에 대한 예상 형식인 목록으로 분할합니다.

`EnvironmentType`을 `Dev`로 설정하여 이 스택을 배포하는 경우 `EC2Instance`의 `SecurityGroupIds`는 `sg-12345678`이 됩니다. `EnvironmentType`을 `Prod`로 설정하는 경우 `sg-abcdef01`과 `sg-ghijkl23`이 사용됩니다.

#### JSON
<a name="intrinsic-function-reference-findinmap-environment-example.json"></a>

```
{
  "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
<a name="intrinsic-function-reference-findinmap-environment-example.yaml"></a>

```
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 ]
```

## 지원되는 함수
<a name="w2aac24c25c13"></a>

`Fn::FindInMap` 함수에서 다음과 같은 함수를 사용할 수 있습니다.
+ `Fn::FindInMap`
+ `Ref`

## 관련 리소스
<a name="w2aac24c25c15"></a>

`Fn::FindInMap` 함수에서 다른 내장 함수나 기본값을 사용하려면 템플릿 내에서 `AWS::LanguageExtensions` 변환을 선언해야 합니다. 자세한 내용은 [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md) 섹션을 참조하세요.

이러한 관련 주제는 `Fn::FindInMap` 함수를 사용하는 템플릿을 개발할 때 도움이 될 수 있습니다.
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ *AWS CloudFormation 사용 설명서*의 [CloudFormation 템플릿 Mappings 구문](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html)