AWS SAM YAML 模板 - 未知标签 !Ref

AWS SAM YAML template - Unknown Tag !Ref

当我尝试部署我的 AWS SAM YAML 文件时,它失败并指出 !Ref 是未知标签。

有解决这个问题的想法吗?

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

此错误消息几乎可以肯定是您的 IDE 使用的 YAML 解析器的误报。要评估 AWS SAM 模板的正确性,您应该改用 cfn-python-lint,它附带了大多数主要 IDE 的插件(不幸的是,不是 Visual Studio,而是 Visual Studio代码).

您可以在 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
  • Visual Studio 代码
  • 的 AWS 工具包

Visual Studio 代码的 Ansible 扩展导致我出现此错误消息。我删除了它,这解决了我的问题。

CloudFormation Visual Studio Code extension should manage these tags for you

在 vscode 中,单击文件 > 将工作区另存为 > 单击保存

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

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