最近有没有人目睹
TooManyApplicationVersions Exception
在AWS Elastic Beanstalk控制台上部署新的应用程序版本(战争)?看到这条消息很烦人,因为它只有在你完成上传战争后才会出现。
我很想知道为什么会发生这种异常以及应该采取哪些预防措施来避免这种情况?
最近有没有人目睹
TooManyApplicationVersions Exception
在AWS Elastic Beanstalk控制台上部署新的应用程序版本(战争)?看到这条消息很烦人,因为它只有在你完成上传战争后才会出现。
我很想知道为什么会发生这种异常以及应该采取哪些预防措施来避免这种情况?
您看到的异常源于您达到AWS Elastic Beanstalk各自的账户限制,请参阅CreateApplicationVersion [paraphrased]中的错误部分:
- TooManyApplicationVersions -调用者已超出与其帐户关联的应用程序版本数的限制。
- TooManyApplications -调用者已超出与其帐户关联的应用程序数量的限制。
相应的常见问题解答中概述了当前限制我可以使用 AWS Elastic Beanstalk 运行多少个应用程序?:
您最多可以创建 25 个应用程序和500 个应用程序版本。默认情况下,您可以在所有应用程序中运行多达 10 个环境。如果您还在 Elastic Beanstalk 之外使用 AWS,则可能不会 [...]如果您需要更多资源,请填写 AWS Elastic Beanstalk 申请表,您的申请将得到及时评估。 [强调我的]
正如所强调的,AWS 提供了通常的升级选项,并允许您提交请求以增加 AWS Elastic Beanstalk 限制,如果您确实需要那么多应用程序版本可供重用。否则,您可能会删除不再使用的旧版本,问题应该会相应消失。
祝你好运!
这是一个使用 AWS CLI 的方法,可以帮助您清除旧的应用程序版本:
aws elasticbeanstalk describe-application-versions --output text --query 'ApplicationVersions[*].[ApplicationName,VersionLabel,DateCreated]' | grep "2014-02" | while read app ver date; do aws elasticbeanstalk delete-application-version --application-name $app --version-label $ver --delete-source-bundle; done
用您认为合适的任何日期(2013、2014-01、2014-02-0 等)替换 grep。
从 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
这是我们在部署脚本中用于删除最旧应用程序版本的代码。
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 + ')');
}
});
}
});
});
Elastic Beantalk API (js) 的文档:http: //docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ElasticBeanstalk.html