在 serverless.yaml 文件中遇到以下错误:无法读取块映射条目;多行键不能是隐式键。

12

我正在尝试将lambda函数和serverless.yml文件一起部署到AWS,但它会抛出以下错误

以下是在YAML文件中定义的函数

functions:
 s3-thumbnail-generator:
 handler:handler.s3_thumbnail_generator  
   events:
     - s3:
       bucket: ${self:custom.bucket}
       event: s3.ObjectCreated:*
       rules:
       - suffix: .png

plugins:
  - serverless-python-requirements  

我遇到的错误:

无法读取块映射条目;在serverless.yml中,多行键可能不是隐式键。位于第45行,第10列:

我需要了解如何修复YAML文件中的此问题,以便将函数部署到AWS?


1
请注意,文件格式称为YAML,自2006年以来推荐的文件扩展名为.yamlYML与YAML一样古老,但完全不同。 - Anthon
我发现在在线Swagger编辑器中调试此类语法错误很困难。这些问题在SublimeText等文本编辑器中更容易识别,因为使用颜色编码来突出显示语法问题。 - OneXer
2个回答

7
问题在于该行末尾没有数值指示符(:):
handler:handler.s3_thumbnail_generator

因此,解析器继续尝试通过添加events和一个值指示器来收集多行普通标量。但多行普通标量不能是YAML中的键。

您的实际错误不明确。可能是您需要添加值指示器并在键中嵌入冒号:

functions:
 s3-thumbnail-generator:
 handler:handler.s3_thumbnail_generator:
   events:
     - s3:
       bucket: ${self:custom.bucket}
       event: s3.ObjectCreated:*
       rules:
       - suffix: .png

plugins:
  - serverless-python-requirements 

或许是因为那个冒号本应该是一个值指示符(通常需要一个接下来的空格),而你的缩进不够规范导致出现了问题:
functions:
  s3-thumbnail-generator:
  handler: handler.s3_thumbnail_generator  
  events:
     - s3:
       bucket: ${self:custom.bucket}
       event: s3.ObjectCreated:*
       rules:
       - suffix: .png

plugins:
  - serverless-python-requirements 

感谢@Anthon的回复。然而问题还没有解决。我按照建议添加了值指示器(:)handler:handler.s3_thumbnail_generator:但是我遇到了重复错误,如下所示:在serverless.yml的第92行,第-1450列中重复映射键:函数:我按照您提到的方式进行了所有更改,但仍然没有帮助。请让我知道是否需要提供更多细节来获得相同的解决方案?非常感谢。谢谢 - Hari
1
我需要的是您基于哪个示例或文档编写代码的链接。(将其编辑到您的问题中,并省略任何UPDATEEDIT)。我没有AWS的经验,只有YAML的经验,并非每个有效的YAML文档都对AWS有意义。 - Anthon

0

如果这是您的原始文件,则 YAML 文件存在语法错误。我在可能出错的那一行下面添加了一个注释:

functions:
 s3-thumbnail-generator:
 handler:handler.s3_thumbnail_generator  
   events:
     - s3:
       bucket: ${self:custom.bucket}
       event: s3.ObjectCreated:*
       rules:
       - suffix: .png
       ^^^ this line should be indented one level

plugins:
  - serverless-python-requirements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接