我有一个连接到数据库的Python应用程序,我希望db凭据在本地环境(用于测试)或lambda函数(用于生产)中运行时会有所不同。
有没有办法从Python应用程序中检测到它是在lambda函数内运行的?
答案 0 :(得分:7)
这对我有用
os.environ.get("AWS_EXECUTION_ENV") is not None
编辑:我发现context
对象的存在不足以进行此类检查,因为您可能在未在AWS lambda函数中运行时嘲笑它。然后,您可能也在嘲笑AWS_EXECUTION_ENV ......
答案 1 :(得分:2)
如何检查处理函数中是否存在context
对象? http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html
答案 2 :(得分:1)
对于单元测试,我使用结构:
+ my_function/
+- __init__.py - empty files
+- code/
+- __init__.py
+- lambda_function.py
+- unittest/
+- __init__.py
+- tests.py - from ..code.lambda_function import *
使用python -m my_function.unittest.tests
运行单元测试时,在lambda_function.py中__name__ =='my_function.code.lambda_function'。
在Lambda运行中运行时,__name__ =='lambda_function'。请注意,如果您使用python -m my_function.code.lambda_function
运行,则会获得相同的值,因此您始终需要一个包装器。
答案 3 :(得分:1)
这就是我使用的
import os
try:
region = os.environ['AWS_REGION']
except:
# Not in Lambda environment
region = "us-east-1"
答案 4 :(得分:-1)
由于this bug,可以判断您是否在AWS Lambda函数内运行。
import multiprocessing
def on_lambda():
try:
multiprocessing.Pool()
on_lambda = False
except:
on_lambda = True
return on_lambda
我用它来成功实现上下文敏感度量报告。 让我们希望他们不会马上解决这个问题!