我大约有50个AWS Lambda函数,我有一个gulp任务来部署它,脚本将这些函数压缩并上传到S3,然后使用Lambda JS SDK我称这个任务来创建/更新函数:
gulp.task('upload', function (callback) {
var AWS = require('aws-sdk');
var lambda = Promise.promisifyAll(new AWS.Lambda(), {
filter: function (name) {
return name.indexOf('Async') === -1;
}
});
var promises = require('./lambda-config.js').lambda.map(function (lambdaConfig) {
return lambda.getFunctionConfigurationAsync({
FunctionName: lambdaConfig.FunctionName
}).then(function () {
return lambda.updateFunctionCodeAsync({
FunctionName: lambdaConfig.FunctionName,
S3Bucket: lambdaConfig.Code.S3Bucket,
S3Key: lambdaConfig.Code.S3Key
});
}).catch(function () {
return lambda.createFunctionAsync(lambdaConfig);
});
});
Promise.all(promises).then(() => callback()).catch(callback);
});
我正在获取
TooManyRequestsException error
,压缩文件的大小为13MB,未压缩的版本为50MB。我不认为大小是问题,而是并发调用SDK。在哪里可以找到有关可以对AWS开发工具包执行多少个并发调用的信息?您如何建议我可以解决
TooManyRequestsException error
?代码示例受到赞赏。 最佳答案
似乎这里存在并发问题。我遇到了同样的问题,即保存了许多承诺,然后用Promise.all执行了它们。
这是通过使用具有类似功能Promise.map的Bluebird Promise库解决的,该库还处理并发。
该代码将符合以下要求:
const Promise = require('bluebird');
Promise.map(arrayWithLambdas, lambda => {
//Deploy each lambda
}, { concurrency: 5}) // Control concurrency
.then(() => {
// Handle successful deploy of lambdas
})
.catch(() => {
// Handle unsuccessful deploy of lambdas
})
};