如何使用无服务器框架将环境变量传递给 AWS Lambda 函数?
How to pass an environment variable to an AWS Lambda function using the Serverless framework?
我正在使用 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
}),
};
};
我怀疑问题出在我如何将环境变量传递给程序,但我的研究无济于事。
不要将变量与部署命令一起传递。而是先从终端设置它:
在您的终端中,运行:
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
您发布的代码有效。您只需将 URL 作为环境变量而不是参数传递。
这应该有效(将 URL 作为环境变量传递):
$ URL='https://postman-echo.com/post' sls deploy
这行不通(您将 URL 作为参数传递给 sls deploy
):
$ sls deploy URL='https://postman-echo.com/post'
我正在使用 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
}),
};
};
我怀疑问题出在我如何将环境变量传递给程序,但我的研究无济于事。
不要将变量与部署命令一起传递。而是先从终端设置它:
在您的终端中,运行:
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
您发布的代码有效。您只需将 URL 作为环境变量而不是参数传递。
这应该有效(将 URL 作为环境变量传递):
$ URL='https://postman-echo.com/post' sls deploy
这行不通(您将 URL 作为参数传递给 sls deploy
):
$ sls deploy URL='https://postman-echo.com/post'