Amazon web services 如何避免AWS Elastic Beanstalk上出现ToomanyApplication版本异常?

Amazon web services 如何避免AWS Elastic Beanstalk上出现ToomanyApplication版本异常?,amazon-web-services,amazon-elastic-beanstalk,Amazon Web Services,Amazon Elastic Beanstalk,最近有没有人目睹了这件事 TooManyApplicationVersions Exception 在控制台上部署新的应用程序版本(war)?看到这条消息真烦人,因为它是在你上传完战争后才出现的 我想知道为什么会发生这种异常,以及应该采取什么预防措施来避免这种情况?原因 您看到的例外情况源于达到各自的帐户限额,请参见[释义]中的错误部分: TooManyApplicationVersions-调用者已超过了 与其帐户关联的应用程序版本数 TooManyApplications-调用者已超过与

最近有没有人目睹了这件事

TooManyApplicationVersions Exception
在控制台上部署新的应用程序版本(war)?看到这条消息真烦人,因为它是在你上传完战争后才出现的

我想知道为什么会发生这种异常,以及应该采取什么预防措施来避免这种情况?

原因 您看到的例外情况源于达到各自的帐户限额,请参见[释义]中的错误部分:

  • TooManyApplicationVersions-调用者已超过了 与其帐户关联的应用程序版本数
  • TooManyApplications-调用者已超过与其帐户关联的应用程序数量限制
各常见问题解答中概述了当前的限制:

您最多可以创建25个应用程序和500个应用程序版本。通过 默认情况下,您可以在所有计算机上运行多达10个环境 应用。如果您也在Elastic Beanstalk之外使用AWS, 您可能不是[…]如果需要更多资源,请完成AWS计划 Beanstalk申请表,您的申请将得到及时评估。[我的重点]

解决方案 正如所强调的,AWS提供了通常的升级选项,如果您确实需要许多应用程序版本可供重用,它允许您提交升级。否则,您可能会删除不再使用的旧版本,问题也会随之消失


祝你好运

您正接近最大版本数,需要删除旧的或未使用的版本

在当前的web控制台中,您只需在Beanstalk环境的“应用程序版本”选项卡上执行此操作


这里有一个使用AWS CLI的单行程序,它将帮助您清除旧的应用程序版本:

$ eb labs cleanup-versions

aws elasticbeanstalk描述应用程序版本——输出文本——在读取应用程序版本日期时查询“ApplicationVersions[*]。[ApplicationName,VersionLabel,DateCreated]”grep“2014-02”;aws elasticbeanstalk是否删除应用程序版本--应用程序名称$app--版本标签$ver--删除源捆绑包;完成


用您认为合适的日期(2013、2014-01、2014-02-0等)替换grep。

这是我们在部署脚本中用于删除最旧应用程序版本的代码片段

console.log('Deleting oldest application version.');
params = {};
local.waitFor(function(done) {
    eb.describeApplicationVersions(params, function(err, data) {
        if (err) {
            console.error(err, err.stack);
            local.abort('Could not retrieve the list of application version.');
        } else {
            // This is probably not needed as the list is already sorted but it is
            // not written anywhere that this will always be the case
            function compare(a,b) {
                if (a.DateCreated > b.DateCreated)
                    return -1;
                if (a.DateCreated < b.DateCreated)
                    return 1;
                return 0;
            }
            var applicationsVersion = data['ApplicationVersions'].sort(compare),
                oldestApplication   = applicationsVersion[applicationsVersion.length - 1],
                applicationName     = oldestApplication['ApplicationName'],
                versionLabel        = oldestApplication['VersionLabel'];
            params = {
                ApplicationName: applicationName, /* required */
                VersionLabel:    versionLabel,    /* required */
                DeleteSourceBundle: false /* Do not delete source bundle from S3 */
            };
            eb.deleteApplicationVersion(params, function(err, data) {
                if (err) {
                    console.error(err, err.stack);
                    local.abort('Could not delete the oldest application version. (' + versionLabel + ')')
                } else {
                    console.log('Successfully deleted the oldest application version. (' + versionLabel + ')');
                }
            });
        }
    });
});
console.log('删除最旧的应用程序版本');
params={};
local.waitFor(函数(完成){
eb.描述应用程序版本(参数、函数(错误、数据){
如果(错误){
console.error(err,err.stack);
local.abort('无法检索应用程序版本列表');
}否则{
//这可能是不需要的,因为列表已经排序,但它是
//没有任何地方写过这样的话
功能比较(a、b){
如果(a.DateCreated>b.DateCreated)
返回-1;
如果(a.DateCreated

Elastic Beantalk API(js)的文档说明:

从EB CLI 3.3开始,您现在可以运行以下操作以清除旧版本:

$ eb labs cleanup-versions
默认情况下,这将清理到最后10个版本和/或超过60天的版本。添加
--help
,将输出以下内容:

usage: eb labs cleanup-versions [options...]

Cleans up old application versions.

optional arguments:
--num-to-leave NUM    number of versions to leave DEFAULT=10
--older-than DAYS     delete only versions older than x days DEFAULT=60
--force               don't prompt for confirmation

如果它对任何人都有帮助的话,那么有一篇写得很好的文章介绍了如何在即将超过限制时使用AWS SDK删除过时/旧的应用程序版本。我也经历过这种情况——有没有自动删除旧版本的方法?或者设置某种版本删除策略?@petr-据我所知,AWS没有现成的版本删除策略,对不起。Beanstalk现在支持根据生命周期策略自动删除旧版本。如果此命令得到改进,删除所有未部署的应用程序版本减去以前部署的应用程序版本(在紧急情况下保留最后一个版本),请参阅。我试图找出一种方法来获取应用程序版本列表,其中包含是否已部署的信息,但“描述应用程序版本”不提供此类信息。类似于Elastic Beanstalk web控制台的东西,显示应用程序版本列表,详细说明每个应用程序的部署位置。在3.7.8中不起作用。这也是AWS代表的建议,但根本不起作用。他也不知道该怎么做。平台相当漂亮。