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

时间:2018-11-25 18:01:55

标签: yaml amazon-cloudformation serverless aws-serverless aws-sam

当我尝试部署我的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

7 个答案:

答案 0 :(得分:5)

Visual Studio Code的Ansible扩展对我造成了此错误消息。我将其删除,这为我的情况解决了问题。

答案 1 :(得分:4)

答案 2 :(得分:2)

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

  • vscode-cfn-lint
  • 无服务器IDE
  • aws-cloudformation-yaml
  • 用于Visual Studio代码的AWS工具包

答案 3 :(得分:1)

几乎可以肯定,此错误消息是您的IDE使用的YAML解析器中的一个假阳性。要评估AWS SAM模板的正确性,您应该改用cfn-python-lint,该插件随大多数主要IDE一起提供(不幸的是,不是Visual Studio,而是Visual Studio Code)。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:-1)

您可以使用全名。只需删除!,用引号将其包装,并将整个表达式用{}:

{"Ref": Bucket}