Cloud Composer 3 | Cloud Composer 2 | Cloud Composer�
本頁說明如何使用環境快照儲存及載入環境狀態。
您可以將環境設為自動儲存快照。詳情請參閱「設定排程快照」。
關於環境快照
環境快照會儲存環境狀態。您可以視需要儲存及載入環境快照。
快照的用途如下:
將環境還原至較早狀態。使用快照建立環境備份,然後載入其中一個快照來還原環境。舉例來說,即使環境已成功更新,您還是可以還原安裝 PyPI 套件或覆寫 Airflow 設定選項的更新作業。
執行並行升級及複製環境。建立現有環境的快照,建立使用相同或更新版本 Cloud Composer 的新環境,然後將快照套用至這個新環境。這個程序與遷移類似。建立快照前,請務必暫停 DAG,以免重複執行 DAG。
將環境遷移至 Cloud Composer 3。
快照的儲存方式
環境快照是一組檔案,用於說明環境狀態及儲存環境資料備份。
您可以建立多個環境快照。環境快照並非增量快照。您可以獨立使用任何快照,不必與其他快照搭配。
刪除環境時,Cloud Composer 不會一併刪除快照。
根據預設,Cloud Composer 會將快照儲存在環境值區的 snapshots/
資料夾中。您也可以在建立快照時指定自訂位置。
為方便起見,Cloud Storage 使用者介面會將資料顯示為資料夾,但 bucket 採用的是一般檔案結構。這不會改變您在 Google Cloud 控制台中儲存及載入快照的方式,但直接對儲存空間中的檔案執行作業時,請留意這點。詳情請參閱「物件命名空間」。
快照的安全考量
為降低這項安全風險,您可以將 Airflow DAG 使用的機密資訊 (例如金鑰或密碼) 儲存在 Secret Manager 中。詳情請參閱「為環境設定 Secret Manager」。
請務必檢查環境值區的安全權限。如果將環境快照儲存在自訂值區中,請確認專案中已正確設定該值區的存取權限。指派權限時,請確認環境的服務帳戶有足夠權限,可從值區儲存及載入快照。
快照會儲存哪些資料
Cloud Composer 會在快照中儲存下列資料:
- Airflow 設定覆寫。
- 環境變數。
- 自訂 PyPI 套件清單 (以需求條件的形式)。
- Airflow 資料庫備份,包括已執行工作的狀態和 DAG 執行記錄。
- 環境值區中
/dags
、/data
和/plugins
資料夾的備份。 - 環境的 Fernet 金鑰。
- 環境設定的其他資訊,例如環境的規模和效能參數。Cloud Composer 載入快照時不會使用這項資訊。
系統會從快照載入哪些資料
Cloud Composer 會從快照載入下列資料:
- Airflow 設定覆寫。
- 環境變數。
自訂 PyPI 套件 (除非您選擇略過安裝程序)。
Airflow 資料庫內容,包括已執行工作的狀態和 DAG 執行記錄。
系統會將快照中的
/dags
、/data
和/plugins
資料夾內容載入環境的 bucket。系統會使用快照中的 Fernet 金鑰,以環境本身的 Fernet 金鑰重新加密快照中的資料。環境的 fernet 金鑰維持不變。
雖然 Cloud Composer 會將環境設定的部分資訊儲存在快照中,但載入快照時不會使用這些資訊。載入快照時,環境的下列參數不會變更:
- 環境設定,例如環境規模和效能參數。
- 環境的網路設定。
- 環境值區中
/dags
、/data
和/plugins
資料夾以外的內容。 - 環境標籤。
如果您在 Cloud Composer 基礎架構中套用任何設定,但未使用 Cloud Composer API,載入快照時可能會遺失這些設定。
關於部分完成的作業
載入快照時,作業可能會成功、失敗或部分完成:
- 成功執行的作業會從快照載入所有資料。
- 失敗的作業不會造成任何變更。
- 部分完成的作業會從快照載入資料子集。這類作業會回報為失敗,但錯誤訊息會指出成功載入的資料。舉例來說,如果已安裝 PyPI 套件,但 Airflow 設定選項覆寫作業失敗,錯誤訊息就會指出這點。
如果作業只完成一部分,您可以嘗試再次載入相同的快照。Cloud Composer 會略過先前嘗試成功執行的步驟。舉例來說,如果作業因逾時而失敗,但資料庫已成功載入,下次嘗試時就不會再次載入資料庫。
事前準備
Cloud Composer 2 版本 2.0.9 以上支援快照。Cloud Composer 1 支援在 1.18.5 以上版本中儲存環境快照。
快照不會建立環境,如要將環境中的快照載入其他環境,請先建立新環境,然後將快照載入該環境。
您無法將快照載入至處於錯誤狀態的環境。載入快照無法修正這類環境。您還是可以將現有快照載入新環境。
您只能將快照載入至相同或更新版本的 Cloud Composer 或 Airflow。舉例來說,您無法將 Cloud Composer 2.8.4 的快照載入 Cloud Composer 2.8.3 環境。舉例來說,您無法將 Airflow 2.7.3 的快照載入至 Airflow 2.6.3。
快照不會變更 Cloud Composer 版本。如果將環境升級至較新版本的 Cloud Composer,然後載入先前版本的快照,環境仍會保留目前的 Cloud Composer 版本。舉例來說,從 Cloud Composer 2.8.3 載入快照到 Cloud Composer 2.8.4 時,環境不會還原為 Cloud Composer 2.8.3。
支援快照的 Airflow 資料庫大小上限為 20 GB。如果環境的資料庫超過 20 GB,請縮減 Airflow 資料庫的大小,再儲存快照。
如要建立快照,環境值區中
/dags
、/plugins
和/data
資料夾的物件總數必須少於 100,000 個。如果使用 XCom 機制傳輸檔案,請務必按照 Airflow 的指南使用。使用 XCom 傳輸大型檔案或大量檔案會影響 Airflow 資料庫的效能,並可能導致載入快照或升級環境時發生錯誤。請考慮使用 Cloud Storage 等替代方案來移轉大量資料。
環境儲存空間中物件名稱的長度上限為 1024 個符號。否則無法建立快照。
如果將快照儲存在環境值區以外的位置,環境的服務帳戶必須具備指定位置的讀取和寫入權限。舉例來說,Storage 物件管理員角色就具備這類權限。您可以將這項功能套用至專案或特定值區。
建立及儲存快照會產生額外費用,這與 Cloud Storage 相關。詳情請參閱「定價」。
儲存環境快照
Cloud Composer 會將環境快照儲存在您指定的資料夾中,並以子資料夾的形式儲存。資料夾名稱包含專案 ID、環境位置、環境名稱,以及儲存快照的時間戳記。例如:
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00
。
主控台
如要建立環境快照,請按照下列步驟操作:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。 「環境詳細資料」頁面隨即開啟。
按一下「儲存快照」。
在「儲存快照」對話方塊中,選取快照的儲存位置:
如要將快照儲存在環境 bucket 的
/snapshots
資料夾中,請選取「使用環境 bucket 中的快照資料夾 (預設)」。如要將快照儲存在自訂資料夾中,請選取「使用其他值區中的自訂資料夾」,然後指定位置。
按一下 [儲存]。
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。如果省略這個引數,Cloud Composer 會將快照儲存至環境值區的/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
建構
environments.saveSnapshot
API 要求。在要求主體的
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 只管理 Cloud Composer 環境的設定,因此您無法透過 Terraform 儲存或載入環境快照。
載入環境快照
請參考以下狀況。舉例來說,如果啟用「追趕」,Airflow 會在建立快照和載入快照之間,按照排程執行 DAG。在這種情況下,載入快照後,Airflow 不會取得 DAG 執行的相關資訊,因此會針對相同的時間和資料再次執行 DAG。
再舉一個例子,假設 DAG 每天都會執行。您先拍攝快照,然後 Airflow 執行這個 DAG,之後您在同一天載入快照。在這種情況下,即使停用補追功能,Airflow 仍會再次執行 DAG。
主控台
如要將快照載入環境,請按照下列步驟操作:
前往 Google Cloud 控制台的「Environments」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
按一下「載入快照」。
在「載入快照」對話方塊中,按一下「瀏覽」。
選取儲存快照的資料夾。資料夾名稱會列出專案 ID、環境位置,以及儲存快照的時間戳記。例如
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00
。(選用) 如要略過從快照安裝自訂 PyPI 套件,請選取「略過 PyPI 套件安裝程序」。如果您載入已安裝自訂 PyPI 套件的環境快照,Cloud Composer 就不會安裝這些自訂套件。
按一下「載入」,等待 Cloud Composer 載入快照。
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 套件的環境快照,Cloud Composer 就不會安裝這些自訂套件。
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
建構
environments.loadSnapshot
API 要求。在要求主體的
snapshotPath
欄位中,指定 bucket 的 URI,然後是快照的路徑。資料夾名稱會列出專案 ID、環境位置,以及儲存快照的時間戳記。例如:gs://us-central1-example-916807e1-bucket/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00
。(選用) 在要求主體的
skipPypiPackagesInstallation
欄位中,指定 Cloud Composer 是否必須略過從快照安裝自訂 PyPI 套件。如果您載入已安裝自訂 PyPI 套件的環境快照,Cloud Composer 就不會安裝這些自訂套件。這是選填欄位。如果省略這個欄位,Cloud Composer 會從快照安裝 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 只管理 Cloud Composer 環境的設定,因此您無法透過 Terraform 儲存或載入環境快照。