【问题标题】:YAML Error for CloudFormation file with !Equal & !Ref带有 !Equal & !Ref 的 CloudFormation 文件的 YAML 错误
【发布时间】:2020-03-04 01:41:09
【问题描述】:

遇到 YAML 问题,对于 CloudFormation 文件,该文件迄今为止一直运行良好,但今天它开始给出一个错误,即该文件在几行内是无效的 YAML:

Conditions:
  Az2Enabled: !Equals [!Ref "AzCount", "2"]
  CreateStagingResources: Equals [!Ref "Environment", staging]  

在上面的例子中,第二行给出了错误,而第三行(虽然是错误的)没有给出任何错误。我在第二行得到的错误是:

unknown tag ! at line 95, column 38: ... Enabled: !Equals [!Ref "AzCount", "2"] ^

我正在使用 AWS 的说明,并且还仅从 AWS 下载了模板:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html

我已经尝试了以下 URL 在线提供的 YAML 验证器:

https://yamlvalidator.com/
https://codebeautify.org/yaml-validator
https://onlineyamltools.com/validate-yaml

如果我删除 : & ! 之间的空格,它表示同样有效,但现在该行出现错误:

  Tags:
    - Key: ClientName
      Value:!Sub "${ClientName}"

错误是:

can not read an implicit mapping pair; a colon is missed at line 108, column 37: Value:!Sub "${ClientName}" ^

如果我删除 : & !Sub 之间的空格,如果我保留空格,就会出现上述错误!

不确定,如果我应该将其转换为长格式,请尝试按照此链接给出的格式:

https://gist.github.com/DavidWells/be078deef45f8cb2e280ccc7af947392

Conditions:
  Az2Enabled: {"Fn::Equals", {Ref: "AzCount", "2"}}

上面的格式没有报错,但是必须把整个文件转换成这种格式:-(

有没有人遇到过这个问题并有解决方案?

【问题讨论】:

  • 您是否在提交时遇到错误,或者在 linter 中?我相信: 后面的空格是必需的。
  • 两者,当我在 AWS 中运行它时,它给出了错误,所以我在在线验证器上检查了相同的内容。直到昨天,完全相同的文件还在工作。我检查了 AWS 文档,他们也说需要空间,但是当我给空间时,它给出了错误,当我删除它时,错误消失了。
  • 我会使用 cfn-lint 来验证文件。它处理 CloudFormation 独有的一些东西。就我个人而言,我只在叶节点上使用函数的简写版本,所以如果我需要在Equals 中使用Ref,我将使用Fn::Equals!Sub。另外,我从不使用 JSON 结构。
  • 如果我使用以下格式:条件:Az2Enabled: {Fn::Equals, [Ref: "AzCount", "2"]},它就像一个魅力,但这是否意味着我需要更改整个文件?另外,目前还不确定为什么它突然停止工作
  • 我不知道你有来更改文件,我只是觉得更容易。关于 YAML 验证器,请记住 CloudFormation 函数不是标准 YAML,因此许多验证器将无法工作。至于“它突然停止工作”,我怀疑有些东西没有什么不同。 AWS 确实有时会破坏某些东西,因此它可能会发生,但更有可能是您遗漏了某些更改,至少这是我的经验。

标签: amazon-web-services yaml amazon-cloudformation


【解决方案1】:

我认为您在 :

中缺少!
CreateStagingResources: Equals [!Ref "Environment", staging]

应该是:

CreateStagingResources: !Equals [!Ref "Environment", staging]

【讨论】:

  • 谢谢。是的,这是一个没有给出错误的示例行。如果我输入 !Equals,而不仅仅是 Equals,它会给出与提到的相同的错误。
  • @gagneet 它仍然是必需的,因为你不能拥有普通的Equals。那么AzCount 是什么?
  • 是的,完全明白。我只是把它放在那里作为一个例子,说明什么是有效的,什么是无效的。很抱歉造成混淆,将两者分开,以便更清楚
猜你喜欢
  • 1970-01-01
  • 2020-06-01
  • 2021-07-31
  • 2021-02-15
  • 2020-10-30
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
相关资源
最近更新 更多