社内の初心者向けAWS勉強会で実施している最初のテーマ「LAMP環境を構築しよう」において、動作しているEC2に対して、死んでも甦るようにしたり、簡単な設定で同じ内容のEC2を複数起動させたりする設定についての手順。
というよりは機能のメモ。
(以下、設定したゴールに対する構築手順になっていないので、Auto Scaling + ELBの構成で別途まとめるつもり → AWS勉強会(4) / ELB + AutoScalingグループでwebサーバ)
設定するものは以下の2項目
項目 | 概要 |
---|---|
起動設定 | Auto Scalingで起動するEC2自体の設定(AMIやインスタンスタイプ、ユーザーデータなど)を定義 |
Auto Scalingグループ | 起動設定に対して、どのネットワーク(VPCやサブネット)で起動させるのか、起動するインスタンス数、ヘルスチェックの方式やELB連携などを定義 |
簡単に説明するとこんな感じ。
「起動設定」で定義した内容のEC2が「Auto Scalingグループ」で設定したルール(VPCやサブネット/AZ、インスタンス数など)に従って起動したり削除される、というもの。
(現在、起動設定にかわる「起動テンプレート」が利用できるようになっている。ただし、ここではまだ扱わない)
起動設定
まず、Auto Scalingグループで管理するEC2自体の設定を行う。(Auto Scalingグループのメニューからも作成できる)
基本的にはEC2の作成と同じ流れ。
AMIの選択
Amazon提供のAMIだけでなく、自分で作成したスナップショットをベースにすることもできる
詳細設定
名称は「どんな内容のEC2か」を基準につければOK
高度な詳細
ユーザーデータの入力はここ。
下記は例として、起動時にhttpdをインストールしておくために設定。
詳細はAWS勉強会(補足1) / ユーザーデータでEC2作成時の初期設定を行うを参照。
もう一つ重要なのが、IPアドレスの設定。
デフォルトのVPC以外のネットワーク設定の場合(例えば勉強会用に改めて作成したVPC、など)、デフォルト設定だとパブリックIPアドレスが割り当てられない。
グローバルIPが必要な場合は、明示的に「パブリックIPアドレスを各インスタンスに割り当てます」を選択する。
(※ どのVPCを使うかの設定は、ここで作成している起動設定でなく、後述のAuto Scalingグループの設定で行う)
あとはストレージとセキュリティグループの設定を行う。
EC2の作成と異なり、VPCやサブネットの設定はここでは行わないため、作成済みのすべてのセキュリティグループが選択肢に出てくるので、Auto Scalingグループで指定するVPCと異なるセキュリティグループを選ばないように注意。
Auto Scalingグループ
Auto Scalingグループの作成
「Auto Scalingグループの作成」押下すると、簡単な説明が表示されるので「今すぐ始める」押下
Auto Scalingグループの作成を始める。
起動設定の選択
作成した起動設定を選択する。
詳細設定
Auto Scaling対象のEC2を、どのネットワークで起動するか等を設定する。
サブネットは複数選択することができる。
複数のサブネットを選択しておくことで、複数のAZにEC2を起動させることができ、可用性を高める構成にすることができる。
ちなみにここは不親切なことに、サブネットのName
タグが表示されなくて、どれがどのサブネットかわかりづらいので注意(アドレスとAZで判断するしかない?)
高度な詳細
ここでは作成済みのELBがあればロードバランサと連携させる設定もできる。
(今回は簡単に紹介するだけ。そのうち「Auto Scaling + ELB設定」の構成をやる)
ロードバランシングの設定
作成済みのELBを選択できる
ヘルスチェックのタイプ
チェックのタイプ | 動作 |
---|---|
EC2(デフォルト) | EC2自体のステータスチェックの結果で死活判定(要はVMが生きているか) |
ELB | 上記のEC2チェック+ELBのヘルスチェックで死活判定(上記+HTTPのELBであればHTTP的にも死活判定) |
スケーリングポリシーの設定
ここではEC2の負荷状態などで自動でスケーリング(インスタンス数を増減して負荷を分散させる)させるための設定ができる。
設定しない場合は「初期サイズを維持」ですすめる(サイズを手動で変更することはできる)
あと、通知の設定も可能(試してない)
タグの設定
Name
タグを設定しておくと、Auto Scalingグループによって起動したEC2にタグが設定される
起動数を2以上にした場合も、すべて同じタグが設定される
(OpenShiftみたいにランダムなsuffixが付加されて一意な名前になるわけではない模様)
起動
これくらいで作成を実行すると、(デフォルトのままであれば)開始時1インスタンス設定にしたがって、一つのインスタンスが作成される
なんか初回失敗してるみたいだ。。(迷宮入り)
でも一応起動した。
インスタンスの一覧でも確認できる
起動したプライベートサブネットのEC2にアクセスし、httpdがインストール済みの状態か確認
zaki@wensley% ssh -o ProxyCommand='ssh -i ~/.ssh/aws-practice.pem ec2-user@*.*.*.* -W 172.26.20.82:22' -i ~/.ssh/aws-practice.pem ec2-user@172.26.20.82
The authenticity of host '172.26.20.82 (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:dppD5TFrKgMxH18/xgBjzYFqGjCIa4AjUO3aAy1sJCU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.26.20.82' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
2 package(s) needed for security, out of 3 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-26-20-82 ~]$
[ec2-user@ip-172-26-20-82 ~]$
[ec2-user@ip-172-26-20-82 ~]$
[ec2-user@ip-172-26-20-82 ~]$ sudo su -
[root@ip-172-26-20-82 ~]# sudo /etc/init.d/httpd status
httpd is stopped
[root@ip-172-26-20-82 ~]#
※ ユーザーデータにhttpdのインストールのみ記述していたので、webサーバのプロセスは起動はしていない
そのあたりの設定はAWS勉強会(補足1) / ユーザーデータでEC2作成時の初期設定を行うを参照。
で、このEC2は今(複数設定したAZのうちの一つである)ap-northeast-1a
でのみ1台起動している。
スケール数の変更
Auto Scalingグループの一覧の[操作]->[編集]から。
画面下部の詳細部分が編集状態になる
希望するキャパシティを2に変更してみる(その際、最大の値も調整が必要)
[保存]を押下(右上にある)
するとアクティビティ履歴に2つ目のインスタンス起動
インスタンスを確認すると、(複数設定したAZのうちの)もう片側のAZで起動していることが確認できる。
状態としてはこんな感じ。
この状態から
- キャパシティを減らす設定を行う
- 起動しているEC2が1台削除される
- Auto Scalingグループの設定でなく、インスタンス一覧のメニューから、1台削除操作を行う
- キャパシティ1設定の状態での削除処理のため、稼働しているEC2が0であることが検知されると1台新たに起動する
- キャパシティ数を0にすると
- 全部消える
キャパシティ数を0にすると稼働しているEC2は全て消えるが、起動設定は残っているため、再度キャパシティ数を1にすれば、同じ設定でEC2が起動する。
参考