【问题标题】:How to pass an environment variable to an AWS Lambda function using the Serverless framework?如何使用无服务器框架将环境变量传递给 AWS Lambda 函数?
【发布时间】:2019-06-18 19:43:05
【问题描述】:

我正在使用 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
    }),
  };

};

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

【问题讨论】:

    标签: node.js aws-lambda environment-variables serverless-framework


    【解决方案1】:

    您发布的代码有效。您只需将 URL 作为环境变量而不是作为参数传递。

    这应该可以工作(将 URL 作为环境变量传递):

    $ URL='https://postman-echo.com/post' sls deploy
    

    这不起作用(您将 URL 作为参数传递给 sls deploy):

    $ sls deploy URL='https://postman-echo.com/post'
    

    【讨论】:

      【解决方案2】:

      不要将变量与部署命令一起传递。而是先从终端设置它:

      在您的终端中,运行:

      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}
      ...
      

      如果您确实需要使用不同的 url 标志从控制台运行它(尽管我建议只使用一个不带命令标志的 .env 文件),请执行以下操作:

      将您不同的网址放入: .env.url1.env.url2.env.url3

      然后:

      sls deploy --env url1

      【讨论】:

      • 如果在没有 url 标志的情况下运行,您还需要执行 sls deploy --env 还是 sls deploy 工作?
      猜你喜欢
      • 2020-02-20
      • 2019-06-19
      • 1970-01-01
      • 2021-07-26
      • 2019-12-26
      • 2020-09-09
      • 2019-07-23
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多