AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Fn::FindInMap

内部函数 Fn::FindInMap 返回与 Mappings 部分声明的双层映射中的键对应的值。

声明

JSON

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

YAML

完整函数名称的语法:

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

短格式的语法:

Copy
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]

注意

您无法以简短形式嵌套两个函数的两个实例。

参数

MapName

Mappings 部分中所声明映射的逻辑名称,包含密钥和值。

TopLevelKey

顶层密钥名称。其值是一个键/值对列表。

SecondLevelKey

第二层密钥的名称,设置为分配给 TopLevelKey 的列表中的其中一个密钥。

返回值:

分配给 SecondLevelKey 的值。

示例

下面的示例显示了如何在具有以下特征的模板中使用 Fn::FindInMap:具有包含单一映射 RegionMapMappings 部分,该映射将 AMI 与 AWS 地区关联起来。

  • 该映射具有 5 个对应多个 AWS 地区的顶层密钥。

  • 每个顶层密钥都分配有一个包含两个第二层密钥的列表,这两个密钥是 "32""64",与 AMI 的结构相对应。

  • 每个第二层密钥都分配有一个适当的 AMI 名称。

该示例模板包含由 FindInMap 函数设置 ImageId 属性的 AWS::EC2::Instance 资源。

MapName 可按照个人意愿设置,在本例中为 "RegionMap"TopLevelKey 设置为创建堆栈的地区,通过使用 "AWS::Region" 伪参数确定。SecondLevelKey 设置为所需的架构,在本例中为 "32"

FindInMap 将返回分配给 FindInMap 的 AMI。对于 us-east-1 中的 32 位实例,FindInMap 将返回 "ami-6411e20d"

JSON

Copy
{ ... "Mappings" : { "RegionMap" : { "us-east-1" : { "32" : "ami-6411e20d", "64" : "ami-7a11e213" }, "us-west-1" : { "32" : "ami-c9c7978c", "64" : "ami-cfc7978a" }, "eu-west-1" : { "32" : "ami-37c2f643", "64" : "ami-31c2f645" }, "ap-southeast-1" : { "32" : "ami-66f28c34", "64" : "ami-60f28c32" }, "ap-northeast-1" : { "32" : "ami-9c03a89d", "64" : "ami-a003a8a1" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "32"]}, "InstanceType" : "m1.small" } } } }

YAML

Copy
Mappings: RegionMap: us-east-1: 32: "ami-6411e20d" 64: "ami-7a11e213" us-west-1: 32: "ami-c9c7978c" 64: "ami-cfc7978a" eu-west-1: 32: "ami-37c2f643" 64: "ami-31c2f645" ap-southeast-1: 32: "ami-66f28c34" 64: "ami-60f28c32" ap-northeast-1: 32: "ami-9c03a89d" 64: "ami-a003a8a1" Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap [ RegionMap, !Ref "AWS::Region", 32 ] InstanceType: m1.small

支持的函数

您可以在 Fn::FindInMap 函数中使用以下函数:

  • Fn::FindInMap

  • Ref