自動スケーリング
自動スケーリングでは、インスタンス・プール内のコンピュート・インスタンスの数またはライフサイクル状態を自動的に調整できます。これによって、需要が多い期間にエンド・ユーザーに一貫したパフォーマンスを提供し、需要が少ない期間にコストを削減することができます。
次のタイプの自動スケーリングをインスタンス・プールに適用できます:
- メトリックベースの自動スケーリング:パフォーマンス・メトリックのしきい値を超えると、自動スケーリング・アクションがトリガーされます。
- スケジュールベースの自動スケーリング:自動スケーリング・イベントは、スケジュールした特定の時間に実行されます。
自動スケーリングは、標準、Dense I/OおよびGPUシェイプを使用する仮想マシン(VM)およびベア・メタルのインスタンス・プールでサポートされています。
自動スケーリングでは、次のタスクを実行できます。
自動スケーリングの仕組み: 基本
自動スケーリング構成を使用して、インスタンス・プールのサイズおよびライフサイクル状態を自動的に管理します。自動スケーリングによってインスタンス・プール内のインスタンスが自動的にプロビジョニングされると、プールはスケール・アウトされます。自動スケーリングによってプールからインスタンスが削除されると、プールはスケール・インされます。自動スケーリングを使用して、スケジュールに基づいて、インスタンス・プール内のインスタンスを停止および起動することもできます。
インスタンス・プールがスケール・インされると、インスタンスは終了(削除)されます。インスタンスは次の順序で終了されます: インスタンスの数は可用性ドメイン間で調整されてから、フォルト・ドメイン間で調整されます。最後に、フォルト・ドメイン内の一番古いインスタンスが最初に終了されます。
自動スケーリング構成には、1つ以上の自動スケーリング・ポリシーが含まれます。これらのポリシーでは、自動スケーリング・アクションをトリガーする基準と、実行するアクションを定義します。各自動スケーリング構成には、1つのメトリックベースの自動スケーリング・ポリシーまたは複数のスケジュールベースの自動スケーリング・ポリシーを指定できます。自動スケーリング構成には、最大50のスケジュールベースの自動スケーリング・ポリシーを追加できます。
各インスタンス・プールに設定できる自動スケーリング構成は1つのみです。
メトリックベースの自動スケーリング
プールのスケーリング後は、インスタンスの初期数に割り当てられた値を変更しないでください。プール・サイズのインスタンス数が増加した後にこの値を小さくすると、プール内のインスタンスが終了します。この値を変更する必要がある場合、新しい値は現在プール内にあるインスタンスの数以上である必要があります。
メトリックベースの自動スケーリングは、CPU使用率など、モニタリング・サービスによって収集されるパフォーマンス・メトリックに依存します。これらのパフォーマンス・メトリックは、1分ごとに集計されてから、インスタンス・プールのインスタンス全体で平均化されます。連続する3つの値(つまり、連続する3分間の平均メトリック)がしきい値を満たすと、自動スケーリング・イベントがトリガーされます。
メトリックベースの自動スケーリング・イベントの間のクールダウン期間には、更新されたレベルでシステムが安定化します。クールダウン期間が開始するのは、インスタンス・プールが「実行中」の状態になったときです。自動スケーリングは、クールダウン期間中もパフォーマンス・メトリックの評価を続けます。クールダウン期間が終了すると、自動スケーリングにより、必要に応じてインスタンス・プールのサイズが再調整されます。
スケジュールベースの自動スケーリング
スケジュール・ベースの自動スケーリングを使用して、要求に基づいてプール・サイズをスケーリングしたり、スケジュールに従ってインスタンスを停止および起動できます。
スケジュールベースの自動スケーリングは、月、日または時刻などのスケジュールに基づいて需要が予測どおりに変動するインスタンス・プールに最適です。スケジュールは、繰り返すことも、1回のみ実行することもできます。例:
- インスタンス・プールは営業時間中に大量に使用されます。プールの使用量は夜と週末には減ります。平日の朝にスケール・アウトし、平日の夜にスケール・インするようにプールをスケジュールできます。
- インスタンス・プールは大みそかに需要が高まります。毎年12月30日にスケール・アウトし、1月2日にスケール・インするようにプールをスケジュールできます。
- インスタンス・プールで実行される新しいアプリケーションをリリースしようとしています。多くのユーザーがお知らせの公開後にアプリケーションの使用を開始することが予想されます。事前に、プール内のインスタンスをリリース日に起動するようにスケジュールできます。
スケジュールベースの自動スケーリング構成には、それぞれ異なるスケジュールおよびターゲット・プール・サイズまたはライフサイクル・アクションを持つ複数の自動スケーリング・ポリシーを含めることができます。スケール・イン・イベントおよびスケール・アウト・イベントを構成するには、少なくとも2つの個別のポリシーを作成する必要があります。一方のポリシーではスケール・インのためのターゲット・プール・サイズおよびスケジュールを定義し、もう一方のポリシーではスケール・アウトのためのターゲット・プール・サイズおよびスケジュールを定義します。同様に、停止イベントおよび起動イベントをスケジュールする場合は、少なくとも2つの個別のポリシーを作成する必要があります。一方のポリシーではインスタンスを停止するためのライフサイクル・アクションおよびスケジュールを定義し、もう一方のポリシーではインスタンスを起動するためのライフサイクル・アクションおよびスケジュールを定義します。
スケジュールベースの自動スケーリング・ポリシーが実行された後、インスタンス・プールは、別の自動スケーリング・ポリシーなどによってプール・サイズまたはライフサイクル状態が変更されるまで、ターゲット・プール・サイズまたはライフサイクル状態のままです。ただし、プール・サイズまたはライフサイクル状態を手動で変更した場合、スケジュールベースの自動スケーリングでは、次にスケジュールされた自動スケーリング・ポリシーが実行されるまでプール・サイズまたはライフサイクル状態は再調整されません。
スケジュール・ベースの自動スケーリングを使用してインスタンスを停止または再起動する場合、インスタンスに関する情報は保持されます。停止後にインスタンスが起動されると、停止が発生する前の状態に戻ります。
cron式を使用して自動スケーリング・スケジュールを定義します。自動スケーリングはQuartz cron実装を使用します。オンラインのcron式ジェネレータを使用してcron式を検証できます。FREEFORMATTERはその一例です。
すべての時間をUTCで指定してください。
スケジュールベースの自動スケーリング構成には、コンソールおよびAPI、SDK、CLIの使用時に表示されるクールダウン期間の属性が含まれます。ただし、クールダウン期間はスケジュールベースの自動スケーリング構成には影響しません。
複数のスケジュール管理
スケジュール・ベースの自動スケーリング・ポリシーが複数存在する場合、スケジュールが競合する可能性があります。競合が発生した場合、Oracleは実行するライフサイクル状態ポリシーと自動スケーリング・ポリシーを選択します。ライフサイクル状態ポリシーが最初に実行されます。
ライフサイクル状態ポリシーには、アクションの優先度が最も高いポリシーが選択されます。アクションは次のように優先度が付けられ、優先度が高いものから低いものの順にリストされます:
- 強制再起動
- 再起動
- 起動
- フォース・ストップ
- 中止
自動スケーリング・ポリシーには、インスタンス数が最も多いポリシーが選択されます。
自動スケーリング・スケジュールが将来のプール・サイズにどのように影響すると予想されるかを確認するには、プール・サイズの予測を表示します。
Cron式について
cron式は、時間や曜日など、スケジュールの様々な部分を表す6つまたは7つのフィールドで構成される文字列です。cron式は次のフォーマットを使用します:
<second> <minute> <hour> <day of month> <month> <day of week> <year>
次の表に、各フィールドで使用できる値と特殊文字を示します。
フィールド | 使用できる値 | 使用できる特殊文字 |
---|---|---|
秒 |
0 ノート: 自動スケーリングにAPI、CLIまたはSDKを使用する場合、他の値によって有効なcron式が作成されるときでも、秒の値として0を指定する必要があります。コンソールを使用する場合、秒の値を指定する必要はありません。 |
なし |
分 | 0-59 | * - , / |
時間 | 0-23 | * - , / |
該当月の日 | 1-31 | * - , ? / L W |
月 | 1-12またはJAN-DEC | * - , / |
曜日 | 1-7またはSUN-SAT | * - , ? / L # |
年 | 1970-2099 | * - , / |
次の表で、特殊文字について説明します。
特殊文字 | 説明 | 例 |
---|---|---|
* | フィールドのすべての値を示します。 | 月フィールドの*は、毎月を意味します。 |
- | 値の範囲を示します。 | 時間フィールドの8-17は、8時から17時(午前8時から午後5時)を意味します。 |
, | 複数の値を示します。 | 曜日フィールドの3,5は、火曜日と木曜日を意味します。 |
? |
特定の値がないことを示します。 月の日を指定する場合、曜日フィールドで?を使用します。 曜日を指定する場合、月の日フィールドで?を使用します。 |
0 0 10 ? * MON *は、毎週月曜日の午前10時を意味します。 |
/ | n/mを使用して増分を示します。スラッシュの前の値が開始時間で、スラッシュの後の値が増分値です。 | 分フィールドの0/20は、0、20、40分を意味します。 |
L |
週の最終日または月の最終日。 曜日フィールドでxLを使用して、月の最後のx曜日を示します。 月の日フィールドでL-nを使用して、月の最終日からn日前の日を示します。 複数の値または値の範囲でLを使用しないでください。 |
月の日フィールドのLは、1月31日、2月28日(うるう年以外)などを意味します。 曜日フィールドの6Lは、月の最終金曜日を意味します。 L-5は、月の最終日の5日前を意味します。 |
W |
指定された日に最も近い平日(月曜日から金曜日)。 値が月をまたぐことはありません。 月の日付フィールドでLとWの文字(LW)を組み合せて、その月の最後の平日を指定できます。 複数の値または値の範囲でWを使用しないでください。 |
10Wは、月の10日に最も近い平日を意味します。10日が土曜日の場合、9日の金曜日を意味します。10日が日曜日の場合、11日の月曜日を意味します。10日が水曜日の場合、10日の水曜日を意味します。 |
# | x#nを使用して、月のn番目のx曜日を示します。 | 5#2は、月の第2木曜日を意味します。 |
Cron式の例
これらのcron式の例を開始ポイントとして使用して、独自の自動スケーリング・スケジュールを作成してください。各cron式をターゲット・プール・サイズと組み合せて、自動スケーリング・ポリシーを作成します。次に、自動スケーリング構成に1つ以上の自動スケーリング・ポリシーを含めます。
目標: スケーリング・イベントが1つのみの1回かぎりのスケジュール。2020年12月31日の午後11時に、インスタンス・プールを100インスタンスにスケーリングします。1つの自動スケーリング・ポリシーが必要です。
-
ポリシー1:
- ターゲット・プール・サイズ: 100インスタンス
- 実行時間: 2020年12月31日の午後11時
- Cron式: 0 0 23 31 12 ? 2020
目標: スケール・アウト・イベントおよびスケール・イン・イベントを含む1回かぎりのスケジュール。2021年3月1日の午前10時に、75インスタンスにスケール・アウトします。2021年3月7日の午後4時に、30インスタンスにスケール・インします。2つの自動スケーリング・ポリシーが必要です。
-
ポリシー1 - スケール・アウト:
- ターゲット・プール・サイズ: 75インスタンス
- 実行時間: 2021年3月1日の午前10時
- Cron式: 0 0 10 1 3 ? 2021
-
ポリシー2 - スケール・イン:
- ターゲット・プール・サイズ: 30インスタンス
- 実行時間: 2021年3月7日の午後4時
- Cron式: 0 0 16 7 3 ? 2021
目標: 繰返しの日次スケジュール。平日の朝午前8時30分に、10インスタンスにスケール・アウトします。平日の夜午後6時に、2インスタンスにスケール・インします。2つの自動スケーリング・ポリシーが必要です。
-
ポリシー1 - 朝のスケール・アウト:
- ターゲット・プール・サイズ: 10インスタンス
- 実行時間: 毎年毎月の毎週月曜日から金曜日の午前8時30分
- Cron式: 0 30 8 ? * MON-FRI *
-
ポリシー2 - 夜のスケール・イン:
- ターゲット・プール・サイズ: 2インスタンス
- 実行時間: 毎年毎月の毎週月曜日から金曜日の午後6時
- Cron式: 0 18 ? * MON-FRI *
目標: 繰返しの週次スケジュール。火曜日と木曜日に、プールを30インスタンスにスケーリングします。他のすべての曜日では、プールを20インスタンスにスケーリングします。2つの自動スケーリング・ポリシーが必要です。
-
ポリシー1 - 火曜日と木曜日:
- ターゲット・プール・サイズ: 30インスタンス
- 実行時間: 毎年毎月の毎週火曜日と木曜日の午前1時
- Cron式: 0 0 1 ? * TUE,THU *
-
ポリシー2 - 他のすべての日:
- ターゲット・プール・サイズ: 20インスタンス
- 実行時間: 毎年毎月の日曜日、月曜日、水曜日、金曜日、土曜日の午前1時
- Cron式: 0 0 1 ? * SUN-MON,WED,FRI-SAT *
目標: 繰返しの月次スケジュール。月のすべての日に、プール・サイズを20インスタンスに設定します。月の15日に、40インスタンスにスケール・アウトします。2つの自動スケーリング・ポリシーが必要です。
-
ポリシー1 - 日次プール・サイズ:
- ターゲット・プール・サイズ: 20インスタンス
- 実行時間: 毎年毎月の毎日午前0時
- Cron式: 0 0 0 * ? *
-
ポリシー2 - スケール・アウト:
- ターゲット・プール・サイズ: 40インスタンス
- 実行時間: 毎年毎月の15日の午前0時5分
- Cron式: 0 5 0 0 15 * ? *
必要なIAMポリシー
Oracle Cloud Infrastructureを使用するには、管理者が、テナンシ管理者がポリシーでセキュリティ・アクセス権を付与したグループのメンバーである必要があります。コンソールまたは(SDK、CLIまたはその他のツールを使用した) REST APIのどれを使用しているかにかかわらず、このアクセス権が必要です。権限がない、または認可されていないというメッセージが表示された場合は、テナンシ管理者に、どのタイプのアクセス権があり、どのコンパートメントでアクセスが作業する必要があるかを管理者に確認してください。
管理者向け: 自動スケーリングの構成へのアクセス権を付与する一般的なポリシーは、コンピュートの自動スケーリング構成をユーザーに管理させるを参照してください。
リソースのタグ付け
リソースにタグを適用すると、ビジネス・ニーズに応じた整理に役立ちます。リソースの作成時にタグを適用できます。また、後でリソースを更新して、タグを追加、改訂または削除できます。タグ適用についての一般情報は、リソース・タグを参照してください。
自動スケーリングの要件
- インスタンス・プールがあります。オプションで、インスタンス・プールにロード・バランサまたはネットワーク・ロード・バランサをアタッチできます。
- メトリックベースの自動スケーリングの場合、インスタンス・プールのインスタンスでモニタリングが有効化されており、インスタンスによって出力されるメトリックをモニタリング・サービスが受信しています。モニタリングをサポートするインスタンスを使用して最初にインスタンス・プールを作成すると、プールのインスタンス構成の設定に関係なく、デフォルトでモニタリングが有効になります。
- スケーリングするインスタンスの最大数を作成するのに十分なサービス制限があります。