我有AWS的无服务器框架函数。我在(SSM)参数存储和本地.yml文件中的其他环境变量中有用于单独部署的秘密(dev、stg、prod)。
如何使用文件和SSM中的环境变量?
只有秘密起作用:
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}而且只有文件也起作用:
functions:
kinesisEvents:
... # as above
environment:
${file(${self:provider.stage}.yml):}但是,如何组合这些变量,以便在最终部署中将所有这些变量设置为env?我尝试过这样做,但它不起作用,并在部署期间抛出错误:
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):}发布于 2022-07-12 12:35:14
我找到了答案这里,这里和这里。基本上,Serverless Framework对此特性没有特别的支持。但是,它支持扩展的YAML语法,它具有锚点和字典合并功能。
因此,首先我从文件顶部的YAML配置文件中解压env,并使用&env_vars锚定它(类似于引用变量,但在YAML中):
env_vars: &env_vars
${file(${self:provider.stage}.yml):}
functions:
...然后我用它,打开这本字典:
environment:
<<: *env_vars
DB_PASSWORD: ${ssm:/${self:provider.stage}/db/db_password}
API_KEY: ${ssm:/${self:provider.stage}/api/internal_api_key}https://stackoverflow.com/questions/72951908
复制相似问题