ヤマムギ

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

  関連記事

EC2 VyOSで/etc/resolv.confを設定しました

EC2でVyOSを起動してSSHで接続して確認していたところ、どうもVyOSから …

RDSインスタンスのストレージをgp2からgp3に変更しました

2022/11/9にRDSでgp3ボリュームが使用できるようになりました。 Am …

Amazon Data Lifecycle Manager(DLM)が東京リージョンで使えるようになったのでLambdaでAMI自動取得から乗り換えた

EBSのスナップショットを自動で作成してくれるAmazon Data Lifec …

Amazon VPCにオンプレミス検証環境想定プライベートDNSサーバー(BIND)をEC2で起動する

オンプレミス想定の検証で使うために、Amazon VPCにプライベート向けDNS …

AWS CodeCommitのリポジトリをiPhoneのWorkingCopyアプリから使う

iPhoneからも執筆できるようにしておこうと思いまして、iOSアプリのGitク …

「AWS認定試験対策 AWS クラウドプラクティショナー」の出版が確定したのでAmazon著者セントラルに登録した

初の執筆本、「AWS認定試験対策 AWS クラウドプラクティショナー」の出版が確 …

AWS CLIでS3マルチパートアップロードを確認

AWS CLI を使用して、Amazon S3 にファイルをマルチパートアップロ …

試そうとしてたらSavings Plans買っちゃいました

Savings Plansの購入画面を確認していました。 画面遷移も確認しようと …

AWS LambdaのSQSへの自前ポーリングをやめてSQSイベントソーストリガーに変更した

以前は、LambdaがSQSからメッセージを受信するには、キューをポーリングして …

CUSTOMINEを使ってkintoneからAWS Lambdaを実行する(Cognito認証付き)

先日の記事「kintoneのカスタマイズ開発を超速にするCUSTOMINE」で書 …