4

我需要从cloudformation创建aws Lambda(python)。 lambda函数已创建,但是当我尝试执行lambda时,我不断收到以下错误。我尝试了很多方法,但我无法完成工作。aws cloudformation lambda python坏的处理程序

{ 
    "errorMessage": "Bad handler 'lambda_handler'" 
} 

这就是我如何从cloudformation创建lambda。

  1. 创建一个简单的python你好程序包含打印语句(尽可能简单)

代码:

def lambda_handler(): 
    print('lambda_handler is called...'); 
    print('Lambda is printing...'); 
  1. 邮编蟒并放置在S3中。 (我试过了文件夹和没有文件夹)

  2. 使用以下资源创建一个cloudformation模板。

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的日志我看到

    错误处理程序 'lambda_handler':需要超过1值解包。

    我没有传递参数。这是Python中的“Hello World”lambda函数。如果我在Lambda服务中手动创建了这个lambda函数,那么我可以在没有任何错误的情况下执行它。当我使用Cloudformation创建lambda时,我只会遇到这个错误。

    请指点我正确的方向。提前致谢。

    回答

    3

    我认为问题出在您的“Handler”声明上。

    它应该包含模块名称以及函数名称,即它应该是module_name.lambda_handler,其中module_name是包含处理函数的文件的名称。

    我使用boto3为python创建lambda函数时发生了同样的错误 - 这解决了我的问题。

    6

    是的,谢谢你的帮助。这解决了它。我认为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

    Image of AWS Lambda lambda_handler error screen

    如果你是因为你看到我已经张贴在图像中的错误来这里,修复是冠以lambda_function在AWS LAMBDA代码屏幕处理器领域的处理器的名字。

    例如,如果您的代码中的处理程序名称为lambda_handler,则必须在代码屏幕上的处理程序字段中使用lambda_function.lambda_handler

    这只是意味着分配给您的Python lambda函数的默认模块名称是你猜的lambda_function

    Image of the fix for the error above

    相关问题