24

最近誰かが目撃しました

TooManyApplicationVersions Exception

新しいアプリケーションバージョン(war)のデプロイ中にAWS Elastic Beanstalkコンソールで?戦争のアップロードが終了した後にのみ表示されるこのメッセージを見るのはとても迷惑です。

この例外が発生する理由と、そのような状況を回避するためにどのような予防措置を講じるべきかを知りたいと思います。

4

5 に答える 5

27

原因

表示されている例外は、 AWS ElasticBeanstalkのそれぞれのアカウント制限に達したことが原因です。CreateApplicationVersionのエラーのセクションを参照してください[言い換え]

  • TooManyApplicationVersions-呼び出し元が、アカウントに関連付けられているアプリケーションバージョンの数の制限を超えました
  • TooManyApplications-発信者がアカウントに関連付けられているアプリケーションの数の制限を超えました。

現在の制限は、それぞれのFAQに概説されています。AWSElasticBeanstalkで実行できるアプリケーションの数はいくつですか。

最大25のアプリケーションと500のアプリケーションバージョンを作成できます。デフォルトでは、すべてのアプリケーションで最大10の環境を実行できます。Elastic Beanstalk以外でもAWSを使用している場合は、そうではない可能性があります[...]さらにリソースが必要な場合は、AWS ElasticBeanstalkリクエストフォームに記入してください。リクエストはすぐに評価されます。 [強調鉱山]

解決

強調されているように、AWSは通常のエスカレーションオプションを提供し、AWS Elastic Beanstalkの制限を増やすリクエストを送信できるようにします。これは、まだ多くのアプリケーションバージョンを再利用できるようにする必要がある場合です。そうしないと、使用しなくなった古いものを削除するだけで、問題はそれに応じて消えるはずです。

幸運を!

于 2012-03-06T20:03:13.943 に答える
20

これは、古いアプリケーションバージョンをクリアするのに役立つAWSCLIを使用する1つのライナーです。

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

grepを、適切と思われる日付(2013、2014-01、2014-02-0など)に置き換えます。

于 2014-04-30T03:01:14.990 に答える
13

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
于 2015-09-24T08:27:16.353 に答える
11

バージョンの最大数に近づいており、古いバージョンまたは未使用のバージョンを削除する必要があります。

現在のWebコンソールでは、Beanstalk環境の[アプリケーションバージョン]タブで簡単に実行できます。

ここに画像の説明を入力してください

于 2012-11-10T15:24:22.383 に答える
1

これは、デプロイスクリプトで最も古いアプリケーションバージョンを削除するために使用するコードです。

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

于 2015-09-02T13:51:28.330 に答える