【问题标题】:Fn::Sub doesn't work when replacing string returned by Fn::Join in CloudFormation在 CloudFormation 中替换 Fn::Join 返回的字符串时,Fn::Sub 不起作用
【发布时间】:2021-11-11 13:21:22
【问题描述】:

我正在尝试让 Fn::JoinFn::Sub 在 CloudFormation 中一起工作。

根据文档,Fn::Join 返回一个字符串,Fn::Sub 对字符串进行操作。 这是我正在尝试使用的 JSON 语法(显然是更大模板的一部分):

{
    "Fn::Sub": [ 
      {
       "Fn::Join" : [ ":", [ "a", "b", "www.${Domain}" ] ]
      },
      {
        "Domain": "123"
      }
    ]
}

此语法会产生此错误错误:

模板错误:一个或多个 Fn::Sub 内部函数未指定 预期的论点。指定一个字符串作为第一个参数,并指定一个 可选的第二个参数,用于指定要替换的值的映射 字符串

【问题讨论】:

  • 那么如何将其转换为字符串?
  • 我不使用 json 作为模板,但我想应该是 { "Fn::Sub: [ "Fn::Join" : [ ":", [ "a", "b", "www.${Domain}" ] ], { "Domain": "123" } ] }
  • @404 这不是有效的 JSON

标签: amazon-web-services amazon-cloudformation


【解决方案1】:
  1. 请不要使用 json,它太复杂且难以阅读。使用 yaml 甚至更好地迁移到 cdk!

  2. 这可以用一个子解决。

{
    "Fn::Sub": [
       "a:b:www.${Domain}",
      {
        "Domain": "123"
      }
    ]
}

【讨论】:

  • 我必须使用 json。 Fn::Join 发生了什么?我必须在我的模板中有它
  • 为什么必须使用 fn:join? Sub 用更少的代码做同样的事情。
  • 使用 Fn::Join 是因为列表中的某些元素是在运行时以编程方式定义的。我在我的问题中展示的是一个最小的可重现示例
  • 不确定你想说什么,因为这一切都可以通过 fn:sub 实现。 theburningmonk.com/2019/05/…
  • @paolo 我说的有道理吗,或者你真的有只能使用 join Intrinsic 函数的情况?
猜你喜欢
  • 2020-06-13
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 2020-02-24
  • 2017-11-11
  • 2020-07-20
  • 1970-01-01
  • 2019-12-30
相关资源
最近更新 更多