指定維護期間

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer„�

本頁說明如何為環境定義維護期間。

關於維護期間

維護期間是指您允許 Cloud Composer 執行維護作業的時間範圍。舉例來說,您可以指定 DAG 排程時間以外的維護時間,確保重要工作執行作業不會中斷。

您可以透過維護期間,控管環境的維護時間:

  • 如果您為環境定義自訂維護期間,Cloud Composer 會在這些期間執行維護作業。

  • 如果未定義環境的維護期間,Cloud Composer 會隨時執行維護作業。

維護期間的運作方式

維護期間的運作方式如下:

  • 維護作業每週至少需要 12 小時。

  • 你可以使用多個時段,但每個時段的長度至少須為 4 小時。

  • 在維護期間,環境會持續運作。維護作業進行期間,環境中的部分元件可能會暫時無法使用。

  • Cloud Composer 需要 12 小時,才能排定及執行所有維護作業。這並不表示維護作業會持續 12 小時,或每週都會進行。

只要可以接受部分工作可能會中斷並重試,您仍可在維護期間執行 DAG。如果在維護期間執行 DAG,請務必啟用工作重試功能。您可以在 Airflow 設定、DAG 或工作層級設定工作重試。

維護作業對環境的影響如下:

  • Airflow UI 可能暫時無法使用。

  • 您可能暫時無法變更環境的部分參數,或升級至較新版本。

  • 直接對 Airflow 資料庫發出 SQL 查詢時,可能需要較長時間,且可能需要重試。

  • 部分 Airflow 工作可能會中斷。維護作業完成後,Airflow 會重試這些工作 (除非另有設定)。

預設維護期間

如果您使用 Google Cloud 主控台、API 或 Terraform 建立 Cloud Composer 1 環境,預設不會定義維護時間範圍。建議您為新環境和現有環境指定維護期間。

如果您使用 gcloud CLI 建立環境,環境的預設維護時間為每週五、六、日的 00:00:00 至 04:00:00 (GMT)。

維護期間外的維護作業

在下列情況下,Cloud Composer 可能會在設定的維護期間外執行維護作業:

  • 在緊急情況下 (例如修正重大安全漏洞時),部分維護作業可能會在一般維護期間外執行。

  • 如果 Cloud Composer 無法在維護期間執行例行維護作業達 30 天,就會在指定維護期間外執行重大維護作業。如果維護期間設定錯誤,導致 Cloud Composer 無法對環境執行維護作業,這項機制就會派上用場。

如何使用維護期間

維護作業可能會影響 DAG 和 Airflow 工作的執行,因此建議您採取下列行動:

  1. 為 Cloud Composer 環境定義維護期間。

  2. 在 DAG 中使用 start_dateschedule_interval 參數,在指定維護期間以外的時間排定 DAG 執行作業。

為新環境指定維護期間

建立環境時,您可以指定維護期間。詳情請參閱「建立環境」。

為現有環境指定維護期間

主控台

如要為現有環境定義或變更維護期間,請更新環境

  1. 前往 Google Cloud 控制台的「Environments」頁面。

    前往「環境」

  2. 選取環境。

  3. 前往「環境設定」分頁。

  4. 按一下「維護時段」項目旁邊的「編輯」

  5. 在「維護期間」對話方塊中,勾選「自訂維護期間的時間」核取方塊。

  6. 設定「開始時間」、「時區」、「天數」和「長度」,確保指定時間表的總時數在 7 天的滾動窗口中至少為 12 小時。舉例來說,每週一、三、五各 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 支援兩種格式:

  • FREQ=DAILY 格式指定每日週期。

  • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式會指定在所選星期幾重複執行。

以下範例指定維護期間為 6 小時,時間為週三、週六和週日的世界標準時間 01:00 至 07:00。系統會忽略 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 支援兩種格式:

    • FREQ=DAILY 格式指定每日週期。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式會指定在所選星期幾重複執行。

以下範例指定星期三、星期六和星期日,在 01:00 到 07:00 (世界標準時間) 之間進行 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 支援兩種格式:

    • FREQ=DAILY 格式指定每日週期。
    • FREQ=WEEKLY;BYDAY=SU,MO,TU,WE,TH,FR,SA 格式會指定在所選星期幾重複執行。

以下範例指定維護期間為 6 小時,時間為週三、週六和週日的世界標準時間 01:00 至 07:00。系統會忽略 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"
    }
  }
}

後續步驟