如何在 AWS lambda 函数中检查 Python 应用程序是否为 运行?
How to check if Python app is running within AWS lambda function?
我有一个连接到数据库的 Python 应用程序,我希望数据库凭据在本地环境(用于测试)或 lambda 函数中 运行 时有所不同(用于生产)。
有什么方法可以从 Python 应用程序中检测到它 运行 在 lambda 函数中?
编辑 2:随着 Lambda 函数自定义运行时的引入,检查 AWS_LAMBDA_FUNCTION_NAME
环境变量可能会更好,如下所示:
os.environ.get("AWS_LAMBDA_FUNCTION_NAME") is not None
编辑:参见其他答案,这是一个更好的解决方案:
os.environ.get("AWS_EXECUTION_ENV") is not None
原回答:
如何在处理函数中检查 context
对象是否存在? http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html
对于单元测试,我使用结构:
+ 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 运行ning 中 运行ning 时,__name__ == 'lambda_function'。请注意,如果 运行 和 python -m my_function.code.lambda_function
会得到相同的值,因此您将始终需要一个包装器。
由于 this bug 可以判断您是否 运行 在 AWS Lambda 函数中。
import multiprocessing
def on_lambda():
try:
multiprocessing.Pool()
on_lambda = False
except:
on_lambda = True
return on_lambda
我用它成功地实现了上下文敏感的指标报告。
希望他们不要很快修复错误!
这对我有用
os.environ.get("AWS_EXECUTION_ENV") is not None
编辑:我发现 context
对象的存在不足以进行此类检查,因为当 AWS lambda 函数中没有 运行 时,您可能会嘲笑它。再一次,你可能也在嘲笑 AWS_EXECUTION_ENV ...
这是我用的
import os
try:
region = os.environ['AWS_REGION']
except:
# Not in Lambda environment
region = "us-east-1"
我有一个连接到数据库的 Python 应用程序,我希望数据库凭据在本地环境(用于测试)或 lambda 函数中 运行 时有所不同(用于生产)。
有什么方法可以从 Python 应用程序中检测到它 运行 在 lambda 函数中?
编辑 2:随着 Lambda 函数自定义运行时的引入,检查 AWS_LAMBDA_FUNCTION_NAME
环境变量可能会更好,如下所示:
os.environ.get("AWS_LAMBDA_FUNCTION_NAME") is not None
编辑:参见其他答案,这是一个更好的解决方案:
os.environ.get("AWS_EXECUTION_ENV") is not None
原回答:
如何在处理函数中检查 context
对象是否存在? http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html
对于单元测试,我使用结构:
+ 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 运行ning 中 运行ning 时,__name__ == 'lambda_function'。请注意,如果 运行 和 python -m my_function.code.lambda_function
会得到相同的值,因此您将始终需要一个包装器。
由于 this bug 可以判断您是否 运行 在 AWS Lambda 函数中。
import multiprocessing
def on_lambda():
try:
multiprocessing.Pool()
on_lambda = False
except:
on_lambda = True
return on_lambda
我用它成功地实现了上下文敏感的指标报告。 希望他们不要很快修复错误!
这对我有用
os.environ.get("AWS_EXECUTION_ENV") is not None
编辑:我发现 context
对象的存在不足以进行此类检查,因为当 AWS lambda 函数中没有 运行 时,您可能会嘲笑它。再一次,你可能也在嘲笑 AWS_EXECUTION_ENV ...
这是我用的
import os
try:
region = os.environ['AWS_REGION']
except:
# Not in Lambda environment
region = "us-east-1"