Подтвердить что ты не робот

Как я могу использовать переменные среды на AWS Lambda?

Я пишу приложение, которое я хочу запустить как функцию AWS Lambda, но также придерживаюсь инструкций для приложений Twelve-Factor. В частности, Часть III. Config, который требует использования переменных окружения для конфигурации.

Однако, я не могу найти способ установить переменные окружения для экземпляров AWS Lambda. Может кто-то указать мне верное направление?

Если невозможно использовать переменные среды, вы можете рекомендовать способ использования переменных окружения для локальной разработки и преобразовать их в действительную систему конфигурации, к которой можно получить доступ, используя код приложения в AWS.

Спасибо.

4b9b3361

Ответ 1

По состоянию на 18 ноября 2016 года AWS Lambda поддерживает переменные среды.

Переменные окружения могут быть указаны как с помощью консоли AWS, так и с AWS CLI. Вот как вы бы создали Лямбду с переменной среды LD_LIBRARY_PATH с помощью AWS CLI:

aws lambda create-function \
  --region us-east-1
  --function-name myTestFunction
  --zip-file fileb://path/package.zip
  --role role-arn
  --environment Variables={LD_LIBRARY_PATH=/usr/bin/test/lib64}
  --handler index.handler
  --runtime nodejs4.3
  --profile default

Ответ 2

Возможно, функция "пользовательских переменных окружения" node -lambda будет решать ваши проблемы:

https://www.npmjs.com/package/node-lambda
https://github.com/motdotla/node-lambda

"AWS Lambda не позволяет вам устанавливать переменные среды для вашей функции, но во многих случаях вам нужно настроить свою функцию с помощью безопасных значений, которые вы не хотите проверять в управлении версиями, например, строку подключения к DB или ключ шифрования. Используйте образец файла deploy.env в сочетании с флагом -configFile, чтобы установить значения, которые будут добавлены к вашей скомпилированной функции Lambda в качестве переменных среды process.env, прежде чем они будут загружены на S3."

Ответ 3

Невозможно настроить переменные env для выполнения лямбда, так как каждый вызов не пересекается и информация о состоянии не сохраняется. Однако есть способы добиться того, чего вы хотите.

AWS credentials - вы можете избежать сохранения этого в переменных env. Вместо этого предоставите привилегии вашей роли LambdaExec. Фактически AWS рекомендует использовать роли вместо учетных данных AWS.

Database details: Одно предложение - сохранить его в хорошо известном файле в приватном ведре. Lambda может загрузить этот файл при его вызове, прочитать содержимое, которое может содержать сведения о базе данных и другую информацию. Поскольку ведро является закрытым, другие не могут получить доступ к файлу. Роль LambdaExec требует привилегий IAM для доступа к частному ведру.

Ответ 4

У нас также было это требование для нашей лямбда-функции, и мы "решили" это, создав файл env на нашей платформе CI (в нашем случае это CircleCI). Этот файл входит в архив, который развертывается в Lambda. Теперь в вашем коде вы можете включить этот файл и использовать переменные.

script, который я использую для создания JSON файла из переменных окружения CircleCI:

cat >dist/env.json <<EOL
{
"CLIENT_ID": "$CLIENT_ID",
"CLIENT_SECRET": "$CLIENT_SECRET",
"SLACK_VERIFICATION_TOKEN": "$SLACK_VERIFICATION_TOKEN",
"BRANCH": "$CIRCLE_BRANCH"
}
EOL

Мне нравится этот подход, потому что таким образом вам не нужно включать переменные среды в ваш репозиторий.

Ответ 5

AWS просто добавила поддержку настройки функций Lambda через параметры среды. Посмотрите здесь