AWS SAM YAML 模板-未知标签! 参考文献

当我尝试部署我的 AWS SAM YAML 文件时,如果说! Ref 是一个未知标记,那么它就失败了。

enter image description here

有什么办法吗?

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31


Resources:
MySimpleFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs4.3
CodeUri: s3://<bucket>/MyCode.zip
Events:
MyUploadEvent:
Type: S3
Properties:
Id: !Ref Bucket
Events: Create
Bucket:
Type: AWS::S3::Bucket
27266 次浏览

这个错误消息几乎肯定是您的 IDE 正在使用的 YAML 解析器发出的假阳性消息。为了评估 AWS SAM 模板的正确性,您应该改用 Cfn-python-lint,它为大多数主要 IDE 提供了插件(遗憾的是不是针对 Visual Studio,而是针对 Visual Studio Code)。

您可以在 settings.json中添加自定义 YAML 标记:

"yaml.customTags": [
"!Equals sequence",
"!FindInMap sequence",
"!GetAtt",
"!GetAZs",
"!ImportValue",
"!Join sequence",
"!Ref",
"!Select sequence",
"!Split sequence",
"!Sub"
]

首先验证您的扩展,我消除了名为 Redhat yaml 的扩展并解决了问题,我有了下一个扩展,一切都很好。

  • Vscode-cfn-lint
  • 无服务器 IDE
  • Aws-Cloudformation- yaml
  • 用于 VisualStudio 代码的 AWS 工具包

VisualStudio 代码的安塞尔扩展引起了这个错误消息。我移除了它,这解决了我的问题。

在 vscode 中,单击 file > save workspace as > click save

然后,打开 workspace.code-workspace 并粘贴以下内容:

{
"folders": [
{
"path": ".."
}
],
"settings": {
"yaml.customTags": [
"!Equals sequence",
"!FindInMap sequence",
"!GetAtt",
"!GetAZs",
"!ImportValue",
"!Join sequence",
"!Ref",
"!Select sequence",
"!Split sequence",
"!Sub"
]
}
}

在 VisualStudio 代码上,单击 File——-> Perferences——-> Settings 在搜索栏上,键入 Yaml tags,然后它将显示出 Yaml:Custom TagsEdit in Settings.json

Settings.josn文件中:

"yaml.customTags": [
"!Cidr",
"!Cidr sequence",
"!And",
"!And sequence",
"!If",
"!If sequence",
"!Not",
"!Not sequence",
"!Equals",
"!Equals sequence",
"!Or",
"!Or sequence",
"!FindInMap",
"!FindInMap sequence",
"!Base64",
"!Join",
"!Join sequence",
"!Ref",
"!Sub",
"!Sub sequence",
"!GetAtt",
"!GetAZs",
"!ImportValue",
"!ImportValue sequence",
"!Select",
"!Select sequence",
"!Split",
"!Split sequence"
],

注意: 如果您有问题与 "!Cidr",请确保您包括的 "!Cidr sequence"以及,unresolved Tag的问题将得到解决

希望对你有所帮助!