如何检查Python应用程序是否在AWS lambda函数中运行?

时间:2016-03-29 14:34:01

标签: python amazon-web-services environment aws-lambda

我有一个连接到数据库的Python应用程序,我希望db凭据在本地环境(用于测试)或lambda函数(用于生产)中运行时会有所不同。

有没有办法从Python应用程序中检测到它是在lambda函数内运行的?

5 个答案:

答案 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

我用它来成功实现上下文敏感度量报告。 让我们希望他们不会马上解决这个问题!