如何使用无服务器框架将环境变量传递给AWS Lambda函数?

时间:2019-01-25 00:24:03

标签: node.js aws-lambda environment-variables 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
    }),
  };

};

我怀疑问题出在我如何将环境变量传递给程序,但是我的研究一直无济于事。

2 个答案:

答案 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'