首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无服务器框架-文件和手册中的环境变量

无服务器框架-文件和手册中的环境变量
EN

Stack Overflow用户
提问于 2022-07-12 11:56:14
回答 1查看 492关注 0票数 1

我有AWS的无服务器框架函数。我在(SSM)参数存储和本地.yml文件中的其他环境变量中有用于单独部署的秘密(dev、stg、prod)。

如何使用文件和SSM中的环境变量?

只有秘密起作用:

代码语言:javascript
复制
functions:
  kinesisEvents:
    handler: kinesis_events_processing.lambda_handler
    name: kinesis-events-${self:provider.stage}
    package: {}
    maximumRetryAttempts: 2
    events:
      - stream:
          type: kinesis
          ... # omitted a few things
    environment:
      DB_PASSWORD: ${ssm:/${self:provider.stage}/db/db_password}
      API_KEY: ${ssm:/${self:provider.stage}/api/internal_api_key}

而且只有文件也起作用:

代码语言:javascript
复制
functions:
  kinesisEvents:
    ... # as above
    environment:
      ${file(${self:provider.stage}.yml):}

但是,如何组合这些变量,以便在最终部署中将所有这些变量设置为env?我尝试过这样做,但它不起作用,并在部署期间抛出错误:

代码语言:javascript
复制
functions:
  kinesisEvents:
    ... # as above
    environment:
      DB_PASSWORD: ${ssm:/${self:provider.stage}/db/db_password}
      API_KEY: ${ssm:/${self:provider.stage}/api/internal_api_key}
      ${file(${self:provider.stage}.yml):}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-12 12:35:14

我找到了答案这里这里这里。基本上,Serverless Framework对此特性没有特别的支持。但是,它支持扩展的YAML语法,它具有锚点和字典合并功能。

因此,首先我从文件顶部的YAML配置文件中解压env,并使用&env_vars锚定它(类似于引用变量,但在YAML中):

代码语言:javascript
复制
env_vars: &env_vars
  ${file(${self:provider.stage}.yml):}

functions:
  ...

然后我用它,打开这本字典:

代码语言:javascript
复制
    environment:
      <<: *env_vars
      DB_PASSWORD: ${ssm:/${self:provider.stage}/db/db_password}
      API_KEY: ${ssm:/${self:provider.stage}/api/internal_api_key}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72951908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档