疑難排解:在 Apache 氣流 v2 中的 DAG、操作員、連線和其他問題 - Amazon Managed Workflows for Apache Airflow

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

疑難排解:在 Apache 氣流 v2 中的 DAG、操作員、連線和其他問題

本頁的主題說明 Apache Airflow v2 Python 相依性、自訂外掛程式、DAG、操作員、連線、任務和 Web 伺服器問題的解決方案,您可能會遇到的 Apache 氣流環境的 Amazon 受管工作流程。

連線

下列主題說明您在使用 Apache Airflow 連線或使用其他AWS資料庫時可能收到的錯誤。

我無法連線至 Secrets Manager 式

建議下列步驟:

  1. 瞭解如何在中為 Apache 氣流連線和變數建立密鑰使用 AWS Secrets Manager 密碼設定 Apache 氣流連線

  2. 瞭解如何在中針對 Apache 氣流變數 (test-variable) 使用密鑰使用密鑰AWS Secrets Manager對於一個阿帕奇氣流變量

  3. 在中了解如何使用密鑰進行 Apache 氣流連接 (myconn)使用秘密金鑰AWS Secrets Manager對於一個阿帕奇氣流連接

如何在我的執行角色策略中配置secretsmanager:ResourceTag/<tag-key> Secret 管理器條件或資源限制?

注意

適用於 Apache 氣流 2.0 版及更早版本。

目前,您無法使用環境執行角色中的條件金鑰或其他資源限制來限制 Secrets Manager 密碼的存取,這是因為 Apache Airflow 中存在已知問題所致。

我無法連線至雪花

建議下列步驟:

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 將下列項目新增至您環境的 requirements.txt。

    apache-airflow-providers-snowflake==1.3.0
  3. 將下列匯入新增至您的 DAG:

    from airflow.providers.snowflake.operators.snowflake import SnowflakeOperator

確保 Apache Airflow 連線物件包含下列索引鍵/值組:

  1. 連接埠 ID:雪花 _ 連接

  2. 連接器類型:雪花

  3. 主持人:<my account>. <my region if not us-west-2>. 雪花計算 .com

  4. 綱要:<my schema>

  5. 登入:<my user name>

  6. 密碼:

  7. 連接埠:<port, if any>

  8. 額外:

    { "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }

例如:

>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='YOUR_ACCOUNT.YOUR_REGION.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='YOUR_ACCOUNT', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='YOUR_REGION')), ... )

我在氣流使用者介面中看不到我的連線

阿帕奇氣流提供了 Apache 氣流用戶界面中的連接模板。它使用它來生成連接 URI 字符串,而不管連接類型如何。如果 Apache Airflow UI 中沒有連線範本,則可以使用替代連線範本來產生連線 URI 字串,例如使用 HTTP 連線範本。

建議下列步驟:

  1. 在 Apache 氣流使用者介面中檢視亞馬遜 MWAA 提供的連線類型,位於在 Amazon MWAA 環境上安裝的 Apache 氣流供應商套件

  2. 檢視在 CLI 中建立 Apache 氣流連線的命令阿帕奇氣流 CLI 命令參考

  3. 了解如何在 Apache 氣流使用者介面中互換使用連線範本,以便在 Amazon MWAA 上的 Apache 氣流使用者介面中無法使用的連線類型連線類型概觀

Web 伺服器

下列主題說明您在 Amazon MWAA 上針對 Apache 氣流網頁伺服器可能收到的錯誤。

我看到存取網頁伺服器時發生 5xx 錯誤

建議下列步驟:

  1. 檢查 Apache Airflow 組態選項。確認您指定為 Apache 氣流組態選項的索引鍵值配對 (例如AWS Secrets Manager) 已正確設定。如需進一步了解,請參閱 我無法連線至 Secrets Manager 式

  2. 檢查requirements.txt。確認您的氣流「額外」套件和其他程式庫與requirements.txt您的 Apache 氣流版本相容。

  3. 探索在文件中指定 Python 依賴關係的方requirements.txt法,請參閱在 requirements.txt 中 Python 理依賴關係

我看到「調度程序似乎沒有運行」錯誤

如果排程器似乎沒有在執行中,或數小時前收到最後一個「心跳」,您的 DAG 可能不會出現在 Apache Airflow 中,而且不會排定新工作。

建議下列步驟:

  1. 確認您的 VPC 安全群組允許對連接埠進行輸入存取5432。需要此連接埠才能連接到您環境的 Amazon Aurora PostgreSQL 中繼資料資料庫。添加此規則後,請給 Amazon MWAA 幾分鐘,錯誤應該消失。如需進一步了解,請參閱 Amazon MWAA 上 VPC 中的安全性

    注意
    • Aurora PostgreSQL 中繼資料庫是亞馬遜 MWAA 服務架構的一部分,在您的AWS 帳戶.

    • 資料庫相關錯誤通常是排程器失敗的徵兆,而不是根本原因。

  2. 如果排程器未執行,可能是由於許多因素,例如相依性安裝失敗排程器過載。在記錄檔中檢視對應的CloudWatch記錄群組,確認您的 DAG、外掛程式和需求是否正常運作。如需進一步了解,請參閱 針對 Apache 氣流的 Amazon 受管工作流程監控和指標

任務

下列主題說明您在環境中針對 Apache Airflow 工作可能收到的錯誤。

我看到我的任務卡住或沒有完成

如果您的 Apache 氣流任務「卡住」或未完成,我們建議您執行以下步驟:

  1. 可能有大量的定義 DAG。減少 DAG 的數目,並執行環境的更新 (例如變更記錄層級) 以強制重設。

    1. 氣流會剖析 DAG 是否已啟用。如果您使用的環境容量超過 50%,您可能會開始壓倒 Apache 氣流排程器。這會導致CloudWatch量度中的「總剖析時間」較長,或是CloudWatch記錄檔中的 DAG 處理時間過長。還有其他方法可將 Apache Airflow 組態設定最佳化,這些組態不在本指南的討論範圍內。

    2. 若要深入瞭解我們建議調整環境效能的最佳做法,請參閱Amazon MWAA 上阿帕奇氣流的性能調整

  2. 佇列中可能有大量工作。這通常會顯示為處於「無」狀態的大量工作 (而且正在增加),或在中排入佇列的工作和/或擱置中的工作中顯示為大量工作CloudWatch。這種情況可能是由於下列原因而發生:

    1. 如果要執行的工作數量超過環境所能執行的容量,和/或在自動調度資源有時間偵測工作並部署其他 Worker 之前排入佇列的大量工作。

    2. 如果要執行的工作數量超過具有執行容量的環境,建議您減少 DAG 同時執行的工作數量,和/或增加 Apache Airflow Worker 的最小值。

    3. 如果在自動調度資源有足夠時間偵測和部署其他工作者之前,有大量工作已排入佇列中,我們建議您進行人的工作部署和/或增加 Apache Airflow Worker 的最小值。

    4. 您可以使用AWS Command Line Interface (AWS CLI) 中的更新環境命令來變更在您環境中執行的 Worker 數目下限或上限。

      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
    5. 若要深入瞭解我們建議調整環境效能的最佳做法,請參閱Amazon MWAA 上阿帕奇氣流的性能調整

  3. 執行中可能會刪除某些工作,這些工作會顯示為工作記錄,而在 Apache Airflow 中沒有進一步指示的情況下停止。這種情況可能是由於下列原因而發生:

    1. 如果有一個短暫的時刻,其中 1)當前任務超過當前的環境容量,然後是 2)幾分鐘沒有任務執行或排隊,那麼 3)新的任務被排隊。

    2. Amazon MWAA 透過新增其他工作程式,自動調度資源回應第一個案例。在第二個案例中,它會移除其他 Worker。某些正在排入佇列的工作可能會導致 Worker 在移除程序中,而且會在刪除容器時結束。

    3. 我們建議您增加環境中的最少員工數量。另一個選項是調整 DAG 和工作的時間,以確保這些案例不會發生。

    4. 您還可以將最小工作人員設置為等於環境中最大工作人員,以有效地禁用自動調度資源。使用AWS Command Line Interface (AWS CLI) 中的更新環境命令,藉由將 Worker 的最小和最大數目設定為相同,以停用自動調度資源。

      aws mwaa update-environment --name MyEnvironmentName --min-workers 5 --max-workers 5
    5. 若要深入瞭解我們建議調整環境效能的最佳做法,請參閱Amazon MWAA 上阿帕奇氣流的性能調整

  4. 如果您的任務處於「正在運行」狀態,您也可以清除任務或將其標記為成功或失敗。這可讓您的環境自動調度資源元件縮減環境中執行的 Worker 數目。以下圖片顯示了擱淺工作的範例。

    這是一個擱淺任務的圖像。
    1. 選擇擱淺工作的圓形,然後選取 [清除] (如圖所示)。這可讓 Amazon MWAA 縮減工作者的規模;否則,Amazon MWAA 無法判斷哪些 DAG 已啟用或停用,如果仍有佇列的任務,也無法縮小規模。

      Apache Malache May
  5. 若要深入瞭解 Apache 氣流工作生命週期,請參閱 Apache 氣流參考指南中的概念

CLI

下列主題說明您在中執行 Airflow CLI 命令時可能收到的錯誤AWS Command Line Interface。

在 CLI 中觸發 DAG 時,我看到「503」錯誤

氣流 CLI 在 Apache 氣流網頁伺服器上執行,該伺服器的並行性有限。通常最多可同時執行 4 個 CLI 命令。

為什麼dags backfill阿帕奇氣流 CLI 命令失敗? 有沒有解決方法?

注意

以下內容僅適用於 Apache Airflow v2.0.2 環境。

與其他 Apache 氣流 CLIbackfill 命令一樣,命令會在處理任何 DAG 之前在本機剖析所有 DAG,而不論 CLI 作業適用於哪個 DAG。在使用 Apache Airflow v2.0.2 的 Amazon MWAA 環境中,由於 CLI 命令執行時尚未在網頁伺服器上安裝外掛程式和需求,因此剖析作業會失敗,且不會叫用backfill作業。如果您的環境中沒有任何要求或插件,則backfill操作將成功。

為了能夠運行backfill CLI 命令,我們建議在 bash 運算符中調用它。在 bash 運算符中,backfill從 Worker 啟動,允許 DAG 成功解析,因為所有必要的需求和 PLGUIN 都可用並已安裝。以下範例顯示如何使用建立 DAG,BashOperator以執行backfill

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago with DAG(dag_id="backfill_dag", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command="airflow dags backfill my_dag_id" )

電信業者

下列主題說明使用運算子時可能收到的錯誤。

我使用 S3 轉換運算符收到PermissionError: [Errno 13] Permission denied錯誤

如果您嘗試使用 S3Transform 運算子執行 shell 指令碼,並且收到PermissionError: [Errno 13] Permission denied錯誤訊息,我們建議您執行下列步驟。下列步驟假設您有現有的 plugins.zip 檔案。如果您要建立的 plugins.zip,請參閱安裝自定義插件

  1. 使用 aws-mwaa-local-runneron 在本機測試您的 DAG、自訂外掛程式和 Python 相依性GitHub。

  2. 創建您的「轉換」腳本。

    #!/bin/bash cp $1 $2
  3. (可選) macOS 和 Linux 使用者可能需要執行下列命令,以確保指令碼可執行。

    chmod 777 transform_test.sh
  4. 將指令碼新增到您的 plugins.zip 中。

    zip plugins.zip transform_test.sh
  5. 請按照將 plugins.zip 上傳到 Amazon S3 中的步驟進行操作。

  6. 請依照在亞馬遜 MWAA 主控台上指定 plugins.zip 版本中的步驟進行。

  7. 建立下列 DAG。

    from airflow import DAG from airflow.providers.amazon.aws.operators.s3_file_transform import S3FileTransformOperator from airflow.utils.dates import days_ago import os DAG_ID = os.path.basename(__file__).replace(".py", "") with DAG (dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: file_transform = S3FileTransformOperator( task_id='file_transform', transform_script='/usr/local/airflow/plugins/transform_test.sh', source_s3_key='s3://YOUR_S3_BUCKET/files/input.txt', dest_s3_key='s3://YOUR_S3_BUCKET/files/output.txt' )
  8. 請依照將 DAG 程式碼上傳至 Amazon S3 中的步驟進行。