儲存及載入環境快照

Managed Airflow (第 3 代) | Managed Airflow (第 2 代) | Managed Airflow (舊版第 1 代)

本頁說明如何使用環境快照儲存及載入環境狀態。

您可以將環境設為自動儲存快照。詳情請參閱「設定排程快照」。

關於環境快照

環境快照會儲存環境狀態,您可以視需要儲存及載入環境快照。

快照的用途如下:

  • 將環境還原至較早狀態。使用快照建立環境備份,然後載入其中一個快照來還原環境。舉例來說,即使環境已成功更新,您還是可以復原安裝 PyPI 套件或覆寫 Airflow 設定選項的更新作業。

  • 執行並行升級及複製環境。建立現有環境的快照,建立使用相同或更新版本 Managed Airflow 的新環境,然後將快照套用至這個新環境。這個程序與遷移類似。建立快照前,請務必暫停 DAG,以免重複執行 DAG。

  • 將環境遷移至 Managed Airflow (第 3 代)。

快照的儲存方式

環境快照是一組檔案,可說明環境狀態並儲存環境資料備份。

您可以建立多個環境快照。環境快照並非增量快照。您可以獨立使用任何快照,不必與其他快照搭配。

刪除環境時,Managed Airflow 不會一併刪除快照。

根據預設,Managed Airflow 會將快照儲存在環境值區的 snapshots/ 資料夾中。您也可以在建立快照時指定自訂位置。

雖然 Cloud Storage 使用者介面會以資料夾的形式顯示資料,方便使用者操作,但 bucket 採用的是一般檔案結構。這不會改變您在 Google Cloud 控制台中儲存及載入快照的方式,但直接對儲存空間中的檔案執行作業時,請留意這點。詳情請參閱「物件命名空間」。

快照的安全考量

如要降低這項安全風險,您可以將 Airflow DAG 使用的機密資訊 (例如金鑰或密碼) 儲存在 Secret Manager 中。詳情請參閱「為環境設定 Secret Manager」。

請務必檢查環境值區的安全權限。如果將環境快照儲存在自訂 bucket 中,請確認專案中已正確設定該 bucket 的存取權限。指派權限時,請確認環境的服務帳戶具備足夠的權限,可從值區儲存及載入快照。

快照會儲存哪些資料

Managed Airflow 會將下列資料儲存在快照中:

  • Airflow 設定覆寫。
  • 環境變數。
  • 自訂 PyPI 套件清單 (以需求條件的形式)。
  • Airflow 資料庫備份,包括已執行工作的狀態和 DAG 執行記錄。
  • 環境值區中 /dags/data/plugins 資料夾的備份。
  • 環境的 fernet 金鑰
  • 環境設定的其他資訊,例如環境的規模和效能參數。載入快照時,Managed Airflow 不會使用這項資訊。

從快照載入的資料

Managed Airflow 會從快照載入下列資料:

  • Airflow 設定覆寫。
  • 環境變數。
  • 自訂 PyPI 套件 (除非您選擇略過安裝程序)。

  • Airflow 資料庫的內容,包括已執行工作的狀態和 DAG 執行記錄。

  • 系統會將快照中的 /dags/data/plugins 資料夾內容載入環境的 bucket。

  • 系統會使用快照中的 Fernet 金鑰,以環境本身的 Fernet 金鑰重新加密快照中的資料。環境的 fernet 金鑰維持不變。

雖然 Managed Airflow 會將環境設定的部分資訊儲存在快照中,但載入快照時不會使用這些資訊。載入快照時,環境的下列參數不會變更:

  • 環境設定,例如環境規模和效能參數。
  • 環境的網路設定。
  • 環境值區中 /dags/data/plugins 資料夾以外的內容。
  • 環境標籤。

如果您在 Managed Airflow 基礎架構中套用任何設定,但未使用 Cloud Composer API,載入快照時可能會遺失這些設定。

關於部分完成的作業

載入快照時,作業可能會成功、失敗或部分完成:

  • 成功執行的作業會從快照載入所有資料。
  • 失敗的作業不會造成任何變更。
  • 部分完成的作業會從快照載入資料子集。這類作業會回報為失敗,但錯誤訊息會指出成功載入的資料。舉例來說,如果已安裝 PyPI 套件,但 Airflow 設定選項覆寫作業失敗,錯誤訊息就會指出這點。

如果作業只完成一部分,您可以嘗試再次載入相同的快照。Managed Airflow 會略過先前嘗試時成功的步驟。舉例來說,如果作業因逾時而失敗,但資料庫已成功載入,下次嘗試時就不會再次載入資料庫。

事前準備

  • Managed Airflow (第 2 代) 2.0.9 以上版本支援快照。 Managed Airflow (舊版第 1 代) 支援在 1.18.5 以上版本中儲存環境快照。

  • 快照不會建立環境,如要將環境中的快照載入至其他環境,請先建立新環境,然後將快照載入至該環境。

  • 您無法將快照載入至處於錯誤狀態的環境。載入快照無法修正這類環境。您還是可以將現有快照載入新環境。

  • 您只能將快照載入相同或較新版本的 Managed Airflow 或 Airflow。舉例來說,您無法將 Managed Airflow 2.8.4 的快照載入至 Managed Airflow 2.8.3 環境。舉例來說,您無法將 Airflow 2.7.3 的快照載入至 Airflow 2.6.3。

  • 快照不會變更 Managed Airflow 版本。如果將環境升級至較新版本的 Managed Airflow,然後載入舊版快照,環境仍會保留目前的 Managed Airflow 版本。舉例來說,從 Managed Airflow 2.8.3 載入快照到 Managed Airflow 2.8.4 時,環境不會還原為 Managed Airflow 2.8.3。

  • 支援快照的 Airflow 資料庫大小上限為 20 GB。如果環境的資料庫超過 20 GB,請縮減 Airflow 資料庫的大小,再儲存快照。

  • 如要建立快照,環境值區中 /dags/plugins/data 資料夾的物件總數必須少於 100,000 個。

  • 如果您使用 XCom 機制傳輸檔案,請務必按照 Airflow 的指南使用該機制。使用 XCom 傳輸大型檔案或大量檔案會影響 Airflow 資料庫的效能,並可能導致載入快照或升級環境時發生錯誤。建議改用 Cloud Storage 等替代方案,傳輸大量資料。

  • 環境儲存空間中物件名稱的長度上限為 1024 個符號。否則無法建立快照。

  • 如果將快照儲存在環境值區以外的位置,環境的服務帳戶必須具備指定位置的讀取和寫入權限。舉例來說,Storage 物件管理員角色就具備這類權限。您可以將這項功能套用至專案或特定值區。

  • 建立及儲存快照會產生額外費用,這與 Cloud Storage 相關。詳情請參閱「定價」。

儲存環境快照

Managed Airflow 會將環境快照儲存在您指定的資料夾中,並以子資料夾的形式儲存。資料夾名稱包含專案 ID、環境位置、環境名稱,以及儲存快照的時間戳記。例如:/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

控制台

如要建立環境快照,請按照下列步驟操作:

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

    前往「環境」

  2. 在環境清單中,按一下環境名稱。 「環境詳細資料」頁面隨即開啟。

  3. 按一下「儲存快照」

  4. 在「儲存快照」對話方塊中,選取快照的儲存位置:

    • 如要將快照儲存在環境 bucket 的 /snapshots 資料夾中,請選取「使用環境 bucket 中的快照資料夾 (預設)」

    • 如要將快照儲存在自訂資料夾中,請選取「使用其他值區中的自訂資料夾」,然後指定位置。

  5. 按一下 [儲存]

gcloud

gcloud composer environments snapshots save 指令會儲存環境快照。

  • snapshot-location 引數會指定儲存快照的資料夾。根據預設,快照會儲存在環境值區的 /snapshots 資料夾中。例如:gs://us-central1-example-916807e1-bucket/snapshots。您也可以指定任何其他資料夾。

如要儲存環境快照,請執行下列指令:

gcloud composer environments snapshots save \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-location "SNAPSHOTS_FOLDER"

更改項目:

  • ENVIRONMENT_NAME 替換為環境的名稱。
  • LOCATION 替換為環境所在的區域。
  • (選用) SNAPSHOTS_FOLDER,其中包含要儲存快照的 bucket 資料夾 URI。如果省略這個引數,Managed Airflow 會將快照儲存在環境值區的 /snapshots 資料夾中。

以下範例使用預設位置:

gcloud composer environments snapshots save \
  example-environment \
  --location us-central1

以下範例會儲存至自訂資料夾:

gcloud composer environments snapshots save \
  example-environment \
  --location us-central1 \
  --snapshot-location "gs://example-bucket/environment_snapshots"

API

  1. 建構 environments.saveSnapshot API 要求。

  2. 在要求主體的 snapshotLocation 欄位中,指定要儲存快照的資料夾。

{
  "snapshotLocation": "SNAPSHOTS_FOLDER"
}

更改項目:

  • SNAPSHOTS_FOLDER,其中包含要儲存快照的值區資料夾 URI。

範例:

// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:saveSnapshot

{
  "snapshotLocation": "gs://us-central1-example-916807e1-bucket/snapshots"
}

Terraform

您無法透過 Terraform 儲存及載入環境快照。

儲存和載入快照是在環境中執行的動作,產生的快照不屬於環境定義。由於 Terraform 只管理 Managed Airflow 環境的設定,因此您無法從中儲存或載入環境快照。

載入環境快照

請參考以下狀況。舉例來說,如果啟用「追趕」,Airflow 會在建立快照和載入快照之間,按照排程執行 DAG。在這種情況下,載入快照後,Airflow 不會取得 DAG 執行的相關資訊,因此會針對相同的時間和資料再次執行 DAG。

再舉一個例子,假設 DAG 每天都會執行。您先拍攝快照,然後 Airflow 執行這個 DAG,之後您在當天載入快照。在這種情況下,即使停用補追功能,Airflow 仍會再次執行 DAG。

控制台

如要將快照載入環境,請按照下列步驟操作:

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

    前往「環境」

  2. 在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。

  3. 按一下「載入快照」

  4. 在「載入快照」對話方塊中,按一下「瀏覽」

  5. 選取儲存快照的資料夾。資料夾名稱會列出專案 ID、環境位置,以及儲存快照的時間戳記。例如:/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  6. (選用) 如要略過從快照安裝自訂 PyPI 套件,請選取「略過 PyPI 套件安裝程序」。如果您載入已安裝自訂 PyPI 套件的環境快照,Managed Airflow 就不會安裝這些自訂套件。

  7. 按一下「Load」,然後等待 Managed Airflow 載入快照。

gcloud

gcloud composer environments snapshots load 指令會將快照載入環境。

  • --snapshot-path 引數會指定快照所在的資料夾。

    資料夾名稱會列出專案 ID、環境位置,以及儲存快照的時間戳記。例如:gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  • (選用) --skip-pypi-packages-installation 引數會略過從快照安裝自訂 PyPI 套件的程序。如果您載入已安裝自訂 PyPI 套件的環境快照,Managed Airflow 就不會安裝這些自訂套件。

gcloud composer environments snapshots load \
  DESTINATION_ENVIRONMENT_NAME \
  --location LOCATION \
  --snapshot-path "SNAPSHOT_PATH"

更改項目:

  • DESTINATION_ENVIRONMENT_NAME 替換為要載入快照的環境名稱。
  • LOCATION 替換為環境所在的區域。
  • SNAPSHOT_PATH,並加上快照的路徑。

範例:

gcloud composer environments snapshots load \
  example-environment \
  --location us-central1 \
  --snapshot-path "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00"

API

  1. 建構 environments.loadSnapshot API 要求。

  2. 在要求主體的 snapshotPath 欄位中,指定 bucket 的 URI,然後是快照的路徑。資料夾名稱會列出專案 ID、環境位置,以及儲存快照的時間戳記。例如:gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00

  3. (選用) 在要求主體的 skipPypiPackagesInstallation 欄位中,指定 Managed Airflow 是否必須略過從快照安裝自訂 PyPI 套件。如果您載入已安裝自訂 PyPI 套件的環境快照,Managed Airflow 就不會安裝這些自訂套件。

    這是選填欄位。如果省略這個欄位,Managed Airflow 會從快照安裝 PyPI 套件。

{
  "snapshotPath": "SNAPSHOT_PATH"
}

更改項目:

  • SNAPSHOT_PATH,並提供要儲存快照的 bucket 資料夾 URI。

範例:

// POST https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment:loadSnapshot

{
  "snapshotPath": "gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00",
  "skipPypiPackagesInstallation": "False"
}

Terraform

您無法使用 Terraform 儲存及載入環境快照。

儲存和載入快照是在環境中執行的動作,產生的快照不屬於環境定義。由於 Terraform 只管理 Managed Airflow 環境的設定,因此您無法從中儲存或載入環境快照。

後續步驟