

これは新しい 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 ]
```

**注記**  
短縮形を使用した 2 つの関数の 2 つのインスタンスをネストすることはできません。

## パラメータ
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
Mappings セクションで宣言された、キーと値を含むマッピングの論理名。

TopLevelKey  <a name="TopLevelKey"></a>
最上位のキー名。この値は、キーと値のペアのリストです。

SecondLevelKey  <a name="SecondLevelKey"></a>
2 番目のレベルのキー名で、`TopLevelKey` に割り当てられたリストのキーの 1 つに設定されます。

## 戻り値
<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` の 2 つのマッピングを含むテンプレートで `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>

次の例は、1 つのマッピング `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)」