部署到EB时出现以下错误:
错误:您的应用程序版本不能超过500个。或 删除一些应用程序版本或请求限制增加。
我手动删除了一些版本。 由于此限制,我不希望部署失败。 Elastic Beanstalk中有没有办法自动驱逐未使用的版本?
答案 0 :(得分:62)
最近在eb cli(v3.3)中添加了一项功能,以清理旧版本
https://m.reddit.com/r/aws/comments/340ce0/whats_the_thinking_behind_beanstalks_versioning/
从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
答案 1 :(得分:15)
来自Configuring Application Version Lifecycle Settings文档:
Elastic Beanstalk每次都应用应用程序的生命周期策略 您创建一个新的应用程序版本,并删除最多100个版本 每次应用生命周期策略时。 Elastic Beanstalk删除 创建新版本后的旧版本,并不计算 新版本朝向最大版本数量 政策。
Elastic Beanstalk不会删除应用程序版本 当前正由环境或应用程序版本使用 部署到终止不到十周的环境 在政策被触发之前。
应用程序版本限制适用于a中的所有应用程序 区域。如果您有多个应用程序,请配置每个应用程序 制定适当的生命周期政策以避免达到限制。 Elastic Beanstalk仅在应用程序版本时应用策略 创造成功,所以如果你已经达到极限,你必须 在创建新版本之前手动删除某些版本。
答案 2 :(得分:4)
在撰写此答案时,eb labs cleanup-versions
对我不起作用:即使我有应用程序版本,它也会返回No application versions to delete
。
作为一种解决方法,我使用了this answer启发的单行内容(相应地更改区域和应用名称):
aws elasticbeanstalk describe-application-versions --output text --region = us-west-2 --query' ApplicationVersions [*]。[ApplicationName,VersionLabel,DateCreated]& #39; | grep my-app-name |阅读应用日期;做回声"删除版本$ app $ ver $ date" ; aws elasticbeanstalk delete-application-version --region = us-west-2 --application-name $ app --version-label $ ver --delete-source-bundle;完成
答案 3 :(得分:1)
没有内置的方法可以做到这一点,但是下面的ruby脚本就是这样做的。只需使用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
答案 4 :(得分:1)
现在,他们添加了一个管理UI页面来删除所有应用程序版本:
答案 5 :(得分:1)
我在这里找到了解决方案,简单的解决方案是删除以前的版本,如下所述。
删除应用程序版本
打开 Elastic Beanstalk 控制台,然后在区域列表中,选择您的 AWS 区域。
在导航窗格中,选择应用程序,然后从列表中选择您的应用程序名称。
注意
如果您有很多应用程序,请使用搜索栏过滤 应用列表。
在导航窗格中,找到您的应用程序名称并选择 应用版本。
选择您要删除的一个或多个应用程序版本。
选择操作,然后选择删除。
(可选)要将这些应用程序版本的应用程序源包保留在您的 Amazon Simple Storage Service (Amazon S3) 存储桶中,请清除从 Amazon S3 中删除版本框。
选择删除。
另一种解决方案
转到版本设置并按照如下所示的方式启用生命周期策略。
参考:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-versions.html