【发布时间】: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