Как избежать исключения TooManyApplicationVersion на AWS Elastic Beanstalk? - PullRequest
17 голосов
/ 06 марта 2012

В последнее время кто-нибудь был свидетелем

TooManyApplicationVersions Exception

на AWS Elastic Beanstalk при развертывании новой версии приложения (война)?Очень неприятно видеть это сообщение, которое появляется только после того, как вы закончили загружать войну.

Мне было бы интересно узнать, почему возникает это исключение и какие меры предосторожности следует предпринять, чтобы избежать таких ситуаций?

Ответы [ 5 ]

19 голосов
/ 30 апреля 2014

Вот один вкладыш, который использует интерфейс командной строки AWS, который поможет очистить старые версии приложений:

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 и т. Д.) Вы считаете нужным.

19 голосов
/ 07 марта 2012

Причина

Исключение, которое вы видите, связано с достижением пределов вашей учетной записи для AWS Elastic Beanstalk , см. Раздел Ошибки в CreateApplicationVersion [перефразировано]

  • TooManyApplicationVersions - Абонент превысил ограничение на количество версий приложений, связанных с их учетной записью.
  • TooManyApplications - Вызывающий абонент превысил ограничение на количество приложений, связанных с его учетной записью.

Текущие ограничения указаны в соответствующем разделе часто задаваемых вопросов. Сколько приложений можно запустить с AWS Elastic Beanstalk? :

Вы можете создать до 25 приложений и 500 версий приложений . От по умолчанию вы можете запустить до 10 сред во всех ваших Приложения. Если вы также используете AWS за пределами Elastic Beanstalk, Вы не можете быть [...] Если вам нужно больше ресурсов, заполните AWS Elastic Форма запроса Beanstalk и ваш запрос будут незамедлительно оценены. [выделено мое]

Решение

Как подчеркивалось, AWS предлагает обычную опцию эскалации и позволяет отправить Запрос на увеличение пределов упругого боба AWS , если вам действительно нужно, чтобы столько версий приложений было доступно для повторного использования. В противном случае вы можете просто удалить старые, которые больше не будете использовать, и проблема должна исчезнуть соответственно.

Удачи!

13 голосов
/ 24 сентября 2015

Начиная с 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
9 голосов
/ 10 ноября 2012

Вы приближаетесь к максимальному количеству версий и вам необходимо удалить старые или неиспользуемые.

В текущей веб-консоли вы можете просто сделать это на вкладке «Версии приложения» в вашей среде Beanstalk.

enter image description here

1 голос
/ 02 сентября 2015

Это фрагмент кода, который мы используем в нашем сценарии развертывания для удаления самой старой версии приложения.

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

...