これは新しい 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 を使用する
次の例は、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 を使用する
次の例では、マッピングでキーが見つからない場合に、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::FindInMap と Ref 以外の組み込み関数を使用するには、テンプレート内で AWS::LanguageExtensions 変換を宣言する必要があります。詳細については、「Fn::FindInMap enhancements」を参照してください。
これらの関連トピックは、Fn::FindInMap 関数を使用するテンプレートを作成する際に役立ちます。
-
『AWS CloudFormation ユーザーガイド』の「CloudFormation テンプレートの Mappings 構文」