我正在使用无服务器框架来部署一些RESTAPI。早些时候我使用serverless.yml,现在迁移到typescript版本。我有一些AWS密钥,我想把它们保存在env文件中,而不是直接添加。早些时候我直接添加了它们。
我正在尝试做如下的事情:
export const serverless = {
frameworkVersion: '3',
useDotenv : true,
plugins: ['serverless-webpack', 'serverless-offline'],
provider: {
name: 'aws',
runtime: 'nodejs14.x',
stage: process.env.stage, // check this
profile: process.env.stage === 'dev ? 'dev' : 'prod', // check this
region: process.env.region,
},
};
这不起作用。我试着记录env变量和上面的对象,但它是空的。我已经尝试过使用这个插件-https://github.com/neverendingqs/serverless-dotenv-plugin
看起来,env变量是在serverless.ts文件之后加载的。
我应该坚持使用-${self:custom.stage}
语法吗。我试图避免这种情况。或者可以使用process.env吗?
编辑:
尝试使用语法时-${env:profile}
Cannot resolve variable at "provider.profile": Value not found at "env" source
要访问无服务器配置中的env变量,请使用${env:VARIABLE_NAME}。对于stage:对于我来说${opt:sstage}在运行sls --stage STAGE_NAME
时有效。
在您的情况下:
export const serverless = {
frameworkVersion: '3',
useDotenv : true,
plugins: ['serverless-webpack', 'serverless-offline'],
provider: {
name: 'aws',
runtime: 'nodejs14.x',
stage: '${opt:stage}',
profile: ${opt:stage, 'prod'}, // if no --stage default to 'prod'
region: '${env:region}',
},
};