測試 DAG

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

在將 DAG 部署至實際工作環境前,您可以執行 Airflow CLI 子指令,在執行 DAG 的相同情境下剖析 DAG 程式碼。

使用 Composer 本機開發 CLI 工具在本機測試 DAG

Composer 本機開發 CLI 工具可在本機執行 Airflow 環境,簡化 Cloud Composer 2 的 Apache Airflow DAG 開發作業。這個本機 Airflow 環境會使用特定 Cloud Composer 2 版本的映像檔。

您可以使用這個本機 Airflow 環境開發及測試 DAG,然後將 DAG 轉移至測試 Cloud Composer 環境。本指南的其餘部分會說明如何在測試 Cloud Composer 環境中測試 DAG。

在建立 DAG 期間進行測試

您可以在本機執行單一工作執行個體,並查看記錄輸出內容。您可以查看輸出內容,檢查語法和工作錯誤。本機測試不會檢查依附元件,也不會向資料庫傳達狀態。

建議您將 DAG 放在測試環境中的 data/test 資料夾中。

建立測試目錄

在環境的值區中建立測試目錄,並將 DAG 複製到該目錄。

gcloud storage cp BUCKET_NAME/dags \
  BUCKET_NAME/data/test --recursive

更改下列內容:

  • BUCKET_NAME:與 Cloud Composer 環境相關聯的值區名稱。

範例:

gcloud storage cp gs://us-central1-example-environment-a12bc345-bucket/dags \
  gs://us-central1-example-environment-a12bc345-bucket/data/test --recursive

如要進一步瞭解如何上傳 DAG,請參閱「新增及更新 DAG」一文。

檢查語法錯誤

如要檢查已上傳至 /data/test 資料夾的 DAG 是否有語法錯誤,請輸入下列 gcloud 指令:

gcloud composer environments run \
  ENVIRONMENT_NAME \
  --location ENVIRONMENT_LOCATION \
  dags list -- --subdir /home/airflow/gcs/data/test

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。
  • ENVIRONMENT_LOCATION:環境所在的地區。

檢查工作錯誤

如要檢查已上傳至 /data/test 資料夾的 DAG 是否有與特定工作相關的錯誤,請執行下列 gcloud 指令:

gcloud composer environments run \
  ENVIRONMENT_NAME \
  --location ENVIRONMENT_LOCATION \
  tasks test -- --subdir /home/airflow/gcs/data/test \
  DAG_ID TASK_ID \
  DAG_EXECUTION_DATE

更改下列內容:

  • ENVIRONMENT_NAME:環境名稱。
  • ENVIRONMENT_LOCATION:環境所在的地區。
  • DAG_ID:DAG 的 ID。
  • TASK_ID:工作 ID。
  • DAG_EXECUTION_DATE:DAG 的執行日期。這個日期用於建立範本。無論您在此指定的日期為何,DAG 都會立即執行。

範例:

gcloud composer environments run \
  example-environment \
  --location us-central1 \
  tasks test -- --subdir /home/airflow/gcs/data/test \
  hello_world print_date 2021-04-22

更新及測試已部署的 DAG

如要在測試環境中測試 DAG 更新,請按照下列步驟操作:

  1. 複製要更新至 data/test 的已部署 DAG。
  2. 更新 DAG。
  3. 測試 DAG。
    1. 檢查語法錯誤
    2. 檢查是否有與特定工作相關的錯誤
  4. 確認 DAG 是否已成功執行。
  5. 在測試環境中關閉 DAG。
    1. 前往 Airflow UI > DAGs 頁面。
    2. 如果您要修改的 DAG 持續執行,請關閉 DAG。
    3. 如要加快處理未完成的工作,請按一下工作並點選「標示為成功」
  6. 將 DAG 部署至實際工作環境。
    1. 在實際工作環境中關閉 DAG。
    2. 將更新後的 DAG 上傳至實際工作環境的 dags/ 資料夾。

測試 DAG 常見問題

如何隔離在實際工作環境和測試環境中執行的 DAG?

舉例來說,Airflow 在所有 DAG 執行作業共用的 dags/ 資料夾中,提供原始碼的通用存放區。您想更新實際工作環境或測試環境中的原始碼,但又不想因中途變更程式碼而影響 DAG 的執行。

Airflow 不提供嚴密的 DAG 隔離機制,因此建議您將 Cloud Composer 實際工作環境和測試環境分開,以免發生測試環境 DAG 干擾到實際工作環境 DAG 的情形。

透過不同 GitHub 分支版本執行整合測試時,如何避免 DAG 干擾情形

請使用專屬工作名稱來避免干擾情形。舉例來說,您可以在工作 ID 前面加上分支版本名稱。

進行 Airflow 整合測試的最佳做法為何?

建議您使用專屬環境來進行 Airflow 整合測試。如要確認 DAG 是否執行成功,您可以在 Cloud Storage 資料夾中寫入一個檔案,然後檢查您整合測試案例中的內容。

如何與其他 DAG 協作者有效率地合作?

每位協作者都可在 data/ 資料夾中有一個用於開發的子目錄。

Airflow 排程器或網路伺服器不會自動處理新增至 data/ 資料夾中的 DAG

DAG 協作者可使用 gcloud composer environments run 指令和 test 子指令,並搭配 --subdir 標記指定協作者的開發目錄,藉此手動執行 DAG。

例如:

gcloud composer environments run test-environment-name \
  tasks test -- dag-id task-id execution-date \
  --subdir /home/airflow/gcs/data/alice_dev

如何讓部署環境和實際工作環境保持同步?

如何管理存取權:

  • 如要進行驗證,請使用服務帳戶

  • 如要控管存取權,請使用 Identity and Access Management 和 Cloud Composer 角色和權限

如要從開發環境部署至正式環境:

  • 請確認環境變數和 PyPI 套件等設定均一致。

  • 請確認 DAG 引數均一致。如要避免硬式編碼,建議您使用 Airflow 巨集和變數。

    例如:

    gcloud composer environments run test-environment-name \
      variables set -- DATA_ENDPOINT_KEY DATA_ENDPOINT_VALUE
    

後續步驟