CloudformationからawsLambda(python)を作成する必要があります。ラムダ関数が作成されましたが、ラムダを実行しようとすると、次のエラーが発生し続けます。私は多くの方法を試しましたが、うまくいきませんでした。
{
"errorMessage": "Bad handler 'lambda_handler'"
}
これが、cloudformationからラムダを作成した方法です。
コード:
def lambda_handler():
print('lambda_handler is called...');
print('Lambda is printing...');
pythonを圧縮し、S3に配置します。(フォルダーとフォルダーなしの両方を試しました)
次のリソースを使用して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に移動し、テンプレートを使用してスタックを作成します。スタックが正常に作成されました。
「HelloWorld」イベントテンプレートを使用してラムダをテストすると。エラーが発生します。
"errorMessage": "不正なハンドラー 'lambda_handler'"
CloudWatch Logを見ると、
不正なハンドラー 'lambda_handler':解凍するには複数の値が必要です。
私は引数を渡していません。これは、Pythonの「HelloWorld」ラムダ関数です。このラムダ関数をLambdaサービスで手動で作成すると、エラーなしで実行できます。 Cloudformationを使用してラムダを作成した場合にのみ、このエラーが発生します。
私を正しい方向に向けてください。前もって感謝します。
はい、あなたの助けに感謝します。それはそれを修正しました。 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ファイルのルートに配置してください。
問題は「ハンドラー」の宣言にあると思います。
モジュール名と関数名が含まれている必要があります。つまり、module_name.lambda_handlerである必要があります。ここで、module_nameは、ハンドラー関数を含むファイルの名前です。
Boto3 for pythonを使用してラムダ関数を作成するときに同じエラーが発生しました-これで問題が解決しました。
私が投稿した画像にエラーが表示されたためにここに来る場合は、AWSLambdaコード画面の[ハンドラー]フィールドでハンドラーの名前の前にlambda_function
を追加するのが修正です。
たとえば、コード内のハンドラー名がlambda_handler
の場合、コード画面の[ハンドラー]フィールドでlambda_function.lambda_handler
を使用する必要があります。
これは、pythonラムダ関数に割り当てられたデフォルトのモジュール名がlambda_function
であると推測したとおりであることを意味します。