2016-01-22 82 views
0

我正在關注這個小教程,當對象上傳到S3存儲桶時發送電子郵件。要和λ使用它我創建了一個.zip文件具有以下結構:AWS Lambda:無法導入模塊'郵件':沒有名爲mail的模塊

在mail.js /node_modules

將在mail.js有以下代碼:

var MailComposer = require('mailcomposer').MailComposer, 
    mailcomposer = new MailComposer(); 
var ses = 
    new aws.SES({ 
        accessKeyId: 'xxxxxxxxxxxx', 
        secretAccessKey: 'xxxxxxxxxxxx'}); 

s3.getObject(params, function(err, data) { 
    if (err) { 
    //error handling 
    } else { 
    mailcomposer.setMessageOption({ 
   from: '[email protected]’, 
     to: '[email protected]', 
    subject: 'Test’, 
     body: 's3://' + bucket + '/' + key, 
     html: 's3://' + bucket + '/' + key + 
           '<br/><img src="cid:' + key + '" />' 
    }); 
    var attachment = { 
     contents: data.Body, 
     contentType: 'image/png', 
     cid: key 
      }; 
    mailcomposer.addAttachment(attachment); 
    mailcomposer.buildMessage(function(err, messageSource) { 
     if (err) { 
     // error handling 
     } else { 
     ses.sendRawEmail({RawMessage: {Data: messageSource}}, function(err, data) { 
    if(err) { 
      // error handling 
      } else { 
       context.done(null, data); 
      } 
     }); 
     } 
    }); 
    } 
}); 

當我創建一個lambda函數我做到以下幾點:

  1. 在選擇藍圖菜單我選擇 「S3-GET-對象的Python」
  2. 我CH OOSE我鬥
  3. 至於事件中,我選擇「放」
  4. 我點擊「下一步」
  5. 我給一個名字lambda函數,然後選擇「上傳.zip文件」
  6. 我上傳與zip文件mail.js和node_modules目錄
  7. 作爲處理程序我填寫「mail.handler」
  8. 作爲角色,我選擇「S3執行角色」。該向導現在給出一個新的屏幕,我點擊「查看策略文檔」。我編輯的文件,這個文件現在是這樣的:

    { 
        "Version": "2012-10-17", 
        "Statement": [ 
        { 
         "Effect": "Allow", 
         "Action": [ 
         "logs:CreateLogGroup", 
         "logs:CreateLogStream", 
         "logs:PutLogEvents" 
         ], 
         "Resource": "arn:aws:logs:*:*:*" 
        }, 
        { 
         "Effect": "Allow", 
         "Action": [ 
         "s3:GetObject", 
         "s3:PutObject", 
         "ses:SendEmail", 
         "ses:SendRawEmail" 
         ], 
         "Resource": [ 
         "*" 
         ] 
        } 
        ] 
    } 
    
  9. 我點擊「允許」,並返回到上一畫面

  10. 那麼,我選擇下一個連接使lambda函數

當我現在上傳一個PNG文件時,我的日誌中出現以下錯誤。

START RequestId: a4401d96-c0ef-11e5-9ae4-8f38a4f750b6 Version: $LATEST 
**Unable to import module 'mail': No module named mail** 

END RequestId: a4401d96-c0ef-11e5-9ae4-8f38a4f750b6 
REPORT RequestId: a4401d96-c0ef-11e5-9ae4-8f38a4f750b6 Duration: 0.35 ms Billed Duration: 100 ms  Memory Size: 128 MB Max Memory Used: 9 MB 

我不知道爲什麼,因爲我敢肯定,在mail.js是我的.zip文件的根文件

+0

我會說,它看起來像你混淆了Python和JavaScript在這裏會有點 - 無論是在你的代碼,並在你的描述你提到的Python,但你引用的代碼是的JavaScript。 – jimjkelly

+0

ow是的,對不起 – user5488652

回答

0

該錯誤意味着拉姆達找不到庫。它不能在proj/lib/python2.7/site-packages或proj/lib64/python2.7/site-packages

它必須位於proj /本身內部。我遇到了與MySQL-python的同樣的問題,寫了一HOWTO:

http://www.iheavy.com/2016/02/14/getting-errors-building-amazon-lambda-python-functions-help-howto/

HTH -Sean

+0

好吧...你有它在主文件夾內,並已正確配置處理程序和文件名,仍然得到同樣的錯誤。?..因爲我有它,它吹了我的腦海裏 – dtc

1

只是有這麼多陷阱你可以運行而AWS拉姆達創建部署包(用於Python)。我花了幾個小時來調試會話,直到找到一個很少失敗的公式。

我已經創建了一個腳本,可以自動執行整個過程,因此使它不易出錯。我也寫了一些教程,解釋一切如何運作。你可能想看看:

Hassle-Free Python Lambda Deployment [Tutorial + Script]

相關問題