Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
本頁面說明如何使用環境快照儲存及載入環境狀態。
您可以設定環境,自動儲存快照。詳情請參閱「設定排程快照」。
關於環境快照
環境快照會儲存環境狀態。您可以視需求儲存及載入環境快照。
您可以使用快照來執行下列操作:
將環境還原為先前的狀態。使用快照建立環境備份,然後載入其中一個快照來還原環境。舉例來說,即使環境已成功更新,您仍可回復安裝 PyPI 套件或覆寫 Airflow 設定選項的更新作業。
執行並行升級和複製環境。請為現有環境建立快照,然後建立使用相同或更新版本 Cloud Composer 的新環境,再將快照套用至這個新環境。這個程序與遷移程序類似。請務必在建立快照前暫停 DAG,以免重複執行 DAG。
將環境遷移至 Cloud Composer 3。
快照的儲存方式
環境快照是一組檔案,可說明環境狀態,並儲存環境資料的備份。
您可以為環境建立多個快照。環境快照不是增量快照。您可以獨立使用任何快照。
刪除環境時,Cloud Composer 不會刪除快照。
根據預設,Cloud Composer 會將快照儲存在環境值區的 snapshots/
資料夾中。您也可以在建立快照時指定自訂位置。
雖然 Cloud Storage UI 會以資料夾的形式顯示資料,方便使用者存取,但值區採用的是一般檔案結構。這不會影響您在 Google Cloud 主控台中儲存及載入快照的方式,但請在直接對儲存桶中的檔案執行作業時,留意這項資訊。詳情請參閱「物件命名空間」。
快照的安全性考量
為降低這類安全風險,您可以在 Secret Manager 中儲存 Airflow DAG 使用的機密資訊,例如金鑰或密碼。詳情請參閱「為環境設定 Secret Manager」。
請務必檢查環境值區的安全性權限。如果您將環境快照儲存在自訂值區中,請確認專案中已正確設定存取權限。指派權限時,請確認環境的服務帳戶具備足夠的權限,可從值區儲存及載入快照。
快照檔案儲存的資料
Cloud Composer 會在快照中儲存下列資料:
- Airflow 設定覆寫。
- 環境變數。
- 列出自訂 PyPI 套件 (做為需求)。
- Airflow 資料庫的備份,包括已執行工作狀態和 DAG 執行記錄。
- 環境值區中的
/dags
、/data
和/plugins
資料夾的備份。 - 環境的 fernet 金鑰。
- 其他環境設定資訊,例如環境的規模和效能參數。Cloud Composer 在載入快照時不會使用這項資訊。
從快照載入哪些資料
Cloud Composer 會從快照載入下列資料:
- Airflow 設定覆寫。
- 環境變數。
自訂 PyPI 套件 (除非您選擇略過安裝)。
Airflow 資料庫的內容,包括已執行工作狀態和 DAG 執行記錄。
快照中的
/dags
、/data
和/plugins
資料夾內容會載入至環境值區。快照中的 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」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
按一下「儲存快照」。
在「Save snapshot」(儲存快照) 對話方塊中,選取快照的儲存位置:
如要在環境值區的
/snapshots
資料夾中儲存快照,請選取「在環境值區中使用快照資料夾 (預設)」。如要在自訂資料夾中儲存快照,請選取「使用其他值區中的自訂資料夾」,然後指定位置。
按一下 [儲存]。
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
與快照儲存位置的值區資料夾 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」頁面。
在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
按一下「Load snapshot」。
在「Load snapshot」對話方塊中,按一下「Browse」。
選取要儲存快照的資料夾。資料夾名稱會列出專案 ID、環境位置,以及快照儲存時的時間戳記。例如
/snapshots/example-project_us-central1_example-environment_2022-01-05T18-59-00
。(選用) 如要略過從快照安裝自訂 PyPI 套件,請選取「略過 PyPI 套件安裝程序」。如果您載入已安裝自訂 PyPI 套件的環境快照,Cloud Composer 就不會安裝這些自訂套件。
按一下「Load」,等待 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
與值區的 URI,後面接著快照的路徑。
範例:
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
欄位中,指定儲存格 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
與 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 儲存或載入環境快照。