3K個のオブジェクト(ファイル)をS3にロードしました。そのS3バケットにロードされる各ファイルのイベントトリガーがあります。S3イベントトリガーはスケーラブルですか?
ラムダは約300個のオブジェクトに対してのみイベントトリガーを受信しています。再試行(S3から戻ってS3に戻す)すると、イベントの残りの400オブジェクトがラムダに届かなくなってしまいました。
私がここで行うことができないことを助け、作成したオブジェクトの数に応じてどのようにスケールすることができますか?
var async = require('async');
var aws = require('aws-sdk');
var s3 = new aws.S3();
var kinesis = new aws.Kinesis();
var sns = new aws.SNS();
var config = require('./config.js');
var logError = function(errormsg) {
sns.publish({
TopicArn: config.TopicArn,
Message: errormsg
}, function(err, data) {
if (err) {
console.log(errormsg);
}
});
};
exports.handler = function(event, context, callback) {
var readS3andSendtoKinesis = function(record, index, cb) {
var params = {
Bucket: record.s3.bucket.name,
Key: record.s3.object.key
};
console.log('Received File: ' + record.s3.object.key);
s3.getObject(params, function(err, data) {
if (!err) {
var kinesisParams = {
Data: data.Body.toString('utf8'),
PartitionKey: config.PartitionKey,
StreamName: config.StreamName
};
kinesis.putRecord(kinesisParams, function(err, data) {
if (err) {
// Handle Kinesis Failures
logError(JSON.stringify(err, null, 2));
}
cb(null, 'done');
});
} else {
// Handle S3 Failures
logError(JSON.stringify(err, null, 2));
cb(null, 'done');
}
});
};
async.eachOfLimit(event.Records, 1, readS3andSendtoKinesis, function(err) {
callback(null, 'Done');
});
};
誰もが関連付けられているラムダはこちらCloudWatchのメトリックを共有し、CloudWatchのを見てお勧めしますので、
ラムダ関数の呼び出し回数を調べて確認していますか? – dzm
呼び出し回数と、イベントに送信されたキーを記録します。作成されたオブジェクトの数と一致しません。 – Kannaiyan
's3:ObjectCreated:*'イベントでトリガーしましたか? –