メンテナンスの時間枠を指定する

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

このページでは、環境のメンテナンスの時間枠を定義する方法について説明します。

メンテナンスの時間枠について

メンテナンスの時間枠とは、Cloud Composer でメンテナンス オペレーションを行えるようにする期間です。たとえば、DAG のスケジュール時間外にメンテナンスの時間枠を指定することで、重要なタスクの実行が中断されないようにすることができます。

メンテナンスの時間枠を使用すると、環境でメンテナンスが実施される期間を制御できます。

  • 環境にカスタム メンテナンスの時間枠を定義すると、Cloud Composer はこれらの定義された期間内にメンテナンスを実施します。

  • ご使用の環境でカスタム メンテナンス時間枠を定義しない場合、Cloud Composer はデフォルトのメンテナンス時間枠内にメンテナンスを行います。

メンテナンスの時間枠で発生した内容

メンテナンスの時間枠を指定する場合は、メンテナンス オペレーションに対して 1 週間に 12 時間以上かけるようにします。

  • メンテナンスの時間枠の間、環境は使用可能な状態が保たれます。環境の一部のコンポーネントが、メンテナンス オペレーション中に一時的に使用できなくなる場合があります。

  • Cloud Composer がすべてのメンテナンス オペレーションのスケジュールを設定して実行するのに十分な時間を確保するためには 12 時間が必要です。これは、メンテナンス オペレーションが毎週 12 時間かかる、または毎週発生するという意味ではありません。

一部のタスクの中断と再試行が許可されていれば、メンテナンスの時間枠で DAG を引き続き実行できます。メンテナンスの時間枠内に DAG を実行する場合は、必ずタスクの再試行を有効にしてください。タスクの再試行は、Airflow 構成、DAG、タスクレベルで構成できます。

実行時間が 55 分未満のタスクは、通常、メンテナンス オペレーションの影響を受けませんが、スケジューラの再起動に耐えるように再試行を有効にする必要があります。スケジューラは、メンテナンスの時間枠外で、標準の Cloud Composer オペレーション中に再起動されることがあります。

Cloud Composer は、メンテナンス オペレーションがまもなく行われることを Airflow ワーカーに通知します。Airflow ワーカーはすでに開始されたタスクを終了し、新しいタスクは選択しません。これらの新しいタスクは、メンテナンス オペレーションの対象外となる Airflow ワーカーによって実行されます。

復元性の高い環境を使用する場合、環境の Airflow コンポーネントはメンテナンス オペレーション中にさまざまなタイミングで再起動する可能性があります(メンテナンス オペレーションの種類によって異なります)。全体的に、復元性の高い環境を使用すると、メンテナンス オペレーション中の環境のダウンタイムが短縮されます。

メンテナンス オペレーションは、環境に次のような影響を及ぼします。

  • Airflow UI が一時的に利用できなくなる場合があります。

  • 環境のパラメータの一部の変更や後続のバージョンへのアップグレードは、一時的にできなくなる場合があります。

  • Airflow データベースへの直接 SQL クエリは、通常よりも時間がかかり、再試行が必要になる場合があります。

  • 実行するのに 55 分以上かかる一部の Airflow タスクが中断されることがあります。メンテナンス オペレーションが完了すると、Airflow はこれらのタスクの再試行をスケジュールします(別途構成していない場合)。

デフォルトのメンテナンスの時間枠

Cloud Composer 2 のデフォルトのメンテナンスの時間枠は、毎週金曜日、土曜日、日曜日の 00:00:00~04:00:00(GMT)です。

メンテナンスの時間枠の使用方法

メンテナンス オペレーションは DAG と Airflow タスクの実行に影響する可能性があるため、次の手順を行うことをおすすめします。

  1. Cloud Composer 環境のメンテナンス時間枠を定義する。

  2. DAG の start_dateschedule_interval パラメータを使用して、指定したメンテナンスの時間枠外で DAG の実行をスケジュールする。

新しい環境のメンテナンス時間枠の指定

環境を作成するときに、メンテナンスの時間枠を指定できます。詳細については、環境の作成をご覧ください。

既存の環境のメンテナンス時間枠の指定

コンソール

既存の環境のメンテナンス時間枠を定義または変更するには、環境を更新します。

  1. Google Cloud Console で [環境] ページに移動します。

    [環境] に移動

  2. 環境を選択します。

  3. [環境の設定] タブに移動します。

  4. [メンテナンスの時間枠] エントリの横にある [編集] をクリックします。

  5. [メンテナンスの時間枠] ダイアログで、[メンテナンスの時間枠にカスタム時間を設定する] チェックボックスをオンにします。

  6. [開始時刻]、[タイムゾーン]、[日数]、[長さ] を設定し、指定したスケジュールを組み合わせた時間が、少なくとも 12 時間を 7 日間で繰り返す時間枠になるようにします。たとえば、毎週月曜日、水曜日、金曜日の 4 時間に、必要な時間を指定します。

  7. [保存] をクリックして、環境が更新されるまで待ちます。

gcloud

メンテナンスの時間枠のパラメータは、環境を更新するときに次の引数で定義します。

  • --maintenance-window-start は、メンテナンスの時間枠の開始時間を設定します。
  • --maintenance-window-end は、メンテナンスの時間枠の終了時間を設定します。
  • --maintenance-window-recurrence は、メンテナンスの時間枠の繰り返しを設定します。
gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --maintenance-window-start 'DATETIME_START' \
    --maintenance-window-end 'DATETIME_END' \
    --maintenance-window-recurrence 'MAINTENANCE_RECURRENCE'

以下のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前にする。
  • DATETIME_START を、日付 / 時刻の入力形式の開始日時にする。指定した時刻のみが使用され、指定された日付は無視されます。
  • DATETIME_END を、終了日付 / 時刻入力形式の日時にする。指定した時刻のみが使用され、指定した日付は無視されます。指定する日付と時刻は開始日より後にする必要があります。
  • MAINTENANCE_RECURRENCE を、繰り返しのメンテナンス時間枠の RFC 5545 RRULE にする。Cloud Composer では、次の 2 つの形式がサポートされています。

  • FREQ=DAILY 形式は、毎日の繰り返しを指定します。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 形式は、選択した曜日の繰り返しを指定します。

次の例は、水曜日、土曜日、日曜日の 01:00~07:00(UTC)の 6 時間を、メンテナンスの時間枠として指定しています。2023 年 1 月 1 日は無視されます。

gcloud composer environments update example-environment \
  --location us-central1 \
  --maintenance-window-start '2023-01-01T01:00:00Z' \
  --maintenance-window-end '2023-01-01T07:00:00Z' \
  --maintenance-window-recurrence 'FREQ=WEEKLY;BYDAY=SU,WE,SA'

API

  1. environments.patch API リクエストを作成します。

  2. このリクエストで次のように操作します。

    1. updateMask パラメータで、config.maintenanceWindow マスクを指定します。

    2. リクエスト本文で、メンテナンスの時間枠のパラメータを指定します。

{
  "config": {
    "maintenanceWindow": {
      "startTime": "DATETIME_START",
      "endTime": "DATETIME_END",
      "recurrence": "MAINTENANCE_RECURRENCE"
    }
  }
}

以下のように置き換えます。

  • DATETIME_START を、日付 / 時刻の入力形式の開始日時にする。指定した時刻のみが使用され、指定した日付は無視されます。
  • DATETIME_END を、終了日付 / 時刻入力形式の日時にする。指定した時刻のみが使用され、指定した日付は無視されます。指定する日付と時刻は開始日より後にする必要があります。
  • MAINTENANCE_RECURRENCE を、繰り返しのメンテナンス時間枠の RFC 5545 RRULE にする。Cloud Composer では、次の 2 つの形式がサポートされています。

    • FREQ=DAILY 形式は、毎日の繰り返しを指定します。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 形式は、選択した曜日の繰り返しを指定します。

次の例は、水曜日、土曜日、日曜日の 01:00~07:00(UTC)の 6 時間のメンテナンス時間枠を示しています。2023 年 1 月 1 日は無視されます。

  // PATCH https://composer.googleapis.com/v1/projects/example-project/
  // locations/us-central1/environments/example-environment?updateMask=
  // config.maintenanceWindow

  {
    "config": {
      "maintenanceWindow": {
        "startTime": "2023-01-01T01:00:00Z",
        "endTime": "2023-01-01T07:00:00Z",
        "recurrence": "FREQ=WEEKLY;BYDAY=SU,WE,SA"
      }
    }
  }

Terraform

maintenance_window ブロックでは、環境のメンテナンスの時間枠を指定します。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {
    maintenance_window {
      start_time = "DATETIME_START"
      end_time = "DATETIME_END"
      recurrence = "MAINTENANCE_RECURRENCE"
    }
  }
}

以下のように置き換えます。

  • ENVIRONMENT_NAME を環境の名前にする。
  • LOCATION は、環境が配置されているリージョン。
  • DATETIME_START を、日付 / 時刻の入力形式の開始日時にする。指定した時刻のみが使用され、指定した日付は無視されます。
  • DATETIME_END を、終了日付 / 時刻入力形式の日時にする。指定した時刻のみが使用され、指定した日付は無視されます。指定する日付と時刻は開始日より後にする必要があります。
  • MAINTENANCE_RECURRENCE を、繰り返しのメンテナンス時間枠の RFC 5545 RRULE にする。Cloud Composer では、次の 2 つの形式がサポートされています。

    • FREQ=DAILY 形式は、毎日の繰り返しを指定します。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 形式は、選択した曜日の繰り返しを指定します。

次の例は、水曜日、土曜日、日曜日の 01:00~07:00(UTC)の 6 時間を、メンテナンスの時間枠として指定しています。2023 年 1 月 1 日は無視されます。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {
    maintenance_window {
      start_time = "2023-01-01T01:00:00Z"
      end_time = "2023-01-01T07:00:00Z"
      recurrence = "FREQ=WEEKLY;BYDAY=SU,WE,SA"
    }
  }
}

次のステップ