如何在Serverless Framework中同时使用SSM与本地文件的环境变量?
解决Serverless Framework同时配置SSM参数与本地环境变量的问题
你遇到的报错是因为YAML语法不允许在同一个environment映射下,同时混用显式键值对和文件展开语法。以下是两种可行的解决方案:
方案1:使用变量合并语法直接合并
利用Serverless的merge变量操作符,将本地文件的环境变量和SSM参数合并为一个对象:
functions: kinesisEvents: handler: kinesis_events_processing.lambda_handler name: kinesis-events-${self:provider.stage} package: {} maximumRetryAttempts: 2 events: - stream: type: kinesis ... # 省略其他配置 environment: ${merge(${file(${self:provider.stage}.yml)}, { DB_PASSWORD: ${ssm:/${self:provider.stage}/db/db_password}, API_KEY: ${ssm:/${self:provider.stage}/api/internal_api_key} })}
方案2:将SSM参数引用移至本地环境文件
把机密参数的SSM引用直接写在对应环境的.yml文件中,这样environment只需引用该文件即可自动解析所有变量:
比如dev.yml内容:
DB_PASSWORD: ${ssm:/dev/db/db_password} API_KEY: ${ssm:/dev/api/internal_api_key} APP_ENV: dev LOG_LEVEL: info
然后serverless.yml配置:
functions: kinesisEvents: ... # 其他配置 environment: ${file(${self:provider.stage}.yml):}
两种方案都能实现将本地环境变量和SSM机密参数同时注入Lambda函数,根据你的配置习惯选择即可。
内容的提问来源于stack exchange,提问作者qalis
相关产品推荐
相关产品推荐

