【问题标题】:AWS SAM YAML template - Unknown Tag !RefAWS SAM YAML 模板 - 未知标签!Ref
【发布时间】:2019-04-27 11:04:46
【问题描述】:

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

【问题讨论】:

  • 我认为!仍然不支持表示法。试试 REF
  • 绝对可以在 YAML AWS SAM 中使用 !Ref。
  • @EdsonF:产生错误消息的原因是什么?您使用的是什么 IDE?
  • @Dunedan Visual Studio 2017。我也尝试过 Visual Studio Code,但无济于事
  • 运行sls deploy会失败吗?

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


【解决方案1】:

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

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

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

【讨论】:

  • 我更喜欢这个解决方案,因为它不会向主 settings.json 添加不必要的设置,谢谢。
【解决方案2】:

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

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

【讨论】:

  • 添加这个对我有帮助。在 VSCode 中按 ctrl+,搜索 yaml 自定义标签 并点击 在 settings.json 中编辑
  • 仅供参考,如果您使用带有coc-yaml 的neovim,添加它会像一个魅力!只需通过运行:CocConfig 将其添加到coc-settings.json
  • 对于neovim-lsp,这将是lua中典型初始化块的一部分,如下所示:require'nvim_lsp'.yamlls.setup{settings={yaml={customTags={"!Equals sequence", !FindInMap sequence", !GetAtt scalar", !GetAZs scalar", !ImportValue scalar", !Join sequence scalar", !Ref scalar", !Select sequence", !Split sequence", !Sub scalar", !And sequence", !Not sequence", !Equals sequence", !Sub sequence", !ImportValue scalar", !If sequence"}}}} EOF
  • 这个解决方案在我禁用 kubernetes 扩展之前不起作用
  • 我在GetAtt 遇到了这个问题,除了“更新自定义标签”自动添加的设置之外,还需要添加"!GetAtt sequence"。 (还需要加上"!Cidr""!Cidr sequence")。
【解决方案3】:
【解决方案4】:

Visual Studio Code 的 Ansible 扩展导致我出现此错误消息。我删除了它,这解决了我的情况。

【讨论】:

    【解决方案5】:

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

    • vscode-cfn-lint
    • 无服务器 IDE
    • aws-cloudformation-yaml
    • AWS Toolkit for Visual Studio Code

    【讨论】:

    • 删除 Redhat yaml 扩展对我有用
    【解决方案6】:

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

    【讨论】:

    • 这就是为我解决的问题!!谢谢!
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2018-04-15
    • 2021-04-10
    • 2019-04-24
    • 2017-10-04
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多