2015-06-18 13 views
15

Dường như không thể tải lên một đối tượng vào S3 trong Lambda. Mọi thứ hoạt động tốt tại địa phương. Không có lỗi trong nhật ký rằng sẽ hiển thị những gì đang xảy ra sai ...Làm thế nào để tải lên một đối tượng vào S3 trong Lambda?

Mã dưới đây:

console.log('Loading function'); 
var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

exports.handler = function(event, context) { 
    //console.log(JSON.stringify(event, null, 2)); 
    var s3 = new AWS.S3(); 
    var param = {Bucket: 'flow-logs', Key: 'test-lambda-x', Body: 'me me me'}; 
    console.log("s3"); 
    s3.upload(param, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else console.log(data);   // successful response 
    }); 
    console.log('done'); 
    context.done(); 
}; 

Chạy thành công w/o lỗi, nhưng gọi lại trong s3.upload dường như không được gọi. Không có đối tượng trong nhóm được tạo.

Quyền vai trò IAM được xác minh không phải là vấn đề bằng cách cấp quyền truy cập đầy đủ, cũng như thử nghiệm tại địa phương.

Output

START RequestId: d4847fdb-160c-11e5-8a8c-b555b123e14d 
2015-06-18T22:53:29.750Z d4847fdb-160c-11e5-8a8c-b555b123e14d s3 
2015-06-18T22:53:30.271Z d4847fdb-160c-11e5-8a8c-b555b123e14d done 
END RequestId: d4847fdb-160c-11e5-8a8c-b555b123e14d 
+0

Tại sao đối tượng s3 được tạo lần thứ hai? (nội bộ và toàn cầu) –

+0

Tôi đã có một phiên bản làm việc hoàn chỉnh được giải thích ở đây: http://stackoverflow.com/questions/33631229/how-to-set-open-download-permissions-on-a-file-created-in -s3-với-amazon-lambda/33632736 –

Trả lời

41

tôi nghi ngờ bạn đang gọi context.done() chức năng trước khi s3.upload() có một cơ hội để quay trở lại. Nếu bạn di chuyển context.done() vào khối mã phản hồi tải lên, nó sẽ hoạt động.

var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

exports.handler = function(event, context) { 
    //console.log(JSON.stringify(event, null, 2)); 
    var s3 = new AWS.S3(); 
    var param = {Bucket: 'flow-logs', Key: 'test-lambda-x', Body: 'me me me'}; 
    console.log("s3"); 
    s3.upload(param, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else console.log(data);   // successful response 

     console.log('actually done!'); 
     context.done(); 
    }); 

    console.log('done?'); 
    //context.done(); 
}; 
+2

Cảm ơn @ James, điều này đã làm việc cho tôi :-) –

+1

@KatharineOsborne Nếu nó hoạt động, thì hãy chấp nhận câu trả lời. Điều này giúp những người khác trong cộng đồng. –

+0

@ParthapratimNeog Tôi sẽ không hỏi câu hỏi ;-) –

Các vấn đề liên quan