【问题标题】:In what order is the serverless file evaluated?无服务器文件的评估顺序是什么?
【发布时间】:2021-10-06 23:15:11
【问题描述】:

我试图找出无服务器文件语句的评估顺序(也许更常见的说法是“变量已解析”)。

我无法找到任何有关这方面的信息,并且在某种程度上它让使用无服务器对我来说就像是一场猜谜游戏。

举个例子,我最近得到的惊喜是当我尝试跑步时:

$ sls deploy
serverless.yaml

useDotenv: true

provider:
  stage: ${env:stage}
  region: ${env:region}
.env

region=us-west-1
stage=dev

我收到一条错误消息,指出在解决阶段时 env 不可用。这让我感到惊讶,因为我已经能够使用 env 来解析提供程序部分中的其他变量,并且语法中没有任何内容表明该阶段已更早解决。

无服务器文件的评估顺序是什么?

【问题讨论】:

    标签: serverless-framework


    【解决方案1】:

    实际上你已经创建了一个循环依赖。 Stage 是特殊的,因为它需要识别要加载的 .env 文件。 ${env:stage} 正在从 ${stage}.env 解析,但无服务器需要知道 ${stage} 是什么才能找到 ${stage}.env 等。

    这就是它首先被评估的原因。

    Stage(实际上是区域)都是可选的 CLI 参数。在您的 serverless.yml 文件中,您设置的是默认值,CLI 参数会在不同的地方覆盖它。

    例子:

    provider:
      stage: staging
      region: ca-central-1
    

    运行serverless deploy --stage prod --region us-west-2 将导致produs-west-2 分别用于该部署的阶段和区域。

    我建议删除 stage 的所有变量插值,而是设置默认值,并在需要时通过 CLI 覆盖。

    然后dotenv 将知道要使用哪个环境文件,并完成模板的其余部分。

    【讨论】:

    • 感谢您的回答!这很有帮助。现在我更好地理解了我提到的例子。对于更一般的问题“无服务器文件的评估顺序是什么?”有什么简单的答案吗?
    • 它没有被评估,它不是一个程序——它是一个配置文件。无服务器框架将 serverless.yml 文件转换为 cloudformation,然后(在 aws 内部)cloudformation 创建一个有向无环图并按顺序提供基础设施。
    猜你喜欢
    • 2015-11-02
    • 2010-09-18
    • 2023-04-09
    • 2023-03-03
    • 1970-01-01
    • 2021-09-09
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多