key*_*its 46 python aws-lambda
使用AWS Lambda中的新环境变量支持,我通过webui为我的函数添加了一个env var.
我如何从Python访问它?我试过了:
import os
MY_ENV_VAR = os.environ['MY_ENV_VAR']
Run Code Online (Sandbox Code Playgroud)
但我的功能停止工作(如果我硬编码相关的值,MY_ENV_VAR它工作正常).
Sky*_*ker 51
可以使用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
Run Code Online (Sandbox Code Playgroud)
创建后,可以使用您的语言为访问环境提供的支持来读取环境变量,例如使用node.jv作为Node.js. 使用Python时,您需要导入os库,如下例所示:
...
import os
...
print("environment variable: " + os.environ['variable'])
Run Code Online (Sandbox Code Playgroud)
假设您已在设置模块旁边创建.env文件.
.
??? .env
??? settings.py
Run Code Online (Sandbox Code Playgroud)
将以下代码添加到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)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用find_dotenv()方法尝试查找.env文件,方法是:(a)猜测从何处开始使用文件或工作目录 - 允许它在非文件上下文中工作,例如IPython笔记本和REPL ,然后(b)在目录树中向上查找指定的文件 - 默认情况下称为.env.
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv())
Run Code Online (Sandbox Code Playgroud)
现在,您可以从系统环境变量访问变量,也可以从.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
Run Code Online (Sandbox Code Playgroud)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位于project/component/.env中
Nic*_*ini 13
两个都
import os
os.getenv('MY_ENV_VAR')
Run Code Online (Sandbox Code Playgroud)
和
os.environ['MY_ENV_VAR']
Run Code Online (Sandbox Code Playgroud)
是可行的解决方案,只需确保在 lambda GUI 中 ENV 变量实际上存在。
小智 9
我用过这段代码; 它包括两种情况,从处理程序设置变量并从处理程序外部设置它.
#!/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
Run Code Online (Sandbox Code Playgroud)
我用一个演示配置文件尝试了这个:
[BigQuery]
env = prod
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
51600 次 |
| 最近记录: |