如何从环境变量中注入无服务器参数?
How to inject serverless parameter from environment variables?
我正在尝试使用无服务器部署到 AWS,但出现以下错误。
An error occurred: {ProjectName} - Invalid State Machine Definition:
'SCHEMA_VALIDATION_FAILED: Expected value of type Integer at
/States/WaitForCampusM/Seconds' (Service: AWSStepFunctions; Status
Code: 400; Error Code: InvalidDefinition; Request ID:
1facfbb9-9570-456d-8c33-1a2dadaea5ff).
这在我使用硬编码值时工作正常,但现在我尝试使用环境变量,以便我可以以不同方式控制部署和集成测试之间的等待时间。这一切都通过 BitBucket 管道进行部署。
下面是我在step函数中的状态定义:
WaitForCampusM:
Type: Wait
Seconds: ${env:CAMPUSM_WAIT_DELAY}
Next: CampusMPull
这个值是在 BitBucket 部署设置中设置的,我决定 echo
输出这个值,所以这是我的管道
script:
- npm install -g serverless
- echo $CAMPUSM_WAIT_DELAY
- sls deploy
这似乎记录了我的值,这是一个有效数字(但我假设出于某种原因被视为字符串?)
我也尝试过在无服务器中使用 SecondsPath
,但不幸的是,这似乎也不起作用。谁能看出我还遗漏了什么?
我看到你 运行 遇到了一个问题,这个问题可以概括为:"Environment Variables are always strings"。这始终在代码中处理,例如使用 process.env
并强制该值为整数。显然 serverless-step-functions
的维护者还没有这样做。我看到你创建了一个 GitHub 问题来通知他们这个问题,谢谢!
与此同时,在他们修复它之前,也许您应该考虑使用另一种方法为每个 stage/environment 设置不同的配置数据。这是一个可以为您工作的代码示例。在这里阅读我发现的一篇博客文章的更详细解释: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
我正在尝试使用无服务器部署到 AWS,但出现以下错误。
An error occurred: {ProjectName} - Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: Expected value of type Integer at /States/WaitForCampusM/Seconds' (Service: AWSStepFunctions; Status Code: 400; Error Code: InvalidDefinition; Request ID: 1facfbb9-9570-456d-8c33-1a2dadaea5ff).
这在我使用硬编码值时工作正常,但现在我尝试使用环境变量,以便我可以以不同方式控制部署和集成测试之间的等待时间。这一切都通过 BitBucket 管道进行部署。
下面是我在step函数中的状态定义:
WaitForCampusM:
Type: Wait
Seconds: ${env:CAMPUSM_WAIT_DELAY}
Next: CampusMPull
这个值是在 BitBucket 部署设置中设置的,我决定 echo
输出这个值,所以这是我的管道
script:
- npm install -g serverless
- echo $CAMPUSM_WAIT_DELAY
- sls deploy
这似乎记录了我的值,这是一个有效数字(但我假设出于某种原因被视为字符串?)
我也尝试过在无服务器中使用 SecondsPath
,但不幸的是,这似乎也不起作用。谁能看出我还遗漏了什么?
我看到你 运行 遇到了一个问题,这个问题可以概括为:"Environment Variables are always strings"。这始终在代码中处理,例如使用 process.env
并强制该值为整数。显然 serverless-step-functions
的维护者还没有这样做。我看到你创建了一个 GitHub 问题来通知他们这个问题,谢谢!
与此同时,在他们修复它之前,也许您应该考虑使用另一种方法为每个 stage/environment 设置不同的配置数据。这是一个可以为您工作的代码示例。在这里阅读我发现的一篇博客文章的更详细解释: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