Node.js AWS Lambda SDK-TooManyRequestsException
我有大约50个AWS Lambda函数,我有大量任务来部署它,脚本压缩函数并将其上载到S3,然后使用Lambda JS SDK调用此任务来创建/更新函数:Node.js AWS Lambda SDK-TooManyRequestsException,node.js,amazon-web-services,gulp,aws-lambda,Node.js,Amazon Web Services,Gulp,Aws Lambda,我有大约50个AWS Lambda函数,我有大量任务来部署它,脚本压缩函数并将其上载到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
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错误
,zip大小为13MB,解压版本为50MB。我不认为大小是个问题,但对SDK的并发调用是个问题
在哪里可以找到关于我可以为AWS SDK执行多少并发调用的信息?您建议我如何解决
TooManyRequestsException错误
?非常感谢您提供一个代码示例。zip的大小似乎不是问题(请参阅)
当超过AWS授权该帐户的Lambda进程数时,我收到TooManyRequestsException。这里有一些要考虑的限制:
var lambda = new AWS.Lambda({
region: REGION,
maxRetries:0,
....
});
然后,您可以使用以下方法进行管理:
lambda.invoke(lambda_params, function(err, obj){
if(err){
if(err.toString().match(/TooManyRequestsException/)) ...
aws lambda delete函数--函数名my_outofcontrol_func
看起来这里的并发性有问题。我也有同样的问题,保存了很多承诺,然后用承诺来执行它们 这是通过使用Bluebird Promise库解决的,该库具有类似的函数Promise.map,该函数也处理并发性 代码应与以下内容一致:
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
})
};
感谢您的回答,但这是如果我正在调用(执行)lambda函数,但我现在的问题与部署有关,当我尝试部署使用lambda sdk函数部署的函数时,它返回TooManyRequestsException错误。lambda文档中没有任何内容表明创建或更新函数是否有限制,我注意到我只在eu-west-1区域出现此错误,而在us-east-1区域没有。AWS中没有关于超出任何限制的信息。我明白了。我不知道并发部署的限制,但是还有一些其他方法可以简化cat,包括将多个函数合并为多功能的单个函数(然后使用参数确定要执行的子函数),和/或在上载中使用setTimeout()函数来分隔请求,或者按顺序执行您的请求。部署更新不应如此频繁,以至于性能必须是一个高优先级(如果不是这样,请重新考虑您的设计…)。感谢您的回复,如果您不介意我问一下,频繁部署与性能有什么关系?考虑到我只做开发,每天都在重新部署更改?只是好奇,想从你那里得到更多的澄清。我读到lambda函数确实一直在运行,执行时间取决于您使用该函数的频率,我认为如果某些函数不经常使用,这将是一个问题。显然,您正在尝试同时上载50多个函数,如果成功,除了花费5秒而不是5分钟之外,顺序部署几乎没有什么好处。我想不出软件开发人员有什么理由要求这样做。您真的能够快速编写代码,在5分钟内更新和测试50个函数吗?设计良好的软件不应每隔几分钟重新部署一次。这一要求意味着一个非常不寻常的开发过程,或者只是一个简单的开发过程