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

新手上路,请多包涵

使用 AWS Lambda 中的新环境变量支持,我通过 webui 为我的函数添加了一个环境变量。

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

 import os

MY_ENV_VAR = os.environ['MY_ENV_VAR']

但是我的函数停止工作(如果我硬编码 MY_ENV_VAR 它工作正常)。

原文由 keybits 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 499
1 个回答

可以使用 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

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

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

资源链接:

AWS Lambda 现在支持环境变量



假设您已经在设置模块旁边创建了 .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



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 位于 project/component/.env 中

原文由 SkyWalker 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题