2016-01-22 57 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]

相关问题