ヤマムギ

growing hard days.

*

CloudFormationで起動テンプレートのバージョン更新をした際にAuto ScalingのEC2インスタンスを置き換える

   

やりたいこと

タイトルのとおり、起動テンプレートのバージョン変更(AMIの置換)をした際に、Auto Scalingグループで起動しているEC2インスタンスをローリングアップデート(徐々に置き換え)したいです。

CloudFormationテンプレート

使用したテンプレートはこちらです。

チュートリアル: スケールおよび負荷分散されたアプリケーションを作成するのフルスタックテンプレートから不要なキーペアなどを削除しています。

AutoScalingGroupに設定しているUpdatePolicyによって、起動テンプレート変更してスタックを更新する際に、EC2インスタンスの置換をしてくれています。
AutoScalingRollingUpdateを指定すると、ローリングアップデートをしてくれます。
MaxBatchSizeは1回で置き換えるEC2インスタンスの数、MinInstancesInServiceがInServiceに残しておくEC2インスタンスの数です。

AMI

AMIがアップデートされるシナリオとしてAMIを2つ(Version A, B)用意しました。
両方ともApache Webサーバーをインストールして自動起動にしています。
index.htmlにはVersion A、Varsion BBBの文字がそれぞれ表示されるようにしています。
CloudFormationスタック作成時にパラメータでAMI IDを指定するようにしました。

初回スタック作成

Version AのAMIを指定しました。
VPCはDefault、サブネットはパブリックサブネットを2つ選択しました。

Application Load BalancerのDNSにブラウザでアクセスしたらAMI Version Aから起動したEC2インスタンスへアクセスできました。

オートスケーリンググループには起動テンプレートバージョン1で2つのインスタンスが起動しています。

変更セット作成

新しいAMIを作成して置き換えるシナリオで、CloudFormationスタックを更新します。
まず変更セットを作成します。

スタックアクションから[既存スタックの変更セットを作成]を選択しました。

テンプレートは既存のテンプレートを選択しました。

パラメータでAMI IDにVarsion BのAMIを指定しました。
それ以外はそのままの値を使用しました。

変更セットが作成されて、起動テンプレートが変更されることがわかりました。
2024/4/16のアップデートAWS CloudFormation の ChangeSets でデプロイメントの変更の可視性が向上により、[詳細を表示]リンクがあるので見てみました。

ImageIDが変更対象になっていることがわかりました。

変更セットを実行

[変更セットを実行]ボタンを押下しました。

起動テンプレートバージョン1のインスタンスが2つ残った状態でバージョン2のインスタンスが起動してきました。

バージョン2のインスタンスが正常にIn Serviceになると、バージョン1の1インスタンスがTerminatingになりました。

次にさらに1つのバージョン2のインスタンスが起動してきました。

新しいインスタンスがIn Serviceになったので、残りのバージョン1インスタンスもTerminatingになりました。

バージョン2のインスタンスのみに置き換わりました。

ブラウザからApplication Load Balancerにアクセスしても新バージョンに変わっていることがわかりました。


最後までお読みいただきましてありがとうございました!

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。

 - AWS , ,

  関連記事

Systems Manager デフォルトのホスト管理設定(Default Host Management Configuration)を確認しました

2023/2/17のアップデートAWS Systems Manager をアカウ …

kintoneでEveryoneに権限が設定されているアプリをAWS Lambdaで一括チェックする

こないだ、kintone Cafeでユーザーが自由に作成している環境だと、どんな …

S3イベントのAWS Lambdaのテスト設定

S3イベントのLambda関数でよく使うのはこんなテスト設定です。 なので覚書で …

ハンズオン目的アカウントに設定しているSCPポリシー

AWS Organizationsでハンズオン目的のアカウントに設定しているSC …

AWS DeepLens開封の儀

去年(2019年)7月にamazon.co.jpでDeepLens買えますやんっ …

AWS Service CatalogポートフォリオをOrganizations組織で共有する

AWS Service Catalogチュートリアルで作成したポートフォリオのO …

S3バケットのデフォルト暗号化はデフォルトだったことを確認しました

S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …

Systems Manager パブリックパラメータCLIでAWSのサービス数を出力してみました(2020/5/26)

先日のAWSのサービス数を数えてみました(2020/5/23)を見られて、お師匠 …

名前解決してセッションマネージャが使えるようにVyOSのhost_name.pyを編集しました

発生したエラー セッションマネージャからこんなエラーが出力されました。 [cra …

AWS Organizations EC2宣言型ポリシーを設定する

2024/12/1に発表されましたOrganizationsの宣言型ポリシーを設 …