指定維護期間

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

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

關於維護期間

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

您可以透過維護期間控管環境可進行維護的時間範圍:

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

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

維護期間的運作方式

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

  • 維護作業需要在單週內分配至少 12 小時。

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

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

  • 必須預留 12 小時,讓 Cloud Composer 有足夠的時間排定並執行所有維護作業。這並不表示維護作業會花費整整 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)。

如何使用維護期間

維護作業可能會影響 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 格式會指定在所選星期幾重複發生的事件。

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

    • 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 格式會指定在所選星期幾重複發生的事件。

以下範例指定星期三、星期六和星期日的 01:00 至 07:00 (世界標準時間) 之間的 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"
    }
  }
}

後續步驟