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