web-dev-qa-db-ja.com

デプロイできません-エラー:500を超えるアプリケーションバージョンを持つことはできません

EBにデプロイすると、次のエラーが表示されます。

エラー:500を超えるアプリケーションバージョンを持つことはできません。一部のアプリケーションバージョンを削除するか、制限の引き上げをリクエストしてください。

私は手動で行って、いくつかのバージョンを削除しました。この制限のためにデプロイが失敗したくありません。 Elastic Beanstalkに未使用バージョンを自動削除する方法はありますか?

41
Tal

古いバージョンをクリーンアップする機能が最近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
64
Rohit Banga

これで、AWSコンソールからライフサイクルポリシーを管理できます。

  1. 環境内のApplication versionsメニューを見つけます。

Application versions menu

  1. 右上のSettingsボタンをクリックすると、保持したいバージョンの量を設定できます: Lifecycle policies

注意

アプリケーションバージョンライフサイクル設定の構成 ドキュメントから:

Elastic Beanstalkは、新しいアプリケーションバージョンを作成するたびにアプリケーションのライフサイクルポリシーを適用し、ライフサイクルポリシーが適用されるたびに最大100バージョンを削除します。 Elastic Beanstalkは、新しいバージョンを作成した後に古いバージョンを削除し、ポリシーで定義されているバージョンの最大数に新しいバージョンをカウントしません。

Elastic Beanstalkは、現在環境で使用されているアプリケーションバージョン、またはポリシーがトリガーされる10週間以内に終了した環境にデプロイされたアプリケーションバージョンを削除しません。

アプリケーションバージョンの制限は、リージョン内のすべてのアプリケーションに適用されます。複数のアプリケーションがある場合は、制限に達しないように適切なライフサイクルポリシーを使用して各アプリケーションを構成します。 Elastic Beanstalkは、アプリケーションバージョンの作成が成功した場合にのみポリシーを適用するため、すでに制限に達している場合は、新しいバージョンを作成する前に一部のバージョンを手動で削除する必要があります。

17
Nathron

この回答を書いている時点では、eb labs cleanup-versionsは機能しません。アプリケーションのバージョンがあってもNo application versions to deleteを返しました。

回避策として、 this answer (change theregionandアプリ名それに応じて):

aws elasticbeanstalk describe-application-versions --output text --region =us-west-2--query 'ApplicationVersions [*]。[ApplicationName、 VersionLabel、DateCreated] '| grepmy-app-name|アプリのバージョンの日付を読み取り中; echo "バージョン$ app $ ver $ dateの削除"; aws elasticbeanstalk delete-application-version --region =us-west-2--application-name $ app --version-label $ ver- delete-source-bundle;やった

4
Jerome Dalbert

それを行うための組み込みの方法はありませんが、次の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
1
Tal

これで、すべてのアプリケーションバージョンを削除するための管理UIページが追加されました。

アプリケーションバージョンの管理

1