指定維護期間

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 或工作層級設定重試工作。

執行時間少於 55 分鐘的工作通常不會受到維護作業的影響,但仍需要啟用重試功能,才能在排程器重新啟動時繼續執行。在標準 Cloud Composer 作業期間,排程器可能會在維護期間以外重新啟動。

Cloud Composer 會通知 Airflow worker 即將執行維護作業。Airflow 工作站會完成已開始的工作,但不會挑選新的工作。這些新工作會由未進行維護作業的 Airflow 工作站執行。

如果您使用高度彈性的環境,則環境中的 Airflow 元件可能會在維護作業期間的不同時間重新啟動 (這取決於維護作業類型)。總體而言,使用高度彈性的環境可縮短維護作業期間的環境停機時間。

維護作業會對環境產生下列影響:

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

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

  • 直接對 Airflow 資料庫執行 SQL 查詢可能會比平常耗時更久,且可能需要重試。

  • 部分 Airflow 工作執行時間可能超過 55 分鐘,因此可以中斷。維護作業完成後,Airflow 會為這些工作排定重試作業 (如果未特別設定)。

預設維護期間

Cloud Composer 2 的預設維護時段為每週週五、週六和週日的 00:00:00 至 04:00:00 (格林威治標準時間)。

如何使用維護期間

維護作業可能會影響 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"
    }
  }
}

後續步驟