web-dev-qa-db-ja.com

どのような「望ましいインスタンス」が必要ですか? AWS Amazon Webservices AutoScalingグループ

amazon AWSで奇妙な状況に直面しています。 目的のインスタンス番号が何に使用されているのか理解できませんか?構成されたスケールアップおよびスケールダウンアクションを含む自動スケーリンググループがあります。

カスタムPHPアクションを実行するファイルScale upおよびScale down 一部の外部要因に応じて、自動スケーリングアクションに影響を与えないように、必要なインスタンスに書き込む必要がある数を知りたいです。

例えば:

  1. 希望を2に設定しました
  2. 2つのインスタンスを実行しています
  3. スケールダウンアクションを実行します
  4. インスタンスは1です
  5. 自動スケーリンググループは自動的に別のインスタンスを開始します。そのため、2を実行して終了したため、スケールダウンは役に立ちません

私に何ができる?

どうもありがとう!

20
X.Otano

ASGは常に希望する容量を維持しようとします。スケールアップまたはスケールダウンし、新しいインスタンスの数が必要な容量と異なる場合、ASGはインスタンスを追加または削除して、必要な容量に戻します。

スケーリングポリシーを使用し、ポリシー条件が満たされている場合、ASGは、スケーリングポリシーの結果に一致するように必要な容量を変更します。たとえば、Desired Capacityが2で、CPU使用率がしきい値を超えた場合にスケールアップするように指示するポリシーがあります。

そのポリシーが満たされると、必要な容量は3に増加します。

そのため、手動でスケールアップとスケールダウンを行うと、ASGでインスタンス数が必要な容量に復元されます。

手動でスケールアップとスケールダウンを行う場合は、最大値と最小値を広い値に設定し、その範囲内で必要な容量を移動できます。

したがって、Max = 10、Min = 1、Desired = 3を実行できます。次に、必要な容量を変更するだけでスケールアップまたはスケールダウンできます。 (これがAuto Scalingの使用方法であり、以前に悪い答えを出した理由だと思います。)

インスタンスを終了すると同時に必要な容量を変更する場合、CLIはそれを行うことができます。

ASGでのインスタンスの終了 、およびより一般的なCLI ASGドキュメントを参照してください。

22
Peter

望ましい値とは、特定の時間にインスタンスの数を手動で設定することを意図していると思います。 99%の確率で、希望の==最小値を設定し、ASGポリシーでスケーリングを実行すると思います。

3
Apokai

これらの答えはすべて良いですが、もう1つ状況を追加したいと思います。

青/緑の展開を行っていて、トラフィックがバーストしているとします。 50%の時点でインスタンスが1つしかないため、最小は1です。ただし、CI/CDを実行していて、デプロイは1日中いつでも発生するとします。開発者は、インスタンスが10までスケールアップした大規模なスケーリングイベントの真っ只中にコードを本番環境にプッシュできます。テラフォームなどのツールを使用して自動スケーリンググループなどをデプロイすると、自動スケーリンググループがにリセットされます。 1とすると、サービスが中断するリスクがあります。

このため、デプロイメント中に、呼び出し時にプログラムでterraformに渡すterraformオーバーライド値があります。 terraformを呼び出す前に、aws cliを使用して、自動スケーリングがインスタンスをスケーリングした現在の必要な容量を把握し、その値をterraformに渡して、新しい自動スケーリンググループが前のホストと同じ数のホストを使用できるようにします。

2
stobiewankenobi

Terraformを使用した青/緑のデプロイメントの場合、最初は、希望する最大数の10を使用することを検討できます。デプロイ後、フォローアップしてTerraformのdesired_capacityの値をいくつかの値に戻し、ASGに設定したトリガーを自然にスケールダウンさせることができます。 ( 'desired_capacity'はインスタンスのターゲットであり、ASGにあるべきであることに注意してください。'min_size 'はASGで許可される最小量です)

https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html

resource "aws_autoscaling_group" "example" {
  availability_zones = 
  ["${data.aws_availability_zones.available.names}"]
  max_size = 20
  min_size = 2
  desired_capacity = 10
  launch_configuration = "${aws_launch_configuration.example.name}"
}
1
Adam