我正在尝试使用无服务器到AWS进行部署,但是出现以下错误。
发生错误:{ProjectName}-无效的状态机定义: 'SCHEMA_VALIDATION_FAILED:类型为Integer的期望值,位于 / States / WaitForCampusM / Seconds'(服务:AWSStepFunctions;状态 代码:400;错误代码:InvalidDefinition;要求编号: 1facfbb9-9570-456d-8c33-1a2dadaea5ff)。
当我使用硬编码值时,此方法工作正常,但现在我正尝试使用环境变量,以便可以在部署和集成测试之间不同地控制等待时间。所有这些都通过BitBucket管道进行部署。
这是步骤功能中我的状态的定义:
WaitForCampusM:
Type: Wait
Seconds: ${env:CAMPUSM_WAIT_DELAY}
Next: CampusMPull
此值是在BitBucket部署设置中设置的,我决定echo
除去该值,所以这是我的管道
script:
- npm install -g serverless
- echo $CAMPUSM_WAIT_DELAY
- sls deploy
这似乎记录了我的值,该值是一个有效数字(但由于某种原因,我认为该值被视为字符串?)
我也尝试在无服务器环境中使用SecondsPath
,但不幸的是,这似乎也不起作用。谁能看到我可能还会想念的东西?
答案 0 :(得分:1)
我看到您遇到了一个问题,可以总结为:“环境变量始终是字符串” 。始终在代码中使用process.env
并将值强制为Integer进行处理。显然serverless-step-functions
的维护者尚未这样做。我看到您创建了一个GitHub Issue来通知他们问题,谢谢!
同时,在他们解决问题之前,也许您应该考虑使用另一种方法来为每个阶段/环境设置不同的配置数据。这是一个可以为您服务的代码示例。请阅读此处,以详细了解我发现的博客文章:https://www.jeremydaly.com/how-to-manage-serverless-environment-variables-per-stage/
custom:
CAMPUSM_WAIT_DELAY:
stg: 43200
prod: 43200
other: 99999
WaitForCampusM:
Type: Wait
Seconds: ${self:custom.CAMPUSM_WAIT_DELAY.${self:provider.stage}, self:custom.CAMPUSM_WAIT_DELAY.other}
Next: CampusMPull