View a markdown version of this page

Fn::FindInMap - AWS CloudFormation

これは新しい CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『AWS CloudFormation ユーザーガイド』を参照してください。

Fn::FindInMap

組み込み関数 Fn::FindInMap は、Mappings セクションで宣言された 2 つのレベルのマッピングのキーに対応する値を返します。

宣言

JSON

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

マッピングでキーが見つからない場合に、フォールバック値を指定する場合は、DefaultValue を含めます。

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

YAML

完全関数名の構文:

Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]

短縮形の構文:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]

マッピングでキーが見つからない場合に、フォールバック値を指定する場合は、DefaultValue を含めます。

完全関数名の構文:

Fn::FindInMap: - MapName - TopLevelKey - SecondLevelKey - DefaultValue: DefaultValue

短縮形の構文:

!FindInMap - MapName - TopLevelKey - SecondLevelKey - DefaultValue: DefaultValue
注記

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

パラメータ

MapName

Mappings セクションで宣言された、キーと値を含むマッピングの論理名。

TopLevelKey

最上位のキー名。この値は、キーと値のペアのリストです。

SecondLevelKey

2 番目のレベルのキー名で、TopLevelKey に割り当てられたリストのキーの 1 つに設定されます。

DefaultValue

指定されたマッピングで TopLevelKey または SecondLevelKey が見つからない場合に Fn::FindInMap が返す値。このパラメータはオプションです。省略した場合、キーが見つからないときに Fn::FindInMap はエラーを返します。

4 番目のパラメータは、キー DefaultValue を持つマップである必要があります。例: {"DefaultValue": "us-east-1"}

戻り値

SecondLevelKey に割り当てられた値。TopLevelKey または SecondLevelKeyが見つからず、DefaultValue が指定されている場合、代わりに DefaultValue が返されます。

次の例では、Fn::FindInMap 関数を使用する方法を示します。

リージョン固有の値で Fn::FindInMap を使用する

次の例は、AWSInstanceType2ArchAWSRegionArch2AMI の 2 つのマッピングを含むテンプレートで 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 を使用する

次の例は、1 つのマッピング SecurityGroups を含む Mappings セクションを使用して、テンプレートに対して Fn::FindInMap を使用する方法を示します。また、環境が DevProd かを指定できる EnvironmentType パラメータも含まれています。デフォルトは Dev ですが、スタックの作成時に上書きできます。

Fn::FindInMap は、EnvironmentType パラメータに基づいて適切な 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 を使用する

次の例では、マッピングでキーが見つからない場合に、DefaultValue を使用してフォールバックを提供します。RegionMap マッピングで現在の AWS リージョン が定義されていない場合、Fn::FindInMap はエラーを発生させる代わりに t3.micro を返します。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "RegionMap": { "us-east-1": { "InstanceType": "t3.large" }, "eu-west-1": { "InstanceType": "t3.medium" } } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "InstanceType", { "DefaultValue": "t3.micro" } ] } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionMap: us-east-1: InstanceType: t3.large eu-west-1: InstanceType: t3.medium Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: !FindInMap - RegionMap - !Ref AWS::Region - InstanceType - DefaultValue: t3.micro

サポートされている関数

Fn::FindInMap 関数で以下の関数を使用できます。

  • Fn::FindInMap

  • Ref

関連リソース

Fn::FindInMap 関数のパラメータで、Fn::FindInMapRef 以外の組み込み関数を使用するには、テンプレート内で AWS::LanguageExtensions 変換を宣言する必要があります。詳細については、「Fn::FindInMap enhancements」を参照してください。

これらの関連トピックは、Fn::FindInMap 関数を使用するテンプレートを作成する際に役立ちます。