如何从Python访问AWS Lambda环境变量

时间:2016-12-02 17:08:54

标签: python aws-lambda

使用新的environment variable support in AWS Lambda,我已经通过webui为我的功能添加了一个env var。

如何从Python访问它?我试过了:

import os

MY_ENV_VAR = os.environ['MY_ENV_VAR']

但是我的功能停止工作(如果我硬编码MY_ENV_VAR的相关值就可以了。)

3 个答案:

答案 0 :(得分:33)

可以使用AWS控制台,CLI或SDK定义AWS Lambda环境变量。这是您使用AWS CLI定义使用LD_LIBRARY_PATH环境变量的AWS Lambda的方法:

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

创建环境变量后,可以使用您的语言为访问环境提供的支持来读取环境变量,例如:对Node.js使用process.env使用Python时,您需要导入os库,如下例所示:

...
import os
...
print("environment variable: " + os.environ['variable'])

资源链接:

AWS Lambda Now Supports Environment Variables

假设您已在设置模块旁边创建.env文件。

.
├── .env
└── settings.py

将以下代码添加到settings.py

# settings.py
from os.path import join, dirname
from dotenv import load_dotenv

dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)

或者,您可以使用find_dotenv()方法尝试查找.env文件,方法是:(a)猜测从哪里开始使用文件或工作目录 - 允许它在非-file上下文,如IPython notebooks和REPL,然后(b)向上查找目录树,查找指定的文件 - 默认情况下名为.env。

from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())

现在,您可以从系统环境变量访问变量,也可以从.env文件加载。

资源链接:

https://github.com/theskumar/python-dotenv

gepoggio在这篇文章中回答:https://github.com/serverless/serverless/issues/577#issuecomment-192781002

  

解决方法是使用python-dotenv:   https://github.com/theskumar/python-dotenv

import os
import dotenv

dotenv.load_dotenv(os.path.join(here, "../.env"))
dotenv.load_dotenv(os.path.join(here, "../../.env"))
     

它尝试加载它两次,因为当它在本地运行时它就在   project / .env和运行un Lambda时.env位于   项目/组件/ .ENV

答案 1 :(得分:7)

我用过这段代码;它包括两种情况,从处理程序设置变量并从处理程序外部设置它。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Trying new lambda stuff"""
import os
import configparser

class BqEnv(object):
    """Env and self variables settings"""
    def __init__(self, service_account, configfile=None):
        config = self.parseconfig(configfile)
        self.env = config
        self.service_account = service_account

    @staticmethod
    def parseconfig(configfile):
        """Connection and conf parser"""
        config = configparser.ConfigParser()
        config.read(configfile)
        env = config.get('BigQuery', 'env')
        return env

    def variable_tests(self):
        """Trying conf as a lambda variable"""
        my_env_var = os.environ['MY_ENV_VAR']
        print my_env_var
        print self.env
        return True

def lambda_handler(event, context):
    """Trying env variables."""
    print event
    configfile = os.environ['CONFIG_FILE']
    print configfile
    print type(str(configfile))
    bqm = BqEnv('some-json.json', configfile)
    bqm.variable_tests()
    return True

我尝试使用具有以下功能的演示配置文件:

[BigQuery]
env = prod

lambda的设置如下: env variables

希望这可以提供帮助!

答案 2 :(得分:2)

两者

import os
os.getenv('MY_ENV_VAR')

还有

os.environ['MY_ENV_VAR']

是可行的解决方案,只需在lambda GUI中确保ENV变量确实存在。