スケジュールに基づくスケーリング


スケジュールに基づく自動スケーリングでは、予想される負荷に対する容量を事前にスケジューリングすることで、ワークロードの可用性を向上させることができます。マネージド インスタンス グループ(MIG)でワークロードを実行する場合、繰り返しの負荷パターンや 1 回限りのイベントに対して必要な数の仮想マシン(VM)インスタンスをスケジューリングできます。ワークロードの初期化に時間がかかり、予想される負荷の急増が発生する前にスケールアウトする場合は、スケーリング スケジュールを使用します。

このドキュメントでは、既存の MIG のスケーリング スケジュールの作成、一覧表示、編集、無効化、再有効化、削除を行う方法について説明します。MIG と自動スケーリングの詳細については、マネージド インスタンス グループの作成インスタンス グループの自動スケーリングをご覧ください。

準備

  • オートスケーラーの基礎知識を確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    Terraform

    このページの Terraform サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。

    1. Google Cloud CLI をインストールします。
    2. gcloud CLI を初期化するには:

      gcloud init
    3. Google アカウントのローカル認証情報を作成します。

      gcloud auth application-default login

    詳細については、 ローカル開発環境の認証の設定 をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

制限事項

スケーリング スケジュールには、すべてのオートスケーラーの制限だけでなく、次の制限もあります。

  • MIG ごとに最大 128 個までスケーリング スケジュールを設定できます。この制限を緩和するには、OBSOLETE ステータスのスケーリング スケジュールと、今後実行する予定がないスケジュールを削除します。
  • スケーリング スケジュールの最小期間は 5 分です。

スケーリング スケジュールの作成

MIG あたり最大 128 個までのスケーリング スケジュールを作成できます。詳細については、スケーリング スケジュールの設定をご覧ください。

次の手順では、MIG のスケーリング スケジュールを作成する方法について説明します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストから MIG の名前をクリックします。

  3. [編集] をクリックします。

  4. 自動スケーリング構成が存在しない場合:

    1. [自動スケーリング] で [自動スケーリングを構成] をクリックします。
    2. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択して、自動スケーリングを有効にします。スケジュールのみに基づいて MIG をスケールする場合は、スケジュールを追加した後で、デフォルトの CPU 使用率の指標を削除します。
  5. 追加するスケーリング スケジュールごとに、次の操作を行います。

    1. [自動スケーリングのスケジュール] セクションを開き、[スケジュールを管理] をクリックして、[スケジュールを作成] をクリックします。
    2. [スケーリング スケジュールの作成] ペインで [名前] を入力します。
    3. (省略可)説明を入力します。
    4. このスケジュールが有効な場合に提供される必要最小限のインスタンスの数を入力します。
    5. スケーリング スケジュールの開始時刻と繰り返しを指定するにはデフォルトのインターフェースを使用するか、より複雑な開始時刻と繰り返しでスケジュールを構成する場合は cron 式を使用します。
      • デフォルト インターフェース
        1. [開始時間] フィールドに時刻を入力するか、 をクリックして開始時刻を選択します。
        2. [繰り返し] フィールドで、スケジュールの繰り返しの頻度を選択します。[毎週] または [毎月] を選択する場合は、追加のプルダウン メニューを使用して、スケジュールを開始する曜日または月の何日かを選択します。
      • CRON 式
        1. 有効にするには、[CRON 式を使用] をクリックします。
        2. CRON 式を入力します。
    6. [タイムゾーン] フィールドで、タイムゾーンを選択します。

    7. [期間] フィールドと [時間単位] フィールドに期間を入力し、対応する時間単位を選択します。

    8. [保存] をクリックします。[スケーリング スケジュール] ペインが開きます。

    9. 省略可: [スケジュールの作成] をクリックして、別のスケーリング スケジュールを作成できます。

  6. スケジュールの作成が完了したら、[完了] をクリックします。

  7. [インスタンス グループ] ページを閉じるには、[保存] をクリックします。

gcloud

既存の自動スケーリング ポリシーがない MIG にスケーリング スケジュールを追加するには、gcloud compute instance-groups managed set-autoscaling コマンドを使用します。

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
    [--min-num-replicas=MIN_NUM_REPLICAS] \
    --max-num-replicas=MAX_NUM_REPLICAS \
    --set-schedule=SCHEDULE_NAME \
    --schedule-cron="CRON_EXPRESSION" \
    --schedule-duration-sec=DURATION \
    [--schedule-time-zone="TIME_ZONE"] \
    --schedule-min-required-replicas=MIN_REQ_REPLICAS \
    [--schedule-description="DESCRIPTION"] \
    [--zone=ZONE | --region=REGION]

既存の自動スケーリング ポリシーを使用して MIG にスケーリング スケジュールを追加するには、gcloud compute instance-groups managed update-autoscaling コマンドを使用します。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    [--min-num-replicas=MIN_NUM_REPLICAS] \
    [--max-num-replicas=MAX_NUM_REPLICAS] \
    --set-schedule=SCHEDULE_NAME \
    --schedule-cron="CRON_EXPRESSION" \
    --schedule-duration-sec=DURATION \
    [--schedule-time-zone="TIME_ZONE"] \
    --schedule-min-required-replicas=MIN_REQ_REPLICAS \
    [--schedule-description="DESCRIPTION"] \
    [--zone=ZONE | --region=REGION]

次のように置き換えます。

  • MIG_NAME: 既存の自動スケーリング ポリシーを持つ MIG の名前。
  • MIN_NUM_REPLICAS: 省略可。この MIG に必要なインスタンスの最小数。この値は、スケーリング スケジュールが有効になっていないときに必要なインスタンスの最小数に設定することをおすすめします。この値を 0 に設定し、グループごとに 1 つの時系列でスケジュールまたは Cloud Monitoring 指標を使用して自動スケーリングを構成すると、MIG は 0 個の VM にスケールインできます。個々の VM のデータを必要とする他のシグナル(CPU 使用率など)が存在する場合は、VM を 0 にスケールインすることはできません。
  • MAX_NUM_REPLICAS: この MIG に提供可能なインスタンスの最大数。既存の自動スケーリング ポリシーを持つ MIG の場合はオプションです。
  • SCHEDULE_NAME: 新しいスケーリング スケジュールの名前。
  • CRON_EXPRESSION: このスケジュールの開始時刻と繰り返し。cron 式で表現されます。
  • DURATION: このスケジュールの有効期間(秒)。
  • TIME_ZONE: 省略可。スケジュールの開始時刻の IANA タイムゾーン(例: Europe/Paris)。デフォルト値は UTC です。
  • MIN_REQ_REPLICAS: このスケジュールが有効な場合に提供される必要最小限のインスタンスの数。
  • DESCRIPTION: 省略可。新しいスケーリング スケジュールの説明。
  • ZONE または REGION: 省略可。MIG が配置されているゾーンまたはリージョン。

1 回のみ実行するスケジュールまたは定期的に繰り返すスケジュールを作成できます。

繰り返しスケジュール

次のサンプル コマンドは、定期的に繰り返されるスケジュールを作成します。次のスケジュールでは、月曜日、火曜日、水曜日、木曜日、金曜日の午前 8 時 30 分~午後 5 時(協定世界時、UTC)に、少なくとも 10 個の VM インスタンスが存在しているように MIG に指示しています。このコマンドは、--min-num-replicas フラグと --max-num-replicas フラグも使用し、選択した MIG のすべての自動スケーリング シグナルでインスタンスの最小数を 0、インスタンスの最大数を 30 に更新します。このコマンドは、既存の自動スケーリング ポリシーが設定された example-mig という名前の MIG が存在していることを前提としています。

gcloud compute instance-groups managed update-autoscaling example-mig \
    --min-num-replicas=0 \
    --max-num-replicas=30 \
    --set-schedule=workday-capacity \
    --schedule-cron="30 8 * * Mon-Fri" \
    --schedule-duration-sec=30600 \
    --schedule-min-required-replicas=10 \
    --schedule-description="Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC"

1 回限りのスケジュール

次のサンプル コマンドは、1 回限りのスケジュールを作成します。このスケジュールでは、America/New_York タイムゾーンの 2030 年 1 月 30 日に終日 30 個以上の VM インスタンスが存在しているように MIG に指示しています。このコマンドは、us-east1-bexample-mig という名前の MIG が存在し、自動スケーリング ポリシーが存在していることを前提としています。

gcloud compute instance-groups managed update-autoscaling example-mig \
    --set-schedule=example-onetime-schedule \
    --schedule-cron="0 0 30 1 * 2030" \
    --schedule-duration-sec=86400 \
    --schedule-time-zone="America/New_York" \
    --schedule-min-required-replicas=30 \
    --schedule-description="Schedule a minimum of 30 VMs all day for January 30, 2030" \
    --zone=us-east1-b

Terraform

MIG にスケーリング スケジュールを追加するには、google_compute_autoscaler リソースを使用します。

resource "google_compute_autoscaler" "default" {
  provider = google-beta
  name     = "my-autoscaler"
  zone     = "us-central1-f"
  target   = google_compute_instance_group_manager.default.id

  autoscaling_policy {
    max_replicas    = 5
    min_replicas    = 1
    cooldown_period = 60

    scaling_schedules {
      name                  = "every-weekday-morning"
      description           = "Increase to 2 every weekday at 7AM for 12 hours."
      min_required_replicas = 2
      schedule              = "0 7 * * MON-FRI"
      time_zone             = "America/New_York"
      duration_sec          = 43200
    }
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

REST

MIG のスケーリング スケジュールでオートスケーラーを作成するには、autoscalers.insert メソッド(ゾーン MIG の場合)または regionAutoscalers.insert メソッド(リージョン MIG の場合)を使用します。

既存の自動スケーリング ポリシーがないゾーン MIG のスケジュールを作成するには、次の呼び出しを行います。

POST https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers/

{
  "name": "AUTOSCALER_NAME",
  "target": "https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instanceGroupManagers/MIG_NAME",
  "autoscalingPolicy": {
    "minNumReplicas": MIN_NUM_REPLICAS,
    "maxNumReplicas": MAX_NUM_REPLICAS,
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "minRequiredReplicas": MIN_REQ_REPLICAS,
        "schedule": "CRON_EXPRESSION",
        "timeZone": "TIME_ZONE",
        "durationSec": DURATION,
        "description": "DESCRIPTION"
      },
      ...
    }
  }
}

自動スケーリング ポリシーを持つ MIG のスケジュールを作成するには、autoscalers.patch メソッド(ゾーン MIG の場合)または regionAutoscalers.patch メソッド(リージョン MIG の場合)を使用します。

たとえば、既存の自動スケーリング ポリシーを持つゾーン MIG にスケジュールを作成するには、次の呼び出しを行います。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "minNumReplicas": MIN_NUM_REPLICAS,
    "maxNumReplicas": MAX_NUM_REPLICAS,
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "minRequiredReplicas": MIN_REQ_REPLICAS,
        "schedule": "CRON_EXPRESSION",
        "timeZone": "TIME_ZONE",
        "durationSec": DURATION,
        "description": "DESCRIPTION"
      },
      ...
    }
  }
}

次のように置き換えます。

  • PROJECT: 実際のプロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: 既存のオートスケーラーの名前。多くの場合、これは MIG の名前と同じです。
  • MIN_NUM_REPLICAS: 省略可。この MIG に必要なインスタンスの最小数。この値は、スケーリング スケジュールが有効になっていないときに必要なインスタンスの最小数に設定することをおすすめします。この値を 0 に設定し、グループごとに 1 つの時系列でスケジュールまたは Cloud Monitoring 指標を使用して自動スケーリングを構成すると、MIG は 0 個の VM にスケールインできます。個々の VM のデータを必要とする他のシグナル(CPU 使用率など)が存在する場合は、VM を 0 にスケールインすることはできません。
  • MAX_NUM_REPLICAS: この MIG に提供可能なインスタンスの最大数。既存の自動スケーリング ポリシーを持つ MIG の場合はオプションです。
  • SCHEDULE_NAME: 新しいスケーリング スケジュールの名前。
  • MIN_REQ_REPLICAS: このスケジュールが有効なときに提供される必要最小限のインスタンス
  • CRON_EXPRESSION: このスケジュールの開始時刻と繰り返し。cron 式で表現されます。
  • TIME_ZONE: 省略可。スケジュールの開始時刻の IANA タイムゾーン(例: Europe/Paris)。デフォルト値は UTC です。
  • DURATION: このスケジュールの有効期間(秒)。
  • DESCRIPTION: 省略可。新しいスケーリング スケジュールの説明。

1 回のみ実行するスケジュールまたは定期的に繰り返すスケジュールを作成できます。

繰り返しスケジュール

次のサンプル API 呼び出しは、繰り返されるスケジュールを作成します。次のスケジュールでは、月曜日、火曜日、水曜日、木曜日、金曜日の午前 8 時 30 分~午後 5 時(協定世界時、UTC)に、少なくとも 10 個の VM インスタンスが存在しているようにゾーン MIG に指示しています。この API 呼び出しでは、minNumReplicas フラグと maxNumReplicas フラグも使用し、選択した MIG のすべての自動スケーリング シグナルでインスタンスの最小数を 0、インスタンスの最大数を 30 に更新します。この API 呼び出しは、us-east1-b にあるゾーン MIG に example-project という名前のプロジェクトが存在し、既存の自動スケーリング ポリシーに example-autoscaler という名前のオートスケーラーが設定されていることを前提としています。

PATCH https://www.googleapis.com/compute/v1/projects/example-project/zones/us-east1-b/autoscalers?autoscaler=example-autoscaler

{
  "autoscalingPolicy": {
    "minNumReplicas": 0,
    "maxNumReplicas": 30,
    "scalingSchedules": {
      "workday-capacity": {
        "minRequiredReplicas": 10,
        "schedule": "30 8 * * Mon-Fri",
        "durationSec": 30600,
        "description": "Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC"
      }
    }
  }
}

この例をリージョン MIG で使用する場合は、regionAutoscalers.patch メソッドを使用して同様のリクエストを作成します。その際、ゾーンではなくリージョンを指定します。

1 回限りのスケジュール

次のサンプル API 呼び出しは、1 回限りのスケジュールを作成します。このスケジュールでは、America/New_York タイムゾーンの 2030 年 1 月 30 日に終日 30 個以上の VM インスタンスが存在しているようにゾーン MIG に指示しています。この API 呼び出しは、us-east1-b にあるゾーン MIG に example-project という名前のプロジェクトが存在し、既存の自動スケーリング ポリシーに example-autoscaler という名前のオートスケーラーが設定されていることを前提としています。

PATCH https://www.googleapis.com/compute/v1/projects/example-project/zones/us-east1-b/autoscalers?autoscaler=example-autoscaler

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "example-onetime-schedule": {
        "minRequiredReplicas": 30,
        "schedule": "0 0 30 1 * 2030",
        "timeZone": "America/New_York",
        "durationSec": 86400,
        "description": "Schedule a minimum of 30 VMs all day for January 30, 2030"
      }
    }
  }
}

この例をリージョン MIG で使用する場合は、regionAutoscalers.patch メソッドを使用して同様のリクエストを作成します。その際、ゾーンではなくリージョンを指定します。

複数のスケジュール

次の API 呼び出しの例は、workday-capacityjanuary-30-2030-schedule の 2 つのスケジュールに対して、1 回の呼び出しで autoscalers.patch メソッドを使用しています。この API 呼び出しは、us-east1-b にあるゾーン MIG に example-project という名前のプロジェクトが存在し、既存の自動スケーリング ポリシーに example-autoscaler という名前のオートスケーラーが設定されていることを前提としています。

PATCH https://www.googleapis.com/compute/v1/projects/example-project/zones/us-east1-b/autoscalers?autoscaler=example-autoscaler

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "workday-capacity": {
        "minRequiredReplicas": 10,
        "schedule": "30 8 * * Mon-Fri",
        "durationSec": 30600,
        "description": "Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC"
      },
      "january-30-2030-schedule": {
        "minRequiredReplicas": 30,
        "schedule": "0 0 30 1 * 2030",
        "timeZone": "America/New_York",
        "durationSec": 86400,
        "description": "Schedule a minimum of 30 VMs all day for January 30, 2030"
      }
    }
  }
}

この例をリージョン MIG で使用する場合は、regionAutoscalers.patch メソッドを使用して同様のリクエストを作成します。その際、ゾーンではなくリージョンを指定します。

スケジュールを作成した後、ステータス情報が表示されるまで数分かかる場合があります。

スケーリング スケジュールの一覧表示

MIG のスケジュールのリストを表示できます。この一覧には、各スケジュールの設定ステータス情報が表示されます。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストから MIG の名前をクリックします。

  3. [ 編集] をクリックします。

  4. スケジュールの合計数は、[自動スケーリングのスケジュール] で確認できます。[スケジュールを管理] をクリックして、既存のスケーリング スケジュールのリストを表示します。

完了したら、[完了] をクリックしてリストを閉じます。

gcloud

スケーリング スケジュールの構成やステータスなどの MIG の詳細を取得するには、gcloud compute instance-groups managed describe コマンドを使用します。

gcloud compute instance-groups managed describe MIG_NAME \
    [--zone=ZONE | --region=REGION]

次のように置き換えます。

  • MIG_NAME: 既存の自動スケーリング ポリシーを持つ MIG の名前。
  • ZONE または REGION: 省略可。MIG が配置されているゾーンまたはリージョン。

次の例のように、MIG のスケーリング スケジュールが出力に表示されます。

...
autoscalingPolicy:
  ...
  maxNumReplicas: 30
  minNumReplicas: 0
  ...
  scalingSchedules:
    example-onetime-schedule:
      description: Schedule a minimum of 30 VMs all day for January 30, 2030
      disabled: false
      durationSec: 86400
      minRequiredReplicas: 30
      schedule: 0 0 30 1 * 2030
      timeZone: America/New_York
    workday-capacity:
      description: Have at least 10 VMs every Monday through Friday from 8:30
        AM to 5 PM UTC
      disabled: false
      durationSec: 30600
      minRequiredReplicas: 10
      schedule: 30 8 * * Mon-Fri
      timeZone: UTC
...
scheduledScalingStatus:
    example-onetime-schedule:
        state: READY
        nextStartTime: '2030-01-30T00:00:00.000-05:00'
        lastStartTime: ''
    workday-capacity:
        state: READY
        nextStartTime: '2020-11-04T08:30:00.000-00:00'
        lastStartTime: '2020-11-03T08:30:00.000-00:00'
...

REST

スケーリング スケジュールの構成やステータスなど、オートスケーラーの詳細を取得するには、autoscalers.get メソッド(ゾーン MIG の場合)または regionAutoscalers.get メソッド(リージョン MIG の場合)を使用できます。

たとえば、既存の自動スケーリング ポリシーを持つゾーン MIG のスケジュールを一覧表示するには、次の呼び出しを行います。

GET https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

次のように置き換えます。

  • PROJECT: 実際のプロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: 既存のオートスケーラーの名前。多くの場合、これは MIG の名前と同じです。

次の例のように、MIG のスケーリング スケジュールが出力に表示されます。

{
  ...
  "autoscalingPolicy": {
    ...
    "minNumReplicas": 0,
    "maxNumReplicas": 30,
    ...
    "scalingSchedules": {
      "example-onetime-schedule": {
        "minRequiredReplicas": 30,
        "schedule": "0 0 30 1 * 2030",
        "timeZone": "America/New_York",
        "durationSec": 86400,
        "description": "Schedule a minimum of 30 VMs all day for January 30, 2030",
        "disabled": false
      },
      "workday-capacity": {
        "minRequiredReplicas": 10,
        "schedule": "30 8 * * Mon-Fri",
        "timeZone": "",
        "durationSec": 30600,
        "description": "Have at least 10 VMs every Monday through Friday from 8:30 AM to 5 PM UTC",
        "disabled": false
      },
      ...
    }
  },
  "scheduledScalingStatus": {
    "example-onetime-schedule": {
      "state": "READY",
      "nextStartTime": "2030-01-30T00:00:00.000-05:00",
      "lastStartTime": ''
    },
    "workday-capacity": {
      "state": "READY",
      "nextStartTime": "2020-11-04T08:30:00.000",
      "lastStartTime": "2020-11-03T08:30:00.000"
    },
    ...
  },
...
}

スケーリング スケジュールの編集

既存のスケーリング スケジュールを編集して設定を変更できますが、スケジュールの名前は変更できません。スケーリング スケジュールを無効または再度有効にすることもできます。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストから MIG の名前をクリックします。

  3. [ 編集] をクリックします。

  4. スケジュールの合計数は、[自動スケーリングのスケジュール] で確認できます。[スケジュールを管理] をクリックして、既存のスケーリング スケジュールのリストを表示します。

  5. 編集するスケーリング スケジュールのチェックボックスをオンにします。

  6. [スケーリング スケジュール] ペインの上部で、 [編集] をクリックします。

  7. 新しい [スケーリング スケジュールの編集] ペインで、変更するフィールドを変更します。各フィールドの詳細については、スケーリング スケジュールの作成をご覧ください。

  8. 完了したら、[保存] をクリックします。

変更が有効になるまで、数分かかることがあります。[スケーリング スケジュール] ペインの上部にある [更新] をクリックすると、スケジュールのステータスをモニタリングできます。

完了したら、[完了] をクリックしてリストを閉じます。

gcloud

既存のスケーリング スケジュールを更新するには、gcloud compute instance-groups managed update-autoscaling コマンドを使用します。更新するスケジュールの名前を指定するには、--update-schedule フラグを使用します。必要に応じて他のフラグを含めます。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --update-schedule=SCHEDULE_NAME \
    [--schedule-cron="CRON_EXPRESSION"] \
    [--schedule-duration-sec=DURATION] \
    [--schedule-time-zone="TIME_ZONE"] \
    [--schedule-min-required-replicas=MIN_REQ_REPLICAS] \
    [--schedule-description="DESCRIPTION"] \
    [--zone=ZONE | --region=REGION]

次のように置き換えます。

  • MIG_NAME: 既存のスケーリング スケジュールを含む MIG の名前。
  • SCHEDULE_NAME: 既存のスケーリング スケジュールの名前。
  • CRON_EXPRESSION: 省略可。このスケジュールの開始時刻と繰り返し回数。cron 式で表現します。
  • DURATION: 省略可。このスケジュールが新しい有効期間(秒単位)。
  • TIME_ZONE: 省略可。スケジュールの新しい開始時刻の IANA タイムゾーンEurope/Paris など)。デフォルト値は UTC です。
  • MIN_REQ_REPLICAS: 省略可。このスケジュールが有効なときに提供される新しい必要最小限のインスタンス数。
  • DESCRIPTION: 省略可。スケーリング スケジュールの新しい説明。
  • ZONE または REGION: 省略可。MIG が配置されているゾーンまたはリージョン。

REST

MIG の既存のスケーリング スケジュールを更新するには、autoscalers.patch メソッド(ゾーン MIG の場合)または regionAutoscalers.patch メソッド(リージョン MIG の場合)を使用します。

たとえば、既存の自動スケーリング ポリシーを持つゾーン MIG のスケジュールを編集するには、次の呼び出しを行います。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "minRequiredReplicas": MIN_REQ_REPLICAS,
        "schedule": "CRON_EXPRESSION",
        "timeZone": "TIME_ZONE",
        "durationSec": DURATION,
        "description": "DESCRIPTION"
      },
      ...
    }
  }
}

次のように置き換えます。

  • PROJECT: 実際のプロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: 既存のオートスケーラーの名前。多くの場合、これは MIG の名前と同じです。
  • SCHEDULE_NAME: 既存のスケーリング スケジュールの名前。
  • MIN_REQ_REPLICAS: 省略可。このスケジュールが有効なときに提供される新しい必要最小限のインスタンス数。
  • CRON_EXPRESSION: 省略可。このスケジュールの開始時刻と繰り返し回数。cron 式で表現します。
  • TIME_ZONE: 省略可。スケジュールの新しい開始時刻の IANA タイムゾーンEurope/Paris など)。デフォルト値は UTC です。
  • DURATION: 省略可。このスケジュールが新しい有効期間(秒単位)。
  • DESCRIPTION: 省略可。スケーリング スケジュールの新しい説明。

スケーリング スケジュールの無効化と再有効化

スケーリング スケジュールはデフォルトで有効になっています。スケジュールを有効にせずに構成を保存する必要がある場合は、スケジュールを無効にします。無効にしたスケジュールを再度使用したい場合は、再度有効にします。

スケジュールを保存する必要がない場合や、この MIG でスケジュール数の上限(128 個)に達している場合は、スケジュールを削除します。MIG の自動スケーリングを無効にするには、自動スケーリングをオフにします

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストから MIG の名前をクリックします。

  3. [ 編集] をクリックします。

  4. スケジュールの合計数は、[自動スケーリングのスケジュール] で確認できます。[スケジュールを管理] をクリックして、既存のスケーリング スケジュールのリストを表示します。

  5. 無効または有効にするスケーリング スケジュールのチェックボックスをオンにします。

  6. 選択したスケジュールを無効または有効にします。

    • 選択したスケジュールを無効にするには:
      1. [スケーリング スケジュール] ペインの上部で、 [無効にする] をクリックします。
      2. 新しい [スケジュールを無効にする] ダイアログで、[無効にする] をクリックします。
    • 選択したスケジュールを有効にするには:
      1. [スケーリング スケジュール] ペインの上部で、 [有効にする] をクリックします。
      2. 新しい [スケジュールを有効にする] ダイアログで、[有効にする] をクリックします。

変更が有効になるまで、数分かかることがあります。[スケーリング スケジュール] ペインの上部にある [更新] をクリックすると、スケジュールのステータスをモニタリングできます。

完了したら、[完了] をクリックしてリストを閉じます。

gcloud

スケーリング スケジュールを有効または無効にするには、gcloud compute instance-groups managed update-autoscaling コマンドを使用します。

スケーリング スケジュールの無効化

スケーリング スケジュールを無効にするには、--disable-schedule フラグを使用します。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --disable-schedule=SCHEDULE_NAME \
    [--zone=ZONE | --region=REGION]

次のように置き換えます。

  • MIG_NAME: 既存のスケーリング スケジュールを含む MIG の名前。
  • SCHEDULE_NAME: 無効にするスケーリング スケジュールの名前。
  • ZONE または REGION: 省略可。MIG が配置されているゾーンまたはリージョン。

スケーリング スケジュールの再有効化

スケーリング スケジュールを再度有効にするには、--enable-schedule フラグを使用します。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --enable-schedule=SCHEDULE_NAME \
    [--zone=ZONE | --region=REGION]

次のように置き換えます。

  • MIG_NAME: 既存のスケーリング スケジュールを含む MIG の名前。
  • SCHEDULE_NAME: 再度有効にするスケーリング スケジュールの名前。
  • ZONE または REGION: 省略可。MIG が配置されているゾーンまたはリージョン。

REST

MIG のスケーリング スケジュールを無効または再度有効にするには、autoscalers.patch メソッド(ゾーン MIG の場合)または regionAutoscalers.patch メソッド(リージョン MIG の場合)を使用します。

スケーリング スケジュールの無効化

無効にするスケーリング スケジュールごとに、disabled フィールドに true を設定します。たとえば、既存の自動スケーリング ポリシーを持つゾーン MIG のスケジュールを無効にするには、次の呼び出しを行います。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "disabled": true
      },
      ...
    }
  }
}

次のように置き換えます。

  • PROJECT: 実際のプロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: 既存のオートスケーラーの名前。多くの場合、これは MIG の名前と同じです。
  • SCHEDULE_NAME: 無効にするスケーリング スケジュールの名前。

スケーリング スケジュールの再有効化

再度有効にするスケーリング スケジュールごとに、disabled フィールドに false を設定します。たとえば、既存の自動スケーリング ポリシーを持つゾーン MIG のスケジュールを再度有効にするには、次の呼び出しを行います。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": {
        "disabled": false
      },
      ...
    }
  }
}

次のように置き換えます。

  • PROJECT: 実際のプロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: 既存のオートスケーラーの名前。多くの場合、これは MIG の名前と同じです。
  • SCHEDULE_NAME: 再度有効にするスケーリング スケジュールの名前。

スケーリング スケジュールの削除

スケーリング スケジュールを MIG から削除するには、スケジュールを削除します。不要になったスケジュール(OBSOLETE ステータスのスケジュールなど)を削除します。

自動スケーリング ポリシーには、少なくとも 1 つのスケーリング シグナルが必要です。他の自動スケーリング シグナルが存在しない場合は、自動スケーリング ポリシー全体を削除しない限り、すべてのスケーリング スケジュールを削除できません。すべてのスケーリング スケジュールを削除しても、自動スケーリング ポリシーを維持したい場合は、すべてのスケジュールを削除する前に、少なくとも 1 つのスケーリング シグナルを追加する必要があります。

スケジュールを有効にせず、後で使用するために保存する場合は、スケジュールを無効にします。MIG の自動スケーリング構成を削除する場合は、オートスケーラーを削除します。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストから MIG の名前をクリックします。

  3. [ 編集] をクリックします。

  4. スケジュールの合計数は、[自動スケーリングのスケジュール] で確認できます。[スケジュールを管理] をクリックして、既存のスケーリング スケジュールのリストを表示します。

  5. 削除するスケーリング スケジュールのチェックボックスをオンにします。

  6. [スケーリング スケジュール] ペインの上部で、 [削除] をクリックします。

  7. 新しい [スケジュールの削除] ダイアログで、[削除] をクリックします。

変更が有効になるまで、数分かかることがあります。[スケーリング スケジュール] ペインの上部にある [更新] をクリックすると、スケジュールのステータスをモニタリングできます。

完了したら、[完了] をクリックしてリストを閉じます。

gcloud

スケーリング スケジュールを削除するには、--remove-schedule フラグを指定して gcloud compute instance-groups managed update-autoscaling コマンドを使用します。

gcloud compute instance-groups managed update-autoscaling MIG_NAME \
    --remove-schedule=SCHEDULE_NAME \
    [--zone=ZONE | --region=REGION]

次のように置き換えます。

  • MIG_NAME: 既存のスケーリング スケジュールを含む MIG の名前。
  • SCHEDULE_NAME: 削除するスケーリング スケジュールの名前。
  • ZONE または REGION: 省略可。MIG が配置されているゾーンまたはリージョン。

REST

MIG のスケーリング スケジュールを削除するには、autoscalers.patch メソッド(ゾーン MIG の場合)または regionAutoscalers.patch メソッド(リージョン MIG の場合)を使用します。削除するスケーリング スケジュールごとに、スケジュール構成を null に設定します。

たとえば、既存の自動スケーリング ポリシーを持つゾーン MIG のスケジュールを削除するには、次の呼び出しを行います。

PATCH https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/autoscalers?autoscaler=AUTOSCALER_NAME

{
  "autoscalingPolicy": {
    "scalingSchedules": {
      "SCHEDULE_NAME": null
      ...
    }
  }
}

次のように置き換えます。

  • PROJECT: 実際のプロジェクト ID
  • ZONE: MIG が配置されているゾーン。
  • AUTOSCALER_NAME: 既存のオートスケーラーの名前。多くの場合、これは MIG の名前と同じです。
  • SCHEDULE_NAME: 削除するスケーリング スケジュールの名前。

コンセプト

このセクションでは、スケーリング スケジュールの作成と使用に関連するコンセプト(スケジュールの設定やその仕組みなど)について説明します。

スケーリング スケジュールの設定

MIG のスケーリング スケジュールを作成および変更すると、各スケーリング スケジュールには次の設定が含まれます。

  • 必要最小限のインスタンス: このスケーリング スケジュールが有効な場合に MIG に必要な VM の数。

    このスケジュールが有効な場合、MIG には少なくともこの数の VM の数が存在していますが、他の自動スケーリングの設定によっては、これより多い VM が存在する可能性があります。また、MIG のサイズは、MIG の自動スケーリング設定で構成されたインスタンスの最小数と最大数によって制限されます。

  • タイムゾーン: スケジュールの開始時刻を表すロケーション ベースの IANA タイムゾーン。

    利用可能な値のリストは、IANA タイムゾーン データベースによって定義されます(例: Europe/Paris)。タイムゾーンが指定されていない場合、デフォルトで UTC が使用されます。一部の IANA タイムゾーンでは夏時間が適用されます。夏時間がスケーリング スケジュールに与える影響については、夏時間をご覧ください。

  • 期間: スケーリング スケジュールの有効期間。

    スケーリング スケジュールは構成した開始時刻から開始します。最小期間は 5 分です。この間、オートスケーラーはスケジュールの必要インスタンス数で定義された数以上の VM が存在するように MIG をスケーリングします。指定した期間が経過すると、現在の容量が不要になるため、デフォルトの 10 分間の安定化期間の後に VM インスタンスの削除が開始します。その後は、構成されたスケールインの制御に従います。

    スケーリング スケジュールは双方向です。自動スケーリングのシグナルを指定していない限り、VM は指定した停止時間に削除され、グループサイズは設定した最小グループサイズに縮小されます。

Google Cloud CLI または REST を使用する場合は、cron 式を使用してスケーリング スケジュールの開始時刻と繰り返しを構成する必要があります。ただし、Google Cloud コンソールでは、cron 式または次の設定を使用してスケジュールの開始時刻と繰り返しを構成できます。

  • 開始時刻: スケーリング スケジュールを有効にする時刻。

    開始時刻に、MIG サイズがスケジュールの必要なインスタンスより小さい場合、VM の作成が開始されます。新しい VM の起動と開始に十分な時間を確保するように開始時刻を設定します。たとえば、ワークロードで VM の作成から提供開始までに 10 分かかる場合は、VM の準備を完了しなければならない時刻の 10 分前に開始時間を設定します。

  • 繰り返し: スケーリング スケジュールを繰り返すかどうか、および頻度。次のオプションが定義されています。

    • 1 回限り: 選択した日付にのみ開始される 1 回限りのスケジュール。
    • 毎日: 毎日開始される繰り返しのスケジュール。
    • 毎週: 選択した曜日に毎週開始される繰り返しのスケジュール(毎週月曜日から金曜日など)。
    • 毎月: 月の選択した日にちに毎月開始される繰り返しのスケジュール(毎月 1 日など)。29 日から 31 日までの日にちは、その日にちがある月でのみ有効です。

cron 式

スケーリング スケジュールの開始時刻と繰り返しは、cron 式で構成できます。cron は、元々 Unix のようなオペレーティング システムで使用される時間ベースのジョブ スケジューラです。

構文

cron 式は、空白文字で区切られた 5~6 個のフィールドで構成される文字列です。次の表に、cron 式のフィールドと各フィールドで使用可能な値を示します。

時間 曜日 年(省略可)
0-59 0-23 1-31 1-12(Jan-Dec)

ここで、1=Jan2=Feb、... 12=Dec
0-6(Sun-Sat)または 1-7(Mon-Sun)

ここで 0=Sun1=Mon、.. 6=Sat7=Sun
2000-2036

指定しない場合は *(毎年)が使用されます。

cron 式のすべてのフィールドで、これらの値の他に特殊文字を使用できます。

特殊文字 意味
* 任意 日付、曜日、年のフィールド(使用されている場合)がそれぞれ * に設定されている場合、スケジュールは毎日開始されます。
- 範囲 曜日のフィールドが 1-5 または Mon-Fri に設定されている場合、スケジュールは毎週月曜日から開始し、金曜日に終了します。
, リスト 月のフィールドが 5,7,9 または May,Jul,Sep に設定されている場合、スケジュールは 5 月、7 月、9 月から始まります。
/ ステップ 月のフィールドが */3 に設定されている場合、1 月とその後は 3 か月ごとにスケジュールが開始されます(1 月、4 月、7 月、10 月に実行されます)。

cron 式を記述する場合は、次の点を考慮してください。

  • 空白文字は、cron 式のフィールドを区切るために使用されます。特殊文字を使用するフィールドに余分なスペースを追加しないでください。
  • 曜日と日付の両方(フィールドが * に設定されていない場合)は、共通集合ではなく、これらの値の和集合が使用されます。たとえば、スケジュール 0 8 1 * Mon は、毎週月曜日と毎月 1 日の午前 8 時に開始します。1 日が月曜日の場合にのみ午前 8 時に開始するわけではありません
  • cron 式の各フィールドで 0 個以上の特殊文字を使用できます。たとえば、5 月以外の月からスケジュールを開始する場合は、月のフィールドを 1-4,6-12(空白のない 2 つの範囲のリスト)に設定できます。
  • 範囲(-)を使用する場合、曜日のフィールドに 0-7 または Sun-Sun を使用することはできません。すべての曜日を指定するには、*0-61-7Sun-Sat、または Mon-Sun を使用します。
  • cron 式はステートレスであるため、ステップ(/)を使用する場合、ステップが均一でなくなる可能性があります。たとえば、スケジュールを 6 時間ごとに実行する場合は、時間のフィールドを */6 に設定できます。これは、6 の倍数のリスト(0,6,12,18)と同じように動作します。24 時間は 6 の倍数のため、このステップは均等になります。ただし、時間のフィールドを */7 に設定すると、スケジュールは 7 時間おきに開始するとは限りません。*/7 は、7 の倍数のリスト(0,7,14,21)を指定した場合と同じように動作します。この場合、午前 12 時、午前 7 時、午後 2 時、午後 9 時にスケジュールが開始します。

1 回限りのスケジュールと繰り返しスケジュール

cron 式の記述方法によって、スケジュールが 1 回だけ実行される場合と定期的に繰り返される場合があります。1 回だけ実行されるスケジュールを作成するには、年のフィールドを指定する必要があります。たとえば、cron 式 0 0 30 1 * 2030 は、2030 年 1 月 30 日の深夜 0 時に開始するようにスケジュールを構成します。繰り返されるスケジュールを作成するには、特殊文字を使用してそのスケジュールを繰り返すタイミングを記述します。たとえば、cron 式 30 8 * * Mon-Fri は、毎週月曜日、火曜日、水曜日、木曜日、金曜日の午前 8 時 30 分に開始するようにスケジュールを構成します。

スケジュールのステータス情報

スケーリング スケジュールを一覧表示して、ステータスを確認します。スケーリング スケジュールには次のステータス情報があります。

  • ステータスstate): スケーリング スケジュールの現在のステータス。次のいずれかのステータスで表されます。
    • 準備完了READY): このスケジュールは準備されていますが、まだ有効になっていません。オートスケーラーがこのスケジュールの次回の実行を待機しています。
    • 有効ACTIVE): このスケジュールは現在有効です。オートスケーラーは、このスケジュールで指定された必要最低数以上のインスタンスを MIG に提供しようとしています。
    • 廃止OBSOLETE): このスケジュールは期限切れです。再度有効にすることはできません 今後使用されることがないため、オートスケーラーはこのスケジュールを無視します。
    • 無効DISABLED): このスケジュールは手動で無効になっているため、有効にできません。オートスケーラーは、再度有効になるまでこのスケジュールを無視します。
  • 前回の実行lastStartTime): このスケーリング スケジュールが最後に有効だった時間を表すタイムスタンプ。これは、最後に有効だった実際の日時です。たとえば、毎日に午前 10 時から 2 時間実行されるスケーリング スケジュールを無効にして午前 11 時に再度有効にした場合、lastStartTime 午前 11 時になります。
  • 次回の実行nextStartTime): このスケジュールが次に有効になる時間を表すタイムスタンプ。

スケジュールの重複

開始時間、繰り返し、期間、タイムゾーンによっては、2 つ以上のスケーリング スケジュールが重複することがあります。複数のスケジュールが有効になっている場合、オートスケーラーはすべての有効なスケーリング スケジュールで必要な数の VM インスタンスを使用します。これにより、有効なスケジュールの要件を満たす容量を確保できます。たとえば、毎日午前 8 時から午前 10 時まで実行され、10 台以上の VM を必要とするスケジュールがあり、さらに終日 20 台以上の VM を必要とする 1 回限りのスケジュールがある場合、オートスケーラーはその日に 20 台以上の VM が常に存在するように MIG をスケーリングします。これは、定期的に繰り返す容量要件があるときに 1 回限りのイベントを処理する必要が生じた場合に便利です。この動作により、VM の要件が小さい他のスケジュールによるオーバーライドを心配することなく、容量をスケジューリングできます。

さらに、オートスケーラーはアクティブな自動スケーリング シグナルで必要とされる最大数の VM インスタンスを常に備えています。詳細については、複数のシグナルを使用した自動スケーリング ポリシーの使用をご覧ください。

夏時間

夏時間(DST)の詳細は、スケーリング スケジュールの位置情報に基づく IANA タイムゾーンに応じて異なります。スケジュールのタイムゾーンで DST を検出した場合、スケジュールの開始時刻は、選択した場所の時刻と同期するように自動的に調整されます。たとえば、タイムゾーン America/New_York に毎日午前 7 時に開始されるスケーリング スケジュールを作成した場合、このスケジュールは東部夏時間または東部標準時を適宜使用して、常にニューヨークの午前 7 時に開始されます。

スケーリング スケジュールは常に構成した期間全体にわたって実行されますが、DST のモニタリングが切り替わる日に、開始時刻と終了時刻が若干異なる場合があります。これは、DST の切り替えには移行期間(DST の初日でスキップされ、DST の最後の日に 2 回発生する時間枠)があるためです。たとえば、タイムゾーンの DST が午前 2 時に開始し、移行期間が 1 時間の場合、時計は午前 1 時 59 分 59 秒から午前 3 時に変更されるため、午前 2 時から午前 2 時 59 分 59 秒の時間枠はスキップされます。このタイムゾーンで DST が午前 2 時に終了すると、時計は午前 2 時 59 分 59 秒から午前 2 時に変更されるため、午前 2 時から午前 2 時 59 分 59 秒の時間枠は繰り返されます。以下のステートメントでは、スケジュールのタイムゾーンで 1 時間の DST 移行を使用することを前提としています。

(1 時間がスキップされる)DST の初日に、スケーリング スケジュールは次のように変更されます。

  • スキップされた時間にアクティブなスケジュールは全期間にわたって実行されますが、スキップされた時間を補うため、DST の移行を行わない日の終了時刻よりも 1 時間遅くスケジュールが終了します。通常、スケジュールの終了時刻はスケジュールの開始時刻と継続時間の合計です。ただし、スケジュールがアクティブな間に DST が 1 時間スキップされ、期間と開始時刻が保持される場合は、そのスケジュールの終了時刻がスケジュールの開始時刻と継続時間の合計よりも 1 時間遅くなります。
  • スキップされた時間に開始するように構成されているスケジュールも、DST 移行を行わない日の開始時刻よりも 1 時間遅く開始されます。

(1 時間が繰り返される)DST の最終日には、スケーリング スケジュールは次のように変更されます。

  • 繰り返された時間にアクティブなスケジュールは全期間にわたって実行されますが、繰り返された時間を補うため、DST の移行を行わない日の終了時刻よりも 1 時間早くスケジュールが終了します。通常、スケジュールの終了時刻はスケジュールの開始時刻と継続時間の合計です。ただし、スケジュールがアクティブな間に DST によって 1 時間が繰り返され、期間と開始時刻が保持される場合は、そのスケジュールの終了時刻がスケジュールの開始時刻と継続時間の合計よりも 1 時間早くなります。
  • 移行期間中に開始されるように構成されているスケジュールは、構成された時刻に開始されますが、2 回目の繰り返しの開始時刻には再び開始されません。

DST をモニタリングするほとんどのタイムゾーンでは、1 時間の移行期間を使用します。ただし、スケジュールのタイムゾーンに異なる移行期間を使用する場合は(30 分の移行期間を使用する Australia/Lord_Howe タイムゾーンなど)、同じ動作を想定できます。ただし、1 時間を、該当する DST の移行時間に置き換えます。

次のステップ