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