【问题标题】:Serverless framework is ignoring CLI options无服务器框架忽略 CLI 选项
【发布时间】:2022-01-18 10:30:02
【问题描述】:

我正在尝试在使用无服务器部署我的函数时动态传递选项以解决问题,但它们始终为空或回退。

custom:
  send_grid_api: ${opt:sendgridapi, 'missing'}
  SubscribedUsersTable:
    name: !Ref UsersSubscriptionTable
    arn: !GetAtt UsersSubscriptionTable.Arn
  bundle:
    linting: false

provider:
  name: aws
  lambdaHashingVersion: 20201221
  runtime: nodejs12.x
  memorySize: 256
  stage: ${opt:stage, 'dev'}
  region: us-west-2
  environment:
    STAGE: ${self:provider.stage}
    SEND_GRID_API_KEY: ${self:custom.send_grid_api}

我也试过了:

  environment:
    STAGE: ${self:provider.stage}
    SEND_GRID_API_KEY: ${opt:sendgridapi, 'missing'}

两者都产生“缺失”,但为什么?

sls deploy --stage=prod --sendgridapi=xxx

如果我尝试使用空格而不是 = 也会失败。

编辑:工作解决方案

在我的 github 操作模板中,我定义了以下内容:

      - name: create env file
        run: |
          touch .env
          echo SEND_GRID_API_KEY=${{ secrets.SEND_GRID_KEY }} >> .env
          ls -la
          pwd

另外,我明确设置了这个阶段的工作目录,如下所示:

working-directory: /home/runner/work/myDir/myDir/

在我的serverless.yml 中,我添加了以下内容:

  environment:
    SEND_GRID_API_KEY: ${env:SEND_GRID_API_KEY}

sls 将从文件中读取内容并正确加载它们

【问题讨论】:

  • 您遗漏了相关细节 - 在问题内回答会忽略问答格式。
  • 在不回答您自己的问题的情况下逐步发布潜在的可行解决方案以向未来读者提供背景信息的情况并不少见。您对格式的迂腐正是 SO 发布此内容的原因:stackoverflow.blog/2018/04/26/…

标签: amazon-web-services aws-lambda serverless serverless-framework


【解决方案1】:

opt 用于无服务器的 CLI 选项。这些是serverless 的一部分,而不是您自己的代码。

您可以改为使用...

provider:
  ...
  environment:
    ... 
    SEND_GRID_API_KEY: ${env:SEND_GRID_API_KEY}

并在部署步骤中将该值作为环境变量传递。

- name: Deploy
  run: sls deploy --stage=prod
  env:
    SEND_GRID_API_KEY: "insert api key here"

【讨论】:

  • 谢谢诺埃尔。环境和环境之间有区别吗?我尝试 env 无济于事,也没有在他们的文档中看到这种格式的环境。这个解决方案没有为我插值。
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2020-02-02
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2023-01-10
  • 2014-05-03
相关资源
最近更新 更多