16

Lambda の S3 にオブジェクトをアップロードできないようです。すべてがローカルで正常に動作します。何が問題なのかを示すログにエラーはありません...

以下のコード:

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();
};

エラーなしで正常に実行されますが、s3.upload のコールバックが呼び出されていないようです。バケット内のオブジェクトは作成されません。

完全なアクセス権を付与し、ローカルでテストすることにより、IAM ロールのアクセス許可が問題にならないことを確認しました。

出力

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
4

1 に答える 1

46

戻る機会があるcontext.done()前に関数を呼び出していると思われます。アップロード応答コード ブロックにs3.upload()移動すると、動作するはずです。context.done()

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();
};
于 2015-06-18T23:11:11.127 に答える