无法解析“serverless.yml”:映射条目的缩进错误

Posted

技术标签:

【中文标题】无法解析“serverless.yml”:映射条目的缩进错误【英文标题】:Cannot parse "serverless.yml": bad indentation of a mapping entry 【发布时间】:2022-01-21 07:33:40 【问题描述】:

我包括在外部文件中定义的各种资源,并且在资源部分中也有输出变量。

resources:
  - $file(resources/api-gateway-errors.yml)
  - $file(resources/dynamodb-table.yml)
  - $file(resources/cognito-user-pool.yml)
  - $file(resources/cognito-identity-pool.yml)
  Outputs:
    CampaignStateMachine:
      Value: !Ref CreateCampaignStateFunction
    ProspectStateMachine:
      Value: !Ref ProspectCreateStateFunction

使用上面的代码,我得到以下错误:

 Cannot parse "serverless.yml": bad indentation of a mapping entry in "/Users/user/serverless/outreachful-api/serverless.yml" (101:3)
  
    98 |   - $file(resources/dynamodb-tab ...
    99 |   - $file(resources/cognito-user ...
   100 |   - $file(resources/cognito-iden ...
   101 |   Outputs:
  ---------^
   102 |     CampaignStateMachine:
   103 |       Value: !Ref CreateCampaignS ...

如果我删除所有外部文件并仅保留输出,则没有错误:

resources:
  Outputs:
    CampaignStateMachine:
      Value: !Ref CreateCampaignStateFunction
    ProspectStateMachine:
      Value: !Ref ProspectCreateStateFunction

在通过外部文件包含资源以及拥有输出变量的同时,我应该如何解决这个糟糕的缩进问题?

提前致谢。

【问题讨论】:

您是否尝试过像这样嵌套输出:resources: Resources: Outputs。并尝试将外部文件放在输出之后。 【参考方案1】:

如果没有看到您尝试导入的示例文件,这有点困难,但是通过查看您的配置,您似乎在 yaml 配置中混合了数组表示法和对象表示法。我相信Outputs 也应该是数组的一个项目,所以是这样的:

resources:
  - $file(resources/api-gateway-errors.yml)
  - $file(resources/dynamodb-table.yml)
  - $file(resources/cognito-user-pool.yml)
  - $file(resources/cognito-identity-pool.yml)
  - Outputs:
      CampaignStateMachine:
        Value: !Ref CreateCampaignStateFunction
      ProspectStateMachine:
        Value: !Ref ProspectCreateStateFunction

【讨论】:

是的。你说的对。正如您提到的,输出也应该是数组的一项。我已将输出添加为数组项。但是当我尝试阅读 $self:resources.Outputs.CampaignStateMachine.Value 时出现错误。你介意指导我阅读 CampaignStateMachine 的价值吗? 我认为最好的方法是直接在任何你想使用它的地方直接使用该值,所以只需!Ref CreateCampaignStateFunction 我需要通过环境变量传递状态函数 ARN: addCampaign: handler: services/campaign/func/stateMachine.main 环境:campaignstatemachine_arn: $self:resources.Outputs.CampaignStateMachine.Value所以我可以像campaignstatemachine_arn一样使用它:!Ref CreateCampaignStateFunction 对吗? 是的,这种方法应该可行【参考方案2】:

实际上,我一直在寻找配置资源部分的混合方法。我在多个配置文件部分找到了指导方针here。

【讨论】:

以上是关于无法解析“serverless.yml”:映射条目的缩进错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:与数据源关联的解析程序

Serverless.yml:在另一个中引用现有的环境变量

serverless.yml 中的运行时变量未设置节点版本

在 CloudFormation 或 serverless.yml 中提供 OriginAccessIdentity 参考

将 Lambda 函数分配给 serverless.yml 中的特定 VPC ID

我们如何使用 serverless.yml 创建 AWS S3 存储桶并向其中添加文件?