第5回:EC2 AutoScalingを触ってみる¶
- 負荷状況(CloudWatchメトリクスから取得)の値に応じてインスタンス数を自動で調整(スケールアウト/スケールイン)
- どのメトリクスを監視するかはインスタンスで稼働させるアプリケーション次第
- デフォルトで収集されないメトリクスに基づいてスケールしたい場合はAgentソフトウェア(CloudWatchAgent)をEC2インスタンスにインストールする必要がある
- 最新状態のEC2インスタンスのAMI(Amazonマシンイメージ)を事前に作成しておく必要あり
- スケールするまで少なくとも数分はかかるので突発的なスパイクには対応できない
- 1台構成での可用性向上の目的のみでも利用可能(オートヒーリング構成)
参考(ClassMethod社ブログ):オートリカバリーとオートヒーリングの違いを教えてください
<クラウド用語>
スケールアウト:高負荷状態に対応してインスタンスの数を増やすこと
スケールイン:↑の逆
スケールアップ:インスタンスタイプの変更などによって対象のマシン性能(CPU性能、メモリサイズ等)を上げること
スケールダウン:↑の逆
<SAA試験頻出?>
CPU使用率やネットワークIN/OUT、ディクスRead/Write量などのメトリクスはデフォルトで収集される。
メモリやディスクの使用率などは収集されないのでAgentソフトウェア(CloudWatchAgent)のインストールが別途必要。
EC2のメトリクス収集間隔のデフォルトは5分間。オプション(有料)で「詳細モニタリング」を有効にすると1分間隔になる(負荷テスト時になどに有効化)。
インスタンスの利用可能な CloudWatch メトリクスのリスト表示
AutoScaling
AMI
CloudWatchメトリクス
CloudWatch エージェントを使用した Amazon EC2 Instances インスタンスとオンプレミスサーバーからのメトリクスとログの収集
ハンズオン¶
特になんのアプリケーションも稼働させていないEC2インスタンスのAMIを作成し、負荷テスト用のツールでCPU使用率を意図的に高い状態にして自動でスケールアウトさせてみます。
今回は例として、
・最初に起動したEC2インスタンスのCPU使用率が2分間連続で50%を超えるとスケールアウト
・最初に起動したEC2インスタンスのCPU使用率が2分間連続で20%以下でスケールイン
という設定をしてみます。
また、上記の条件を満たしたとしても次のスケーリングアクションを起こすまでのインターバルを120秒空けるようにしてみます。
負荷状態によって0~2台(元のインスタンスを含めると1~3台)の間で自動でスケーリングさせます。
- EC2インスタンスを作成(t2.micro, AmazonLinux2 ※第1回目と同じ手順) EC2インスタンス(AmazonLinux2)へTeraTermで接続してみる
- EC2の"モニタリング"タブ > 「詳細モニタリングを有効化」をONにする ※ 今回はスケールアウトが発生するまでの待ち時間を短くしたいので
- 作成したインスタンスのAMIを作成
- 対象のEC2インスタンスを選択 > アクション > イメージとテンプレート > イメージを作成
- EC2 AutoScalingの「起動設定」を作成
- 任意の名前を入力(ここでは"study2-as-setting")、前の手順で作成したAMIを選択
- インスタンスタイプに"t2.micro"を選択
- SG、キーペアはAMIの元になったEC2インスタンスと同じものを設定
- 作成
- EC2 AutoScalingの「Auto Scaling グループ」を作成
- グループ名に任意の名前を入力(ここでは"study2-as-group")
- 「起動設定に切り替える」リンクから切り替え
- 前の手順で作成した起動設定を選択 > 次へ
- ネットワークでデフォルトの1a、1dのサブネットを選択(ここで選択したAZは適当です)
- ステップ 3:スキップ(省略)
- ステップ 4:希望する容量と最小キャパシティを0に、最大キャパシティを2に
- ステップ 5:スキップ(省略)
- ステップ 6:Nameタグに"study2-auto-scaled"
- 作成
- Auto Scaling グループのポリシー設定(スケールアウト)
- 自動スケーリング > 動的スケーリングポリシー > 「動的スケーリングポリシーを作成」
- シンプルなスケーリング
- スケーリングポリシー名: study2-increase-policy
- CloudWatchアラームを作成する
- メトリクスの選択 > インスタンス別メトリクス > 最初に作成したEC2インスタンスのCPUUtilization > 1分間の平均が50より大きい、データポイント: 2/2 > 次へ > 通知 は削除 > アラーム名: "study2-as-alarm-increase"
- 作成したアラーム"study2-as-alarm-increase"を選択
- アクション: 追加 1 キャパシティユニット
- 別のスケーリングアクティビティを許可するまでの秒数: 120
- Auto Scaling グループのポリシー設定(スケールイン)
- 「動的スケーリングポリシーを作成」
- シンプルなスケーリング
- スケーリングポリシー名: study2-decrease-policy
- CloudWatchアラームを作成する
- メトリクスの選択 > インスタンス別メトリクス > 最初に作成したEC2インスタンスのCPUUtilization > 1分間の平均が20以下、データポイント: 2/2 > 次へ > 通知 は削除 > アラーム名: "study2-as-alarm-decrease"
- 作成したアラーム"study2-as-alarm-decrease"を選択
- アクション: 削除 1 キャパシティユニット
- 別のスケーリングアクティビティを許可するまでの秒数: 120
- TeratermでEC2インスタンスにログイン
- 意図的にCPU負荷を上げるコマンドを実行
yes > /dev/null
- しばし待った後にスケールアウトが発生することを確認する
意図的に負荷を上げるコマンドを停止(Ctrl+C)
しばし待った後にスケールインが発生することを確認する
確認が終わったら各種リソース削除
- AutoScalingグループの削除、起動設定の削除
- CloudWatch Alarmの削除
- EC2インスタンスの終了
- AMIとEBSスナップショットの削除