web-dev-qa-db-ja.com

AWSは自動スケーリンググループを新しいAMIで自動的に更新しますか?

AWSにあるものは次のとおりです。

  • アプリケーションELB
  • 異なるリージョンに2つのインスタンスがある自動スケーリンググループ(Windows IISサーバー)
  • AMI_Aを指すConfigを起動します
  • 設定されているすべての関連するバックエンドのもの(VPC、サブネット、セキュリティグループなど)

すべてが機能します。ただし、サーバーを更新または変更する必要がある場合は、現在、手動で新しいAMI_Bを作成し、AMI_Bを使用して新しいLaunchConfigを作成し、新しいLaunchConfigを使用するようにAutoScalingGroupを更新し、インスタンスの最小数を4に増やして待機しています。それらを使用可能にしてから、数を2に減らして、古いインスタンスを強制終了します。

このプロセスを自動化したいと思っています。 AmazonからCLI関連のリンクがいくつか提供され、AMI作成のスクリプトを作成し、LaunchConfigを作成し、AutoScalingGroupを更新することができます...しかし、新しいインスタンスを起動するスクリプトを作成する簡単な方法がわかりません。

いくつか検索した後、私が望むことを実行するように見えるいくつかのCloudFormationテンプレートを見つけましたが、ほとんどはそれ以上のことを実行し、少し混乱します。

CloudFormationを探索する必要がありますか?始めるために従うことができる簡単なガイドはありますか?それとも、開始したスクリプトをそのまま使用する必要がありますか?

PS-これが繰り返しの質問である場合は申し訳ありません。 AWSでは状況が頻繁に変わるため、古い回答が現在のベストアンサーではない場合があります。

12
sureshot007

AutoScalingグループ内のインスタンスを新しいまたは更新された起動構成に更新するプロセスを自動化するためのオプションがいくつかあります。

CloudFormation

CloudFormationを使用してAutoScaling Groupのインスタンスの更新を管理する場合は、 UpdatePolicy 属性の AWS::AutoScaling::AutoScalingGroup ドキュメントのリソース、および "Auto Scalingグループローリングアップデートを実行するための推奨されるベストプラクティスは何ですか?" 詳細については、AWSナレッジセンターのページをご覧ください。

CloudFormationリソース内でAMIの作成/更新のスクリプトも作成する場合は、「 クラウドフォーメーションスタックの一部としてAMIイメージを作成する "」という質問に対する私の回答を参照してください。

ただし、CloudFormationは単純なツールではないことに注意してください。これは、AWSリソースを調整するための複雑で比較的低レベルのサービスであり、既存のスクリプトをそれに移行するには、学習曲線が急であるため、時間がかかる可能性があります。

弾性ビーンズトーク

単純さが最も重要な場合は、 Elastic Beanstalk を評価することをお勧めします。これは、展開中の rollingimmutable の両方の更新もサポートします。より完全に管理された、コンソール指向の、Platform-as-a-Service環境。 CloudFormationとElasticBeanstalkの詳細な比較については、質問に対する私の回答 ".NETプロジェクトのElastic BeanstalkとCloudFormationの違いは何ですか?" を参照してください。

CodeDeploy

既存のスクリプトにプラグインできる自動スケーリンググループ内のインスタンスを更新するためのソリューションが必要な場合は、 AWS CodeDeploy を検討する価値があるかもしれません。インスタンスにエージェントをインストールしてから、API/CLI/Consoleを介してデプロイをトリガーすると、エージェントはインスタンスのフリートへのアプリケーション更新のデプロイを管理します。完全なチュートリアルについては、 AWS CodeDeployを使用してアプリケーションをAuto Scaling Groupにデプロイする を参照してください。 CodeDeployは「インプレース」デプロイメントと「青緑色」デプロイメントをサポートしますが(詳細は デプロイメントの操作 を参照)、このサービスは、S3でホストされるアプリケーションパッケージを静的にスワップアウトするアプローチを想定していると思います展開ごとにAMIを置き換えるのではなく、ベースAMI。したがって、AMI交換のユースケースには最適ではないかもしれませんが、とにかく調べる価値はあります。

2
wjordan

Auto ScalingGroupにカスタム終了ポリシーが必要です。

OldestLaunchConfiguration。 Auto Scalingは、最も古い起動構成を持つインスタンスを終了します。このポリシーは、グループを更新し、以前の構成からインスタンスを段階的に廃止する場合に役立ちます。

コンソールを使用して終了ポリシーをカスタマイズするには

  1. https://console.aws.Amazon.com/ec2/ でAmazonEC2コンソールを開きます。
  2. ナビゲーションペインで、[自動スケーリンググループ]を選択します。
  3. AutoScalingグループを選択します。

  4. [アクション]で、[編集]を選択します。

  5. [詳細]タブで、[終了ポリシー]を見つけます。 1つ以上の終了ポリシーを選択します。複数のポリシーを選択する場合は、適用する順序でそれらをリストします。デフォルトポリシーを使用する場合は、それをリストの最後のポリシーにします。

  6. [保存]を選択します。

CLIで

 aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration"

https://docs.aws.Amazon.com/autoscaling/latest/userguide/as-instance-termination.html

1
strongjz

その目的のために、Ansibleの ec2_asg モジュールを使用します。そのためにreplace_all_instancesreplace_batch_sizeの設定があります。ドキュメントごと:

ローリング方式で、古い起動構成を使用していたすべてのインスタンスを新しい起動構成のものに置き換えます。 ASGサイズをC(replace_batch_size)だけ増やし、新しいインスタンスが起動して実行されるのを待ちます。その後、古いインスタンスのバッチを終了し、置き換えを待ち、すべての古いインスタンスが置き換えられるまで繰り返します。それが完了すると、ASGサイズは予想されるサイズに縮小されます。

target_group_arnsを指定すると、モジュールは次のバッチに進む前に、ターゲットグループ内のインスタンスの状態をチェックします。

編集:必要な数のインスタンスを維持するために、最初にminを目的に設定します。

0
vvucetic