web-dev-qa-db-ja.com

aws cloudformation lambda python不正なハンドラー

CloudformationからawsLambda(python)を作成する必要があります。ラムダ関数が作成されましたが、ラムダを実行しようとすると、次のエラーが発生し続けます。私は多くの方法を試しましたが、うまくいきませんでした。

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

これが、cloudformationからラムダを作成した方法です。

  1. Printステートメントを含む単純なpython helloプログラムを作成します(可能な限り単純))

コード:

def lambda_handler():
    print('lambda_handler is called...');
    print('Lambda is printing...');
  1. pythonを圧縮し、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"
      }
    }
  }
}
  1. Cloudformationに移動し、テンプレートを使用してスタックを作成します。スタックが正常に作成されました。

  2. 「HelloWorld」イベントテンプレートを使用してラムダをテストすると。エラーが発生します。

"errorMessage": "不正なハンドラー 'lambda_handler'"

CloudWatch Logを見ると、

不正なハンドラー 'lambda_handler':解凍するには複数の値が必要です。

私は引数を渡していません。これは、Pythonの「HelloWorld」ラムダ関数です。このラムダ関数をLambdaサービスで手動で作成すると、エラーなしで実行できます。 Cloudformationを使用してラムダを作成した場合にのみ、このエラーが発生します。

私を正しい方向に向けてください。前もって感謝します。

11
YLam

はい、あなたの助けに感謝します。それはそれを修正しました。 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ファイルのルートに配置してください。

15
YLam

問題は「ハンドラー」の宣言にあると思います。

モジュール名と関数名が含まれている必要があります。つまり、module_name.lambda_handlerである必要があります。ここで、module_nameは、ハンドラー関数を含むファイルの名前です。

Boto3 for pythonを使用してラムダ関数を作成するときに同じエラーが発生しました-これで問題が解決しました。

7
Geoff

Image of AWS Lambda lambda_handler error screen

私が投稿した画像にエラーが表示されたためにここに来る場合は、AWSLambdaコード画面の[ハンドラー]フィールドでハンドラーの名前の前にlambda_functionを追加するのが修正です。

たとえば、コード内のハンドラー名がlambda_handlerの場合、コード画面の[ハンドラー]フィールドでlambda_function.lambda_handlerを使用する必要があります。

これは、pythonラムダ関数に割り当てられたデフォルトのモジュール名がlambda_functionであると推測したとおりであることを意味します。

Image of the fix for the error above

4
draysams