本記事は、Oracle Cloud Infrastructure Advent Calendar 2022の Day21 として書いています。
こんにちは、S.yokoyamaです。
今回はインスタンスの自動スケーリング機能を使用したので、手順をまとめました。
概要
アプリケーションの負荷に応じて、リソースを自動で調整することが出来るのが自動スケーリングです。
CPU使用率やメモリの使用量に応じて、設定した値を超えた際にインスタンスを追加で起動し、不要となった時に終了することが出来ます。
ベースになるインスタンスを作成
1.左上のハンバーガーアイコン⇨【コンピュート】⇨【インスタンス】を選択します。

2.【インスタンスの作成】からコンピュート・インスタンスの作成の画面を開いてインスタンスを作成します。

インスタンス・コンフィグレーションの作成
作成したインスタンスからインスタンスの構成を生成します。
1.左上のバーガーアイコン⇨【コンピュート】⇨【インスタンス】を選択し、スケーリング対象のインスタンス詳細画面を表示します。

2.他のアクションを選択し、ドロップダウンから【インスタンス構成の作成】を選択します。

3.【名前】に任意の名前を入力し、【インスタンス構成の作成】を選択するとインスタンス構成が作成されます。

インスタンス・プールの作成
1.作成したインスタンス構成の画面から【インスタンス・プールの作成】を選択します。

2.【インスタンス・プールの作成】画面で、必要な情報を入力します。
①基本的な詳細の追加
・任意の名前
・任意のコンパートメントに作成
・先程作成したインスタンス構成選択
・インスタンス数を0

②プール配置の構成
・可用性ドメインの選択
・任意のフォルト・ドメインを設定
・任意のVCN名を選択
・任意のパブリック・サブネット名かプライベート・サブネットを選択
・ロードバランサのアタッチは今回はチェックは入れない

3.入力内容を確認し、作成ボタンを選択するとインスタンスプールが作成されます。

自動スケーリングの設定
1.作成したインスタンス・プール画面の他のアクションの、ドロップダウンから【自動スケーリング構成の作成】を選択します。

2.【自動スケーリング構成の作成】画面で以下の情報を入力します。
・基本的な詳細の追加
・任意の名前
・任意のコンパートメントを選択
・インスタンス・プールの作成で作成したインスタンス・プール名を選択

・自動スケーリング・ポリシーの構成
・メトリックベースの自動スケーリングを選択
・任意の自動スケーリング・ポリシー名を入力
・クールダウン(秒)は初期値(300)
・パフォーマンス・メトリックはCPU使用率を選択
・スケールアウト・ルール(※ここではCPU使用率のしきい値が70%を超えた際インスタンスを追加する)
・スケールイン・ルール(※ここではCPU使用率のしきい値が30%未満になった際インスタンスを削除する)
・スケーリング制限(※ここでは初期、最小、最大のインスタンス数を設定出来る)
・確認


入力内容を確認し、作成ボタンを選択すると自動スケーリング構成が作成されます。

自動スケーリング構成画面から、インスタンス・プール名のリンクを選択し、インスタンス・プールの画面を表示します。
スケーリング制限でインスタンスの初期数を1と設定したので初期インスタンス数は1、最小インスタンス数を1に設定した為、自動的に1つのインスタンスがプロビジョニングされていることが分かります。

CPUに負荷をかけてインスタンスの増減を確認
起動してきたインスタンスにCPU負荷をかけ、CPU使用率が閾値70%を上回るように設定し、実際にインスタンスが1つ増えるかどうかを確認する。また、インスタンスの増加が確認出来たら、負荷を止めCPU使用率を閾値30%未満にし、インスタンスが1つ減る様子を確認します。
1.インスタンス・プール画面の作成済みインスタンスのリスト上で、作成されたインスタンスのステータスが実行中となったらインスタンスの起動が完了します。インスタンスの名前のリンクを選択して作成されたインスタンスの情報を表示します。

2.インスタンスの情報画面からパブリックIPを確認し、このIPアドレスを使用しTermiusなどのターミナルからssh接続します。
3.インスタンスのCPU負荷をかける為、Linuxのstressコマンドで負荷をかけます。
stressパッケージをインストールする準備をするため、stressパッケーシを含むEPELリポジトリが有効になっているか以下のコマンドで確認します。
sudo yum repolist all | grep -i epel
今回はOracleLinux8のイメージで作成したインスタンスなので図のように「ol8_developer_EPEL」リポジトリが表示されます。ステータスが非有効(「disabled」)になっている場合はyum-config-managerコマンドで有効(「enabled」)に変更します。

sudo yum-config-manager --enable ol7_developer_EPEL
以下のコマンドを入力し、stressをインストールします。
sudo yum -y install stress
下記のstressコマンドを実行することで、CPU負荷を100%にすることが出来ます。
stress -c 2 &
下記のtopコマンドを実行することで現在のCPU負荷がどれくらいになっているか確認することが出来ます。確認したらCtrl+Cで終了します。

また、OCIコンソールからもCPU使用率を確認します。コンピュート・インスタンスの画面左下にあるリソースメニューから、メトリックを選択します。

設定したクールダウン期間(300秒)が過ぎると、スケーリング動作を確認することができます。再度、作成したインスタンス・プールの画面を表示し、ステータスが【スケーリング中】という状態となり、新規のインスタンスがプロビジョニングされます。

インスタンスの起動が完了し、再びインスタンス・プールのステータスは実行中に戻ります。この時点で、インスタンス・プール内の平均CPU使用率は50%となっているため、これ以上インスタンス数の増加はしません。

次にインスタンスのCPU負荷を下げる。ssh接続したターミナルから以下のコマンドを入力し、プロセスをkillします。CPU使用率は約0%となります。
pkill stress
設定したクールダウン期間(300秒)が過ぎると、自動で1インスタンスが削除されインスタンス・プール内には1インスタンスのみが残ります。

以上がインスタンス・プールの自動スケーリング設定による動作の確認となります。
まとめ
いかがでしたか?今回はインスタンスの自動スケーリング機能を使用し最終的にインスタンスが増減する様子を確認しました。
自動スケーリングはクラウドサービスの魅力とも言える機能ですよね。
今回は、自動スケーリング構成の作成をメトリックベースで実施しましたが、スケジュールベースで構成することも可能です。
興味がある方はそちらも合わせて試してみてはいかがでしょうか。