TooManyRequestsException

TooManyRequestsException

我大约有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
    })
};

10-08 04:40