我需要从cloudformation创建aws Lambda(python) . lambda函数已创建,但当我尝试执行lambda时,我不断收到以下错误 . 我尝试了很多方法,但我无法让它发挥作用 .
{
"errorMessage": "Bad handler 'lambda_handler'"
}
这就是我如何从cloudformation创建lambda .
- 创建一个包含print语句的简单python hello程序(尽可能简单)
码:
def lambda_handler():
print('lambda_handler is called...');
print('Lambda is printing...');
-
压缩python并将其放在S3中 . (我试过了文件夹和没有文件夹)
-
使用以下资源创建 Cloud 信息模板 .
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并使用模板创建堆栈 . 堆栈已成功创建 .
-
当我使用“Hello World”事件模板测试lambda时 . 我收到了错误 .
“errorMessage”:“糟糕的处理程序'lambda_handler'”
如果我查看CloudWatch Log,我会看到
坏处理程序'lambda_handler':需要多于1个值来解压缩 .
我不是在传递论据 . 这是Python中的“Hello World”lambda函数 . 如果我在Lambda服务中手动创建这个lambda函数,我可以执行它而没有任何错误 . 我使用Cloudformation创建lambda时只会出现此错误 .
请指出正确的方向 . 提前致谢 .
3 回答
是的,谢谢你的帮助 . 修好了 . 我认为AWS应该在他们的文档中有这个,所以其他人可以清楚地看到它 . 这就是我做的 .
我的zip文件是“simple_python.zip” . 我在zip文件中的文件名是“simple_python_filename.py” . 我在py文件中的函数是“lambda_hander” . 另外,请确保将.py文件放在zip文件的根目录中 .
我认为问题在于您对“Handler”的声明 .
它应该包含模块名称和函数名称,即它应该是module_name.lambda_handler,其中module_name是包含处理函数的文件的名称 .
使用boto3为python创建lambda函数时遇到了同样的错误 - 这解决了我的问题 .
如果您因为在我发布的图像中看到错误而来到这里,则修复是在AWS Lambda代码屏幕的Handler字段中将
lambda_function
添加到处理程序的名称 .例如,如果代码中的处理程序名称为
lambda_handler
,则必须在代码屏幕的“处理程序”字段中使用lambda_function.lambda_handler
.这只是意味着分配给python lambda函数的默认模块名称就像你猜到的那样
lambda_function
.