【问题标题】:Cannot parse "serverless.yml": bad indentation of a mapping entry无法解析“serverless.yml”:映射条目的缩进错误
【发布时间】: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。并尝试将外部文件放在输出之后。

标签: aws-lambda serverless-framework


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多