ヤマムギ

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 , ,

  関連記事

Amazon Location Service入門ワークショップ-トラッカー

トラッカーでデバイスの位置や移動履歴を追跡できます。 関連記事 Amazon L …

既存のAWSアカウントをAWS Control Towerに追加

Account Factoryからは既存アカウントは追加できない? AWS Co …

Amazon S3オブジェクトロック

S3のオブジェクトロックを確認しました。 オブジェクトロックの有効化 現在、既存 …

AWS Certificate Manager証明書とAmazon Route 53でAmazon API GatewayのAPIのカスタムドメイン名前解決する

AWS Certificate ManagerとAmazon Route 53と …

iPad ProのWorking CopyでAWS CodeCommitのリポジトリを使う

iPad Proを導入しましたので、原稿執筆や校正でフル活用しようと思いまして。 …

Route53でドメインを新規取得してDNSレコードを設定する

Elastic IPをAWSで発行しているのですから、DNSの設定も同じようにマ …

AWS License ManagerでAMIからインスタンスの起動を制御

EC2 Image BuilderでRocket.ChatのAMIを作って起動テ …

S3バケットポリシーでクロスアカウントのPrincipalについて確認

確認したこと ドキュメントではこちらで確認しました。 AWS JSON ポリシー …

Amazon SES(Simple Email Service)でメール受信時のアクションでLambdaを実行して渡されるデータを見てみる

Amazon SESで受信したメールをS3に保存して、S3のトリガーでLambd …

VPN接続先のADで管理されているドメインにEC2 Windowsインスタンスから参加する

オンプレミスに見立てたオハイオリージョンにVyOSインスタンスを起動して東京リー …