Как передать переменную среды в лямбда-функцию AWS с помощью инфраструктуры без сервера? - PullRequest
0 голосов
/ 25 января 2019

Я использую шаблон узла aws. Я хочу сделать что-то вроде этого:

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

Где URL - переменная среды. Я пытаюсь передать эту переменную env моему 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 голосов
/ 25 января 2019

Код, который вы разместили, работает.Вам просто нужно передать URL в качестве переменной среды, а НЕ в качестве аргумента.

Это должно работать (передача URL в качестве переменной среды):

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

Это не будет работать (выпередаете URL в качестве аргумента sls deploy):

$ sls deploy URL='https://postman-echo.com/post'
0 голосов
/ 25 января 2019

Не передавайте переменную вместе с командой 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}
...

И если вам действительно нужно запустить его из консоли с разными флагами URL-адресов (хотя я бы рекомендовал использовать только один файл .env без флагов команд), сделайте следующее:

Поместите ваши разные URL в: .env.url1 .env.url2 .env.url3

и затем:

sls deploy --env url1

...