我需要从cloudformation创建aws Lambda(python)。 lambda函数已创建,但当我尝试执行lambda时,我不断收到以下错误。我尝试了很多方法,但我无法让它发挥作用。
{
"errorMessage": "Bad handler 'lambda_handler'"
}
这是我从cloudformation创建lambda的方法。
代码:
def lambda_handler():
print('lambda_handler is called...');
print('Lambda is printing...');
压缩python并将其放在S3中。 (我已尝试过文件夹和没有文件夹)
使用以下资源创建云形态模板。
JSON:
"Resources": {
"LF1ZOLJ": {
"Type": "AWS::Lambda::Function",
"Properties": {
"Handler": "lambda_handler",
"Code": {
"S3Bucket": "mybuckname",
"S3Key": "simplepython.zip"
},
"Description": "cfn-create-lambda",
"Role": "arn:aws:iam::305760000000:role/lambda_basic_execution",
"Runtime": "python2.7",
"Timeout": 60
},
"Metadata": {
"AWS::CloudFormation::Designer": {
"id": "xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}
转到Cloudformation并使用模板创建堆栈。 Stack已成功创建。
当我使用“Hello World”事件模板测试lambda时。我收到了错误。
“errorMessage”:“错误处理程序'lambda_handler'”
如果我查看CloudWatch Log,我会看到
错误处理程序'lambda_handler':需要多于1个值来解包。
我没有传递论据。这是Python中的“Hello World”lambda函数。如果我在Lambda服务中手动创建这个lambda函数,我可以执行它而没有任何错误。我使用Cloudformation创建lambda时只会出现此错误。
请指出正确的方向。提前谢谢。
答案 0 :(得分:10)
是的,谢谢你的帮助。修好了。我认为AWS应该在他们的文档中有这个,所以其他人可以清楚地看到它。这就是我所做的。
"Handler": "simple_python_filename.lambda_handler",
"Code": {
"S3Bucket": "mybuckname",
"S3Key": "simple_python.zip"
我的zip文件是“simple_python.zip”。我在zip文件中的文件名是“simple_python_filename.py”。我在py文件中的函数是“lambda_hander”。另外,请确保将.py文件放在zip文件的根目录中。
答案 1 :(得分:4)
我认为问题在于您对“处理程序”的声明。
它应该包含模块名称和函数名称,即它应该是module_name.lambda_handler,其中module_name是包含处理函数的文件的名称。
使用boto3为python创建lambda函数时遇到了同样的错误 - 这解决了我的问题。
答案 2 :(得分:2)
如果你因为看到我发布的图片中的错误而来到这里,则修复是在AWS Lambda代码屏幕的Handler字段中将lambda_function
添加到处理程序的名称。
例如,如果代码中的处理程序名称为lambda_handler
,则必须在代码屏幕的“处理程序”字段中使用lambda_function.lambda_handler
。
这只是意味着分配给你的python lambda函数的默认模块名称就像你猜到的那样lambda_function
。