【问题标题】:Using Ref inside Fn::Sub in Cloudformation在 Cloudformation 的 Fn::Sub 中使用 Ref
【发布时间】:2018-12-25 01:38:33
【问题描述】:

我正在尝试使用 fn::sub 并在其中使用 Ref。

我有一个字符串“评论 xyz ${NAME}”。该字符串作为堆栈的参数出现。假设参数名称是“test”。

我现在想使用 Cloudformation 脚本中的 fn::sub 函数替换字符串中的 ${NAME}。

fn::sub:[{"Ref":"test"},{"NAME":"balaji"}]

预期输出是“评论 xyz 巴拉吉”。

但是,这是我得到的错误:

模板验证错误:模板错误:一个或多个 Fn::Sub 内在函数不指定预期的参数。指定一个字符串 作为第一个参数,以及一个可选的第二个参数来指定 字符串中要替换的值的映射

让我知道这里需要解决的问题。

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    我没有尝试过 Fn::Sub,但是这些语法有效:

    SubnetIds:
      Fn::Split: [ ",", Ref: subnetsInternal]
    

    EnvironmentName: 
      !Join ["", [Ref: applicationName, "-env"]]
    

    【讨论】:

      【解决方案2】:

      根据docsFn::Sub中的第一个参数必须是:

      一个带有变量的字符串,AWS CloudFormation 在运行时用它们的关联值替换。将变量写为 ${MyVarName}。变量可以是模板参数名称、资源逻辑 ID、资源属性或键值映射中的变量。 如果您只指定模板参数名称、资源逻辑 ID 和资源属性,请不要指定键值映射。

      (已添加重点。)

      因此,(在撰写本文时)不可能做到这一点。

      如果你有一个参数:

      "test": {
        "Type": "String",
        "Default": "Comment xyz ${NAME}"
      }
      

      然后是替换:

      "Fn::Sub": ["${test}", {"NAME": "balaji"}]
      

      替换将产生文字字符串Comment xyz ${NAME}

      【讨论】:

      猜你喜欢
      • 2020-11-26
      • 2020-07-20
      • 2017-11-11
      • 2020-06-13
      • 2021-11-11
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多