在 CloudFormation 中使用 Join 函数不断出错

Keep getting errors using Join function in CloudFormation

使用 CFN 中的 Join 功能让我抓狂。

它有时有效,有时无效,而且我使用的语法似乎没有任何问题,错误并不一致。模板的验证总是 returns 好的,但在堆栈创建的最后一步,它失败了,有时会在创建资源时抛出错误(因为名称格式不正确)或给我这个错误消息 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

或者这个shorthand一个:

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

None 会起作用。我必须不断尝试不同的方法,直到 CFN 接受它。好累。

请帮忙。

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

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

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