【问题标题】:Keep getting errors using Join function in CloudFormation在 CloudFormation 中使用 Join 函数时不断出错
【发布时间】:2022-01-03 20:52:14
【问题描述】:

在 CFN 中使用 Join 函数让我抓狂。

它有时有效,有时无效,而且我使用的语法似乎没有任何问题,错误并不一致。模板的验证总是返回 Ok,但在堆栈创建的最后一步,它失败了,有时在创建资源时抛出错误(因为名称格式错误)或给我这个错误消息 every Fn::Join object requires two parameters, (1) a string delimiter and (2) a list of strings to be joined or a function that returns a list of strings (such as Fn::GetAZs) to be joined.

有没有一种很好的调试方法而不是一路创建资源?

例如,这个语法有什么问题?

  BucketName: !Join 
    - ''
    - - !FindInMap 
        - Naming
        - BasicPrefix
        - Name
      - '-'
      - !Ref BusinessUnitName
      - '-'
      - !Ref EnvType

或者,为什么不能使用类似下面的语法来获得相同的结果?

  BucketName: !Join 
    - '-'
    - - !FindInMap 
        - Naming
        - BasicPrefix
        - Name
      - !Ref BusinessUnitName
      - !Ref EnvType

或者这个速记:

BucketName: !Join ['-', [!FindInMap [Naming, BasicPrefix, Name], !Ref BusinessUnitName, !Ref EnvType]]

没有一个会起作用。我必须不断尝试不同的方法,直到 CFN 接受它。太累了。

请帮忙。

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    您的语法看起来正确,但需要完整的模板才能确定错误原因。

    但是对于您的场景,与 Fn::Join 相比,Fn::Sub 是更好的选择,请尝试使用 Fn::Sub 和如下映射

    BucketName: !Sub
      - ${MapResult}-${BU}-${Env}
      - { MapResult: !FindInMap [Naming, BasicPrefix, Name] }
      - { BU: !Ref BusinessUnitName }
      - { Env: !Ref EnvType }
    

    【讨论】:

    • 终于找到问题了,和"EnvType"参数的类型有关,应该是String但是是CommaDelimitedList。
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2017-03-01
    相关资源
    最近更新 更多