如何从环境变量中注入无服务器参数?

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