ヤマムギ

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認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

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

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

 - AWS , ,

ad

ad

  関連記事

Amazon Linux2(EC2)にEC-CUBE 4をインストール

こちらのHOMEお知らせ・コラムAmazon Linux2にEC-CUBE4.0 …

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト – プロフェッショナル」を執筆しました

「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテク …

CloudFormationドリフト検出

CloudFormationスタックのドリフト検出を確認しました。 CloudF …

AWS Summit 2017 Tokyo Day2 開場~基調講演

昨年に引き続き今年もAWS Summit Tokyoへ行ってきました。 朝一の新 …

slackのbotをAWS Lambda(Python)+API Gatewayで構築

slackで投稿した内容に応じて返信したり調べ物したりしてくれるbotですが、こ …

AWS Storage Gateway File Gateway on EC2インスタンスにmacOSからNFS接続

S3バケットの作成 S3バケットはあらかじめ作成しておきました。 マネジメントコ …

AWSアカウント ルートユーザーのMFAが使えなくなったので復旧

AWSのルートユーザーどころか、MFAが使えるログインすべてが使えなくなって焦り …

Amazon Linux にnodejsとmongoDBをインストールする

EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …

AWS Systems Manager Fleet Manager Windows RDP Connectを試してみました

AWS Systems Manager Fleet Manager Window …

CloudFront用のAWS管理プレフィックスリストを使用しました

このブログでは、CloudFrontのカスタムヘッダーとALBのルーティングを組 …