首页 文章

aws cloudformation lambda python坏处理程序

提问于
浏览
6

我需要从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 回答

  • 4

    是的,谢谢你的帮助 . 修好了 . 我认为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文件的根目录中 .

  • 2

    我认为问题在于您对“Handler”的声明 .

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

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

  • 6

    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

相关问题