CPUに負荷をかけてEC2 Auto Scalingを確認してみた

Amazon EC2 Auto Scalingで、CPUに負荷をかけてEC2インスタンスの数が変わることを確認します。
2020.06.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

新卒エンジニアのSongYeongjinです!

今日はAmazon EC2 Auto Scalingをセッティングして、意図的にCPUに負荷をかけて新しいインスタンスが追加される事を確認してみます。

Amazon EC2 Auto Scalingとは?

Amazon EC2 Auto Scalingは負荷を処理するために適切な数のAmazon EC2インスタンスを利用できるように準備することができるようにするサービスです。

Auto Scalingグループと呼ばれるEC2インスタンスの集合を作成して最小数と最大数、希望する容量を指定してインスタンスを何個から何個まで使うのかを決めることができます。

Amazon EC2 Auto Scalingでは、次のようなメリットがあります。

  • 耐障害性の向上
    • インスタンスに異常が発生したタイミングを検出し、インスタンスを終了して、その代わりに新しいインスタンスを起動することができます。複数のアベイラビリティーゾーンを使用するように設定ができます。
  • 可用性の向上
    • 現在のトラフィック需要を処理するための適切な容量を、お使いのアプリケーションに常に持たせるのに役立ちます。
  • コスト管理の強化
    • 必要に応じて動的に処理能力を増減できます。使用するEC2 インスタンスの料金を支払うので、必要なときにインスタンスを起動し、不要な場合は削除することで費用を節約できます。

例えば固定的にインスタンスを立ててでサービスをするとします。日によって需要がバラバラなので必要なCapacityが変わります。

費用を考えて低いCapacityでサービスを提供したら、需要に合わせたサービスの提供が出来なくなります。

その反対に大きくCapacityをい提供したら、余ってしまって費用の浪費になってしまします。

そこでAuto Scalingを適用したら必要なCapacityに合わせて自動にスケーリングして費用の浪費が低いサービスの提供ができます。

より細かいな内容はAmazon EC2 Auto ScalingAmazon EC2 を伸縮自在にする Auto Scaling とはを見てください。

CPU過負荷

LinuxではstressツールまたはyesコマンドでCPUの使用率を意図的に上げてストレステストが可能です。今回はCPUの平均使用率を80%以上にするためにstressを使います。

stressツールとyesコマンドの内容は次のリンクでご確認できます。

【Linux】stressコマンド(負荷テスト・パフォーマンスに最適のコマンド)

【Linux】stressコマンドを使わずに手軽にCPU負荷をかける方法

 

環境

 

今回で使っている環境は次になります。

  • EC2インスタンス : t2.nano
  • AMI : Amazon Linux 2 AMI (HVM), SSD Volume Type
  • Auto Scaling GroupのDesired Capacity, Min, Max : 1, 1, 4
  • スケーリングポリシー : CPUの平均使用率を80に維持するために必要な場合
  • インスタンス必要時間 : スケーリング後にウォームアップする時間300秒数

実習

Auto Scaling グループを上の環境のように作成しました。今はt2.nanoのインスタンスが1つ立てています。

 

Linuxの状態も環境と同じです一つのプロセッサーで出来ているのを見ることができます。

今はCPUをほとんど使ってない状況です。ここでstressで負荷をかけます。

-cオプションはCPUに負荷をかけるプロセスの数を決めることができます。 stressツールをバックグラウンドで実行してtopのコマンドでCPUの使用率を確認します。

80%を超えた事が確認できます。

スケーリングポリシーにしたがって新しいインスタンスが立てられます。

結果実行中のインスタンスが最大の4台に増えたことが確認でしました。

stressツールを終了したら、CPU使用率が下がっていらなくなったインスタンスが自動で終了することも確認できました。

まとめ

Amazon EC2 Auto Scalingを使ってEC2インスタンスの数がが必要なだけ調整することをストレステストツールのstressでCPUに負荷をかけて確認してみました。今回ではただインスタンスが増えたことだけを確認しましたけどElastic Load Balancingを使って集中されているトラフィックを分散させることもできます。次にはそのところをブログに書こうと思いますので、よろしくお願いします!