【问题标题】:How to inject serverless parameter from environment variables?如何从环境变量中注入无服务器参数?
【发布时间】:2019-12-05 00:13:15
【问题描述】:

我正在尝试使用无服务器到 AWS 进行部署,但出现以下错误。

发生错误:{ProjectName} - 无效的状态机定义: 'SCHEMA_VALIDATION_FAILED:整数类型的预期值在 /States/WaitForCampusM/Seconds'(服务:AWSStepFunctions;状态 代码:400;错误代码:无效定义;请求编号: 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,但不幸的是,这似乎也不起作用。谁能看到我可能还缺少什么?

【问题讨论】:

  • 你做的一切都是对的。什么都没有向我跳出来。我有 2 个 cmets:#1 让我们知道 CloudFormation 中的实际值是多少。转到您的 .serverless 目录,查看 CF 模板,然后粘贴带有 Seconds 的行。也许那里有一个额外的空间或什么?和#2 你如何声明$CAMPUSM_WAIT_DELAY
  • @solsglasses 谢谢。我在尝试记录问题后决定,这似乎是一个可能的错误 - github.com/horike37/serverless-step-functions/issues/280
  • 是的,我看到你创建了那个 GitHub 问题。绝对是serverless-step-functions 的错误。

标签: serverless-framework bitbucket-pipelines


【解决方案1】:

我看到您遇到的问题可以概括为:“环境变量始终是字符串”。这总是在代码中处理,例如,process.env 并强制值是整数。显然serverless-step-functions 的维护者还没有这样做。我看到你创建了一个 GitHub 问题来通知他们这个问题,谢谢!

在他们修复它之前,也许您应该考虑使用另一种方法来为每个阶段/环境设置不同的配置数据。这是一个可以为您工作的代码示例。在此处阅读我发现的博客文章的更详细说明: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

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 2021-11-17
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    相关资源
    最近更新 更多