我正在使用aws-node模板。我想做这样的事情:
sls deploy URL='https://postman-echo.com/post'
URL 是环境变量。我正在尝试将此环境变量传递给我的 serverless.yml
provider:
name: aws
runtime: nodejs8.10
stage: dev
region: us-west-2
environment:
URL: ${env:URL}
然后在我的 handler.js
中访问它const axios = require('axios');
module.exports.hello = async (event, context) => {
console.log("Lambda invoked\n")
await axios.post(
process.env.URL // Accessing the environment variable.
).then(function (response) {
console.log(`Status: ${response.status}`)
})
.catch(function (error) {
console.log(`Error`)
console.error(error);
});
return {
statusCode: 200,
body: JSON.stringify({
message: 'Function executed successfully!',
input: event
}),
};
};
我怀疑问题出在我如何将环境变量传递给程序,但是我的研究一直无济于事。
答案 0 :(得分:1)
不要将变量与deploy命令一起传递。而是先从终端进行设置:
在您的终端中,运行:
URL='https://postman-echo.com/post'
然后运行
sls deploy
或者,您可以使用插件:
对此有一种看法: https://github.com/colynb/serverless-dotenv-plugin
npm i -D serverless-dotenv-plugin
然后将插件添加到您的配置文件中:
service: myService
plugins:
- serverless-dotenv-plugin
...
创建常用的dotenv文件.env
,然后照常访问:
...
provider:
name: aws
runtime: nodejs6.10
stage: ${env:STAGE}
region: ${env:AWS_REGION}
...
如果您确实需要使用不同的urls标志从控制台运行它(尽管我建议仅使用一个不带命令标志的.env文件),请执行以下操作:
将不同的网址放入:
.env.url1
.env.url2
.env.url3
然后:
sls deploy --env url1
答案 1 :(得分:1)
您发布的代码有效。您只需要将URL作为环境变量而不是参数即可传递。
这应该有效(将URL作为环境变量传递):
$ URL='https://postman-echo.com/post' sls deploy
这不起作用(您将URL作为参数传递给sls deploy
):
$ sls deploy URL='https://postman-echo.com/post'