ヤマムギ

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 VPCのAmazonProvidedDNSとほかメモ

VPCユーザーガイドのAmazon DNS について理解するの記載内容について実 …

Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)

Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …

AWS Client VPNの接続ログを確認しました

AWS Client VPNを設定しましたで証明書とかせっかく作ったので、いろい …

AWS Cost Explorerの履歴を38ヶ月とリソース別コストを見られるように設定しました

AWS Cost Explorer がより詳細な履歴データの提供を開始 知らなか …

VyOSにSSMエージェントをインストールしました

VyOSにSSHでログインするのも面倒なので、SSMエージェントをインストールし …

EC2 Amazon Linux 2 にAmazon LinuxからWordPressを移行

このブログを新しいインスタンスに移行することにしました。 2015年5月にAma …

百聞は一見にしかず!AWSセルフペースラボの無料ラボ!

※2019年5月12日現在に試してみた記録です。 AWSセルフペースラボとは A …

Amazon EC2のスクリーンショットとは

ドキュメント見てたらAmazon EC2でスクリーンショットって機能があったので …

AWS LambdaでS3 Select

RDSスナップショットをS3にエクスポートした、Parquetフォーマットのデー …

5分でAlexaスキルを作る

「JAWS-UG Osaka 第22回勉強会 東西の中の人が語る!!! Micr …