Fn::FindInMap
enhancements
AWS::LanguageExtensions
转换增强了 CloudFormation 模板中 Fn::FindInMap
内置函数的功能。
Fn::FindInMap
函数用于从 CloudFormation 模板 Mappings
部分中定义的映射中检索值。但是,标准的 Fn::FindInMap
函数存在一些局限,例如无法处理缺失的映射,也无法使用嵌套了某些内置函数的 Fn::FindInMap
函数。
AWS::LanguageExtensions
转换通过引入以下增强功能来解决这些限制:
-
默认值支持 – 您可以指定在找不到映射时返回默认值。
-
内置函数支持 – 您还可以使用更广泛的内置函数来定义
Fn::FindInMap
的字段,而不是使用标准的Fn::FindInMap
函数。
声明
JSON
{ "Fn::FindInMap" : [ "
MapName
", "TopLevelKey
", "SecondLevelKey
", {"DefaultValue": "DefaultValue
"} ] }
YAML
完整函数名称的语法:
Fn::FindInMap:
- MapName
- TopLevelKey
- SecondLevelKey
- DefaultValue:DefaultValue
短格式的语法:
!FindInMap
- MapName
- TopLevelKey
- SecondLevelKey
- DefaultValue:DefaultValue
参数
- DefaultValue
-
如果在
MapName
映射上找不到TopLevelKey
和/或SecondLevelKey
,则Fn::FindInMap
将解析为的值。该字段是可选的。
所有参数 MapName
、TopLevelKey
、SecondLevelKey
和 DefaultValue
都可以是内部函数,只要其能够在转换期间解析为有效值。
示例
以下示例演示如何在添加 AWS::LanguageExtensions
转换时定义 Fn::FindInMap
的字段。
使用默认值
以下是在 Fn::FindInMap
函数中使用默认值的示例:
JSON
{ //... "Transform": "AWS::LanguageExtensions", //... "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "InstanceType", { "DefaultValue": "t3.micro" } ] //... }
YAML
Transform: 'AWS::LanguageExtensions' #... !FindInMap - 'RegionMap' - !Ref 'AWS::Region' - 'InstanceType' - DefaultValue: t3.micro #...
使用内置函数定义顶层键
以下示例使用 Fn::FindInMap
函数以及其中嵌入的 Fn::Select
和 Fn::Split
内置函数定义顶层键。
JSON
{ //... "Transform": "AWS::LanguageExtensions", //... "Fn::FindInMap": [ "MyMap", { "Fn::Select": [ 0, { "Fn::Split": [ "|", { "Ref": "InputKeys" } ] } ] }, "SecondKey" ] //... }
YAML
Transform: 'AWS::LanguageExtensions' #... !FindInMap: [MyMap, !Select [0, !Split [|, !Ref InputKeys]], SecondKey] #...
支持的函数
您可以在 Fn::FindInMap:
增强参数中使用以下函数:
-
Fn::Split
– 除非将其用作默认值,否则Fn::Split
必须与生成字符串(例如Fn::Join
或Fn::Select
)的内部函数结合使用。
相关资源
有关如何使用 Fn::FindInMap
内置函数的更多信息和示例,请参阅Fn::FindInMap。
有关 AWS::LanguageExtensions
转换的更多信息,请参阅 AWS::LanguageExtensions 转换。