【发布时间】:2020-04-11 09:54:19
【问题描述】:
我正在尝试使用 Boto3 从 Django Python 应用程序异步启动 AWS Lambda。以下代码在我的本地开发系统上运行良好:
import boto3
from concurrent.futures import ThreadPoolExecutor
[.....]
endpoint_scoring_arn = "arn:aws:lambda:us-east-1:xxx:function:my-lambda-function"
data = {
'my_data_param': 'my_data',
}
# https://stackoverflow.com/a/39457165/364966
# https://stackoverflow.com/questions/40377662/boto3-client-noregionerror-you-must-specify-a-region-error-only-sometimes
boto3_client = boto3.client('lambda', region_name='us-east-1')
with ThreadPoolExecutor(max_workers=1) as executor:
future_execution = [executor.submit(boto3_client.invoke,
FunctionName=endpoint_scoring_arn,
InvocationType="Event",
Payload=json.dumps(data)
)]
try:
print("boto3 exception:")
print(future_execution[0]._exception.kwargs['report'])
except Exception as e0:
print("No boto3 exception found")
...但是当我在 EC2 上的生产环境中运行它时,Lambda 函数永远不会运行。我的 Django debug.log 或 syslog 中没有错误消息,上面的代码打印出 "No boto3 exception found"。
这可能是什么原因?
【问题讨论】:
-
我不熟悉 concurrent.futures 库。这是处理潜在异常的典型方法吗?看起来很奇怪。我从您下面的回答中假设您实际上是从 boto3 触发 AccessDenied 异常。您没有在输出中清楚地看到这一点,因此发现问题难以调试,这似乎表明您没有以最佳方式处理异常。
-
感谢您提供此信息。我根据发布的代码示例中提到的 SO 帖子使用了 concurrent.futures。我也觉得奇怪的是我没有看到 AccessDenied 异常。如果方便,请发布您喜欢的示例代码以供将来参考。
标签: amazon-web-services amazon-ec2 aws-lambda boto3