web-dev-qa-db-fra.com

impossible de déployer - ERREUR: vous ne pouvez pas avoir plus de 500 versions d'application

J'obtiens l'erreur suivante lors du déploiement sur EB:

ERREUR: vous ne pouvez pas avoir plus de 500 versions d'application. Supprimez certaines versions d'application ou demandez une augmentation de limite.

Je suis allé manuellement et j'ai supprimé certaines versions. Je ne veux pas que les déploiements échouent à cause de cette limite. Existe-t-il un moyen dans Elastic Beanstalk pour expulser automatiquement les versions inutilisées?

41
Tal

Une fonctionnalité a été récemment ajoutée à eb cli (v3.3) pour nettoyer les anciennes versions

https://m.reddit.com/r/aws/comments/340ce0/whats_the_thinking_behind_beanstalks_versioning/

Copie de la commande à partir du lien reddit

$ eb labs cleanup-versions --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
64
Rohit Banga

Vous pouvez maintenant gérer les politiques de cycle de vie à partir de la console AWS.

  1. Recherchez le menu Versions d'application dans votre environnement:

Application versions menu

  1. Cliquez sur le bouton Paramètres en haut à droite et vous pourrez configurer la quantité de versions que vous souhaitez conserver: Lifecycle policies

Remarque

Dans la documentation Configuring Application Version Lifecycle Settings :

Elastic Beanstalk applique la stratégie de cycle de vie d'une application à chaque fois que vous créez une nouvelle version d'application et supprime jusqu'à 100 versions à chaque application de la stratégie de cycle de vie. Elastic Beanstalk supprime les anciennes versions après avoir créé la nouvelle version et ne compte pas la nouvelle version dans le nombre maximal de versions défini dans la stratégie.

Elastic Beanstalk ne supprime pas les versions d'application actuellement utilisées par un environnement, ni les versions d'application déployées dans des environnements qui ont été arrêtés moins de dix semaines avant le déclenchement de la stratégie.

La limite de version d'application s'applique à toutes les applications d'une région. Si vous avez plusieurs applications, configurez chaque application avec une stratégie de cycle de vie appropriée pour éviter d'atteindre la limite. Elastic Beanstalk n'applique la stratégie que si la création de la version de l'application réussit, donc si vous avez déjà atteint la limite, vous devez supprimer certaines versions manuellement avant de créer une nouvelle version.

17
Nathron

Au moment de la rédaction de cette réponse, eb labs cleanup-versions ne fonctionne pas pour moi: il a renvoyé No application versions to delete même lorsque j'avais des versions d'application.

Comme solution de contournement, j'ai utilisé ce one-liner inspiré de cette réponse (changez la région et nom de l'application en conséquence):

aws elasticbeanstalk describe-application-versions --output text --region = us-west-2 --query 'ApplicationVersions [*]. [ApplicationName, VersionLabel, DateCreated] '| grep my-app-name | pendant la lecture de la date de l'application; do echo "suppression de la version $ app $ ver $ date"; aws elasticbeanstalk delete-application-version --region = us-west-2 --application-name $ app --version-label $ ver - paquet de suppression de source; terminé

4
Jerome Dalbert

Il n'y a aucun moyen intégré de le faire, mais le script Ruby effectue exactement cela. Planifiez-le simplement en utilisant cron.

clearnup.rb:

application_name="myApp"
active_versions_Shell_output = `aws elasticbeanstalk describe-environments --region=us-east-1 | grep git | awk '{gsub(/.*\:\ \"/,"",$0); print}'`
all_versions_Shell_output = `aws elasticbeanstalk describe-applications --region=us-east-1 | grep git | awk '{gsub(/.*\ \"/,"",$0); print}'`
all_versions = all_versions_Shell_output.split(/\n/).map{|x| x[0..57]}
active_versions = active_versions_Shell_output.split(/\n/).map{|x| x[0..57]}

(all_versions - active_versions).each do |version_to_be_deleted|
    puts "deleting #{version_to_be_deleted}"
  `aws elasticbeanstalk delete-application-version --delete-source-bundle --application-name #{application_name} --version-label #{version_to_be_deleted}`
end
1
Tal

Maintenant, ils ont ajouté une page d'administration UI pour supprimer toutes les versions d'application:

Gestion des versions d'application

1
Mohammad Zekrallah