aws cloudformation lambda python bad handler

时间:2016-03-02 15:37:28

标签: python-2.7 amazon-web-services aws-lambda amazon-cloudformation

我需要从cloudformation创建aws Lambda(python)。 lambda函数已创建,但当我尝试执行lambda时,我不断收到以下错误。我尝试了很多方法,但我无法让它发挥作用。

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

这是我从cloudformation创建lambda的方法。

  1. 创建一个包含print语句(尽可能简单)的简单python hello程序
  2. 代码:

    def lambda_handler():
        print('lambda_handler is called...');
        print('Lambda is printing...');
    
    1. 压缩python并将其放在S3中。 (我已尝试过文件夹和没有文件夹)

    2. 使用以下资源创建云形态模板。

    3. 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"
            }
          }
        }
      }
      
      1. 转到Cloudformation并使用模板创建堆栈。 Stack已成功创建。

      2. 当我使用“Hello World”事件模板测试lambda时。我收到了错误。

      3.   

        “errorMessage”:“错误处理程序'lambda_handler'”

        如果我查看CloudWatch Log,我会看到

          

        错误处理程序'lambda_handler':需要多于1个值来解包。

        我没有传递论据。这是Python中的“Hello World”lambda函数。如果我在Lambda服务中手动创建这个lambda函数,我可以执行它而没有任何错误。我使用Cloudformation创建lambda时只会出现此错误。

        请指出正确的方向。提前谢谢。

3 个答案:

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

Image of AWS Lambda lambda_handler error screen

如果你因为看到我发布的图片中的错误而来到这里,则修复是在AWS Lambda代码屏幕的Handler字段中将lambda_function添加到处理程序的名称。

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

这只是意味着分配给你的python lambda函数的默认模块名称就像你猜到的那样lambda_function

Image of the fix for the error above