2024-06-07 18:42:11 发布
网友
使用新的environment variable support in AWS Lambda,我通过webui为我的函数添加了一个env变量。
如何从Python访问它?我试过:
import os MY_ENV_VAR = os.environ['MY_ENV_VAR']
但是我的函数停止工作(如果我硬编码MY_ENV_VAR的相关值,它就可以正常工作)。
MY_ENV_VAR
我使用了这段代码;它包括两种情况,分别从处理程序设置变量和从处理程序外部设置变量。
#!/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的设置如下:
希望这能有帮助!
可以使用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()方法,该方法将尝试通过(a)猜测从何处开始使用文件或工作目录来查找.env文件,从而允许在非文件上下文(如IPython笔记本和REPL)中工作,然后(b)在目录树中查找指定的文件——默认情况下称为.env。
from dotenv import load_dotenv, find_dotenv load_dotenv(find_dotenv())
现在,您可以从系统环境变量或从.env文件加载访问变量。
https://github.com/theskumar/python-dotenv
格波乔在这篇文章中回答:https://github.com/serverless/serverless/issues/577#issuecomment-192781002
A workaround is to use python-dotenv: https://github.com/theskumar/python-dotenvimport os import dotenv dotenv.load_dotenv(os.path.join(here, "../.env")) dotenv.load_dotenv(os.path.join(here, "../../.env")) It tries to load it twice because when ran locally it's in project/.env and when running un Lambda the .env is located in project/component/.env
A workaround is to use 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"))
It tries to load it twice because when ran locally it's in project/.env and when running un Lambda the .env is located in project/component/.env
两者
import os os.getenv('MY_ENV_VAR')
以及
os.environ['MY_ENV_VAR']
是可行的解决方案,只要确保在lambda GUI中ENV变量确实存在。
我使用了这段代码;它包括两种情况,分别从处理程序设置变量和从处理程序外部设置变量。
我在一个演示配置文件中尝试过,该文件包含:
对lambda的设置如下:
希望这能有帮助!
可以使用AWS控制台、CLI或sdk定义AWS Lambda环境变量。以下是使用AWS CLI定义使用LD_LIBRARY_PATH环境变量的AWS Lambda的方法:
一旦创建,就可以使用您的语言提供的访问环境的支持来读取环境变量,例如,对Node.js使用process.env。使用Python时,需要导入os库,如下例所示:
资源链接:
AWS Lambda Now Supports Environment Variables
假设您已经在设置模块旁边创建了.env文件。
将以下代码添加到settings.py
或者,您可以使用find_dotenv()方法,该方法将尝试通过(a)猜测从何处开始使用文件或工作目录来查找.env文件,从而允许在非文件上下文(如IPython笔记本和REPL)中工作,然后(b)在目录树中查找指定的文件——默认情况下称为.env。
现在,您可以从系统环境变量或从.env文件加载访问变量。
资源链接:
https://github.com/theskumar/python-dotenv
格波乔在这篇文章中回答:https://github.com/serverless/serverless/issues/577#issuecomment-192781002
两者
以及
是可行的解决方案,只要确保在lambda GUI中ENV变量确实存在。
相关问题 更多 >
编程相关推荐