Fn::FindInMap enhancements - AWS CloudFormation

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 将解析为的值。该字段是可选的。

所有参数 MapNameTopLevelKeySecondLevelKeyDefaultValue 都可以是内部函数,只要其能够在转换期间解析为有效值。

示例

以下示例演示如何在添加 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::SelectFn::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::FindInMap 内置函数的更多信息和示例,请参阅Fn::FindInMap

有关 AWS::LanguageExtensions 转换的更多信息,请参阅 AWS::LanguageExtensions 转换