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 を使用する
次の例は、AMI と AWS リージョンを関連付ける 1 つのマッピング RegionMap
を含む Mappings
セクションを使用して、テンプレートに対して Fn::FindInMap
を使用する方法を示します。
-
このマッピングには、さまざまな AWS リージョンに対応する 5 つの最上位キーがあります。
-
最上位キーにはそれぞれ、AMI のアーキテクチャに対応する 2 番目のレベルのキーを 2 つ (
"HVM64"
と"HVMG2"
) 持つリストが割り当てられます。 -
2 番目のレベルのキーにはそれぞれ、適切な AMI 名が割り当てられます。
サンプルテンプレートには、AWS::EC2::Instance
関数によって ImageId
プロパティが設定された FindInMap
リソースが含まれています。
MapName
は目的のマッピング、この例では "RegionMap"
に設定されます。TopLevelKey
は、スタックが作成されるリージョン ("AWS::Region"
擬似パラメータを使用して決定されます) に設定されます。SecondLevelKey
は目的のアーキテクチャ、この例では "HVM64"
に設定されます。
FindInMap
は、FindInMap
に割り当てられた AMI を返します。us-east-1 の HVM64 のインスタンスの場合は、FindInMap
は "ami-0ff8a91507f77f867"
を返します。
注記
マッピングセクションの代替として AWS Systems Manager AMI エイリアスを検討してください。使用する AMI が変更されるたびに、すべてのテンプレートが新しい ID で更新されないようにするには、AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
パラメータタイプを使用して、スタックの作成時または更新時に最新の AMI ID を取得します。一般的に使用される AMI の最新バージョンは、パブリックパラメータとしても利用できます。テンプレートで AMI エイリアスを参照する方法の例については、「Systems Manager パラメータタイプのリファレンス」を参照してください。
JSON
{ ... "Mappings" : { "RegionMap" : { "us-east-1" : { "HVM64" : "ami-0ff8a91507f77f867", "HVMG2" : "ami-0a584ac55a7631c0c" }, "us-west-1" : { "HVM64" : "ami-0bdb828fd58c52235", "HVMG2" : "ami-066ee5fd4a9ef77f1" }, "eu-west-1" : { "HVM64" : "ami-047bb4163c506cd98", "HVMG2" : "ami-0a7c483d527806435" }, "ap-southeast-1" : { "HVM64" : "ami-08569b978cc4dfa10", "HVMG2" : "ami-0be9df32ae9f92309" }, "ap-northeast-1" : { "HVM64" : "ami-06cd52961ce9f0d85", "HVMG2" : "ami-053cdd503598e4a9d" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "HVM64" ] }, "InstanceType" : "t2.micro" } } } }
YAML
Mappings: RegionMap: us-east-1: HVM64: "ami-0ff8a91507f77f867" HVMG2: "ami-0a584ac55a7631c0c" us-west-1: HVM64: "ami-0bdb828fd58c52235" HVMG2: "ami-066ee5fd4a9ef77f1" eu-west-1: HVM64: "ami-047bb4163c506cd98" HVMG2: "ami-0a7c483d527806435" ap-southeast-1: HVM64: "ami-08569b978cc4dfa10" HVMG2: "ami-0be9df32ae9f92309" ap-northeast-1: HVM64: "ami-06cd52961ce9f0d85" HVMG2: "ami-053cdd503598e4a9d" Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - HVM64 InstanceType: t2.micro
環境固有の設定に 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
{ ... "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": "ami-0a70b9d193ae8a799", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }
YAML
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: ami-0a70b9d193ae8a799 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
関数を使用するテンプレートを作成する際に役立ちます。