これは新しい 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]
注記
短縮形を使用した 2 つの関数の 2 つのインスタンスをネストすることはできません。
パラメータ
- MapName
-
Mappings セクションで宣言された、キーと値を含むマッピングの論理名。
- TopLevelKey
-
最上位のキー名。この値は、キーと値のペアのリストです。
- SecondLevelKey
-
2 番目のレベルのキー名で、
TopLevelKeyに割り当てられたリストのキーの 1 つに設定されます。
戻り値
SecondLevelKey に割り当てられた値。
例
次の例では、Fn::FindInMap 関数を使用する方法を示します。
リージョン固有の値で Fn::FindInMap を使用する
次の例は、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 のパブリックパラメータとしても利用できます。詳細については、「動的参照を使用して他のサービスに格納されている値を取得する」を参照してください。
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-12345678901234567ARM64:ami-23456789012345678us-west-1: HVM64:ami-34567890123456789ARM64:ami-45678901234567890eu-west-1: HVM64:ami-56789012345678901ARM64:ami-67890123456789012ap-southeast-1: HVM64:ami-78901234567890123ARM64:ami-89012345678901234ap-northeast-1: HVM64:ami-90123456789012345ARM64:ami-01234567890123456Resources: 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 を使用する方法を示します。また、環境が 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
{ "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-12345678Prod: SecurityGroupIds:sg-abcdef01,sg-ghijkl23Resources: 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 関数を使用するテンプレートを作成する際に役立ちます。
-
『AWS CloudFormation ユーザーガイド』の「CloudFormation テンプレートの Mappings 構文」