2016-04-05 5 views
0

Я работаю над пониманием Amazon Lambda. Это немного изменяется от шаблона s3, чтобы просмотреть тип содержимого загруженного файла.AWS Lambda получить шаблон данных объекта s3 не работает

Мой журнал событий и журнал параметров отображаются в облачных часах, однако это похоже на то, что s3.getObject() никогда не запускается, поскольку ни один журнал ошибок журнала данных не отображается в журналах, и все, что я получаю это задание, истекающее после периода ожидания.

var aws = require('aws-sdk'); 
var s3 = new aws.S3({apiVersion: 'latest'}); 

exports.handler = function(event, context) { 
    console.log('Received event:', JSON.stringify(event, null, 2)); 

    // Get the object from the event and show its content type 
    var bucket = event.Records[0].s3.bucket.name; 
    var key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); 
    var params = { 
     Bucket: bucket, 
     Key: key 
    }; 
    console.log(params); 
    s3.getObject(params, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else  console.log(data);   // successful response 
/* 
     if (err) { 
      var message = "Error getting object " + key + " from bucket " + bucket + 
       ". Make sure they exist and your bucket is in the same region as this function."; 
      console.log(message); 
      context.fail(message); 
     } else { 
      console.log('CONTENT TYPE:', data.ContentType); 
      context.succeed(data.ContentType); 
     } 
*/ 
    }); 
}; 

Вот текущая роль в IM, необходимо внести некоторые изменения?

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Action": [ 
     "logs:CreateLogGroup", 
     "logs:CreateLogStream", 
     "logs:PutLogEvents"], 
     "Resource": "arn:aws:logs:*:*:*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "ec2:CreateNetworkInterface", 
     "ec2:DescribeNetworkInterfaces", 
     "ec2:DetachNetworkInterface", 
     "ec2:DeleteNetworkInterface"], 
     "Resource": "*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListAllMyBuckets", 
     "s3:ListBucket", 
     "s3:GetBucketLocation", 
     "s3:GetObject", 
     "s3:PutObject"], 
     "Resource": "arn:aws:s3:::*" 
    }, 
    { 
     "Action": "lambda:*", 
     "Effect": "Allow", 
     "Resource": "arn:aws:lambda:*" 
    }] 
} 
+0

Вы включили доступ VPC для своей лямбда-функции? –

ответ

0

Перед тем, как в ListBucket вам понадобятся ListAllBuckets. Советую вам ограничить доступ лямбдой.

{ 
     "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListAllMyBuckets" 
     ], 
     "Resource":"arn:aws:s3:::*" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource":"arn:aws:s3:::yourBucket" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:GetObject" 
     ], 
     "Resource":"arn:aws:s3:::yourBucket/*" 
     } 
     ] 
    } 
+0

как только я получу его работу, я ограничу. но сначала я хочу запустить его ... – shaun

+0

Работает ли он, если вы добавите ListAllMyBuckets? – user3913702

+0

все еще расчет времени. '' errorMessage ":" 2016-04-05T20: 56: 41.722Z dfb5a335-fb70-11e5-8877-a1b08ad78d9c Задача, истекающая после 10.00 секунд, "' ничего не записывает после 'console.log (params);' other чем сказать, что это приурочено. – shaun

1

Я столкнулся с этим вопросом раньше. Это происходит после выполнения проверки, сборки и подписания обратных вызовов, но до того, как произойдет обратный вызов. По сути, один из сокетов переходит в режим зомби. Я сообщил об этом AWS, но они еще не дали исправления. Чтобы «исправить», установите тайм-аут сокета при создании экземпляра клиента s3. Сокет будет тайм-аут, и операция будет автоматически повторена.

var s3 = new AWS.S3({httpOptions: { timeout: 2000 }}); 

По умолчанию, тайм-аут две минуты, поэтому это проблематично, если это происходит в Lambda, где тайм-аут значительно короче.

Смежные вопросы