AWS Auto Scaling Groupで新しいイメージを自動的に循環させるにはどうすればよいですか?


21

ロードバランサーと自動スケーリンググループを使用してスケーリングを管理するWebアプリケーションをセットアップしています。ソースコードはgitリポジトリにあるため、コードが変更されたときにイメージを更新する必要はありませんが、環境が変更されて新しいイメージが作成される場合があります。次に、その画像を自動スケーリンググループに循環させる必要があります。

画像を自動的に循環させる方法はありますか?現在、古いインスタンスを削除するスケールアップおよびスケールダウンのアクションをスケジュールします。


2
新しい起動設定を作成し、自動スケーリンググループを更新した後、各インスタンスを(たとえばを使用してas-set-instance-health)異常としてマークすると、自動スケーリングが単に新しいインスタンスで置き換えられるようになると、おそらくより効率的です。
cyberx86

回答:


10

これを行うには「AWS-HA-Release」をお勧めします-AWS-HA-Releaseの仕組み:

  1. 現在の自動スケーリンググループとELBが健全な5つのインスタンスを報告する場合、
  2. AWS-HA-Releaseは新しいインスタンスを本番環境に持ち込み、ELBがそれを正常であると識別するまで待機します(正常なインスタンスの総数を6にします)
  3. 古いインスタンスを削除します(合計5つまで)
  4. 別のインスタンスをサービスに追加します(合計6)
  5. 古いインスタンスを削除します(合計5つまで)
  6. すべてのインスタンスが置き換えられるまで続きます

この場合、ダウンタイムなしで新しいコードまたは新しいAMIバージョンを出荷でき、完全に新しいインスタンスの利点があります。AWS-HA-Releaseツールはhttps://github.com/colinbjohnson/aws-missing-toolsで入手できます


9

より簡単な方法は、Auto-Scaling Group(ASG)の最小インスタンスの数を現在の数の2倍に増やし、すべてが開始されるのを待ってから、その最小インスタンス数を元の値に変更することです。ELBは古いインスタンスを強制終了し、新しいインスタンスにコードを残します。終了ポリシーを達成するには、意図したとおりに動作するように「OldestInstance」に設定する必要があります。デフォルトの終了ポリシーには、望ましくない副作用がある場合があります。

ここでAWS CLIのパラメーターと例を見ることができます:http : //docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html


乾杯、これは非常に便利で手間のかからない方法です。
エラッドナバ

1
AWSドキュメントによると、これは常に機能するとは限りません。カスタム終了ポリシーを選択した場合でも、ASGは終了ポリシーを適用する前にAZのバランスを維持します。そのため、サイズを2倍にして半分にすると、古いインスタンスがいくつか残ります。これは、ASGが「OldestInstance」ポリシーを適用する前にAZのバランスと市場オプション(スポットとオンデマンド)のバランスを維持するため、複数のインスタンスタイプと購入オプションでASGを使用する場合に特に起こりやすくなります:docs.aws.amazon.com / autoscaling / ec2 / userguide /…
シャハド

6

このシナリオを管理する方法は、クラウド形成でAWS :: AutoScaling :: AutoScalingGroupオブジェクトのUpdatePolicy機能を使用することです。クラウド形成スタックが更新されると、インスタンスの循環を管理します。

いくつかの参照。 http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy .html


トン@graemeに感謝します。Cloudformationがこの機能を提供しているとは知りませんでした。
AJB

まさに私が探していたもの。AWSコンソールでの変更がロックダウンされると、Jenkinsを介してスタックをデプロイします。
グレッグビルズ

3

また、現在オープンソースとなっているNetflix Asgardツールもご覧ください。Auto Scaling Groupをセットアップできるだけでなく、インスタンスのグループに対して新しいAMIイメージのローリングリリースを実行することもできます。


「Netflix Asgard」

4
Netflix Asgardは廃止され、Netflix Spinnaker
dlaidlawに

0

正直に言うと、実際には本当に良い方法はありません。私が見つけた最善の方法は、ASG名にバージョンを入れることです。AMIを更新するたびに、新しいバージョンで新しいASG + Launch Configを作成して、他のグループと競合しないようにします。次に、古いグループのすべてのインスタンスを終了します。

よりフォールトトレラントな展開が必要な場合は、新しいロードバランサーの作成も含めて別の手順を追加することをお勧めします。これにより、両方のASGを相互に分離できます。また、更新の前に最後に変更をテストするための「ステージング」領域を持つことができます。次に、切り替える準備ができたら、DNSレコードを更新し、古いグループのすべてのインスタンスを終了します。


0

ここに投稿したように(Terraformでの同様の質問)、cloudformationを使用する場合を除いて、ASGには組み込まれていません。私もそれに苦労したので、複数のASGを監視し、その状態と更新をチェックする「ローラー」を書くことになりました。フィードバックをお寄せください。http://github.com/deitch/aws-asg-roller

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.