无法解析“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”:映射条目的缩进错误的主要内容,如果未能解决你的问题,请参考以下文章
在 CloudFormation 或 serverless.yml 中提供 OriginAccessIdentity 参考