本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 requirements.txt 中 Python 理依賴關係
本頁說明我們建議在適用於 Apache 氣流環境之 Amazon 受管工作流程的requirements.txt
檔案中安裝和管理 Python 相依性的最佳實務。
內容
使用 Amazon MWAA CLI 實DAGs用程序測試
-
命令列介面 (CLI) 公用程式可在本機複寫 Apache 氣流環境的 Amazon 受管工作流程。
-
它會在本地CLI構建類似於 Amazon MWAA 生產映像的 Docker 容器映像。這可讓您在部署到 Amazon 之前執行本機 Apache Airflow 環境來開發和測試DAGs、自訂外掛程式和相依性MWAA。
-
要運行CLI,請參閱(詳見) GitHub。aws-mwaa-local-runner
使用 PyPi .org 要求文件格式安裝 Python 依賴關係
以下部分描述了根據 PyPi .org 要求文件格式
選項一:Python Package 索引中的依賴關係
以下部分介紹如何從requirements.txt
文件中的 Python P ackage 索引指定 Python
選項二:Python 輪(.whl)
Python 滾輪是一種包格式,旨在將庫與編譯的工件一起運送。輪子套件作為在 Amazon 中安裝相依性的方法有幾個好處MWAA:
-
更快的安裝 — WHL 檔案會以單一的形式複製到容器中ZIP,然後在本機安裝,而無需下載每個檔案。
-
減少衝突 — 您可以事先判斷套件的版本相容性。因此,不需要遞歸地計
pip
算出兼容的版本。 -
彈性更高 — 使用外部託管的程式庫,下游需求可能會改變,導致 Amazon MWAA 環境上容器之間的版本不相容。由於不依賴於依賴關係的外部源,無論每個容器何時實例化,每個容器都具有相同的庫。
我們建議您使用以下方法來安裝 Python 的依賴關係從 Python 輪子存檔(.whl
)在您的requirements.txt
.
使用 Amazon S3 存儲桶上的plugins.zip
文件
Apache 氣流排程器、工作者和網頁伺服器 (適用於 Apache Airflow v2.2.2 及更新版本) 會在您 AWS環境的受管理 Fargate 容器上啟動期間尋找自訂外掛程式。/usr/local/airflow/plugins/
這個過程在 Amazon MWAA 的 *
pip3 install -r requirements.txt
Python 依賴關係和 Apache 氣流服務啟動之前開始。plugins.zip
檔案可用於您不希望在環境執行期間持續變更的任何檔案,或是您可能不想將存取權授與寫入的使用者DAGs。例如,Python 庫輪盤文件,證書PEM文件和配置YAML文件。
下節說明如何在 Amazon S3 儲存貯體上安裝plugins.zip
檔案中的輪子。
-
下載必要的WHL檔案您可以在 Amazon MWAA 本機執行
器或其他 Amazon Linux 2 容器 requirements.txt
上使用pip download
現有檔案,以解決並下載必要的 Python wheel 檔案。 $
pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins"
$
cd "
$AIRFLOW_HOME
/plugins"$
zip "
$AIRFLOW_HOME
/plugins.zip" * -
在中指定路徑
requirements.txt
。使用指定 requirements.txt 頂部的插件目錄,--find-links
並指示 pip
不要使用從其他來源安裝--no-index
,如下所示 --find-links /usr/local/airflow/plugins --no-index
範例 在 requirements.txt 中的車輪
下列範例假設您已將輪子上傳到 Amazon S3 儲存貯體根目錄的
plugins.zip
檔案中。例如:--find-links /usr/local/airflow/plugins --no-index numpy
Amazon 從
plugins
文件夾中MWAA取出numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl
輪子並將其安裝在您的環境中。
使WHL用託管在 URL
以下部分描述如何安裝託管在URL. URL必須可公開存取,或從您為 Amazon VPC MWAA 環境指定的自訂 Amazon 中存取。
-
提供一個 URL. 提供一URL個輪子在你的
requirements.txt
.範例 在公共車輪檔案 URL
下列範例會從公用網站下載操控盤。
--find-links https://files.pythonhosted.org/packages/ --no-index
Amazon 從URL您指定的中MWAA獲取輪子並將其安裝在您的環境中。
注意
URLs無法從 Amazon MWAA v2.2.2 及更新版本的私有網頁伺服器安裝需求存取。
從創建WHL文件 DAG
如果您擁有使用 Apache Airflow v2.2.2 或更新版本的私有網頁伺服器,且因為您的環境無法存取外部儲存庫而無法安裝需求,則可以使用以下指令取得現有的 Amazon MWAA 要求,並DAG將它們封裝在 Amazon S3 上:
from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago S3_BUCKET = 'my-s3-bucket' S3_KEY = 'backup/plugins_whl.zip' with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://
{S3_BUCKET}
/{S3_KEY}
" )
執行之後DAG,請使用這個新檔案做為您的 Amazon MWAAplugins.zip
,選擇性地與其他外掛程式一起封裝。然後,更新您requirements.txt
之前的--find-links /usr/local/airflow/plugins
和--no-index
不添加--constraint
。
此方法可讓您離線使用相同的程式庫。
選項三:託管在私有 PyPi/PEP-503 兼容存儲庫上的 Python 依賴關係
以下部分描述如何安裝 Apache 氣流額外託管在URL具有身份驗證的私有。
-
將您的使用者名稱和密碼新增為 Apache 氣流組態選項。例如:
-
foo.user
:YOUR_USER_NAME
-
foo.pass
:YOUR_PASSWORD
-
-
建立您的
requirements.txt
檔案。將下列範例中的預留位置替換為您的私人URL,以及您新增為 Apache Airflow 組態選項的使用者名稱和密碼。例如:--index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
-
將任何其他程式庫新增至您的
requirements.txt
檔案。例如:--index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3
在 Amazon MWAA 主控台上啟用日誌
Amazon MWAA 環境的執行角色需要許可才能將日誌傳送到 CloudWatch 日誌。若要更新執行角色的權限,請參閱Amazon MWAA 執行角色。
您可以在INFO
、WARNING
或CRITICAL
層級啟用 Apache 氣流記錄。ERROR
當您選擇日誌級別時,Amazon MWAA 會傳送該級別和所有更高嚴重性級別的日誌。例如,如果您在INFO
層級啟用日誌,Amazon MWAA 會將INFO
日誌WARNING
、ERROR
、和CRITICAL
日誌級別傳送到 CloudWatch 日誌。我們建議您在INFO
層級啟用 Apache Airflow 記錄,讓排程器檢視為requirements.txt
.
在記錄主控台上檢視 CloudWatch 記錄檔
您可以檢視排程器排程工作流程和剖析dags
資料夾的 Apache Airflow 記錄。下列步驟說明如何在 Amazon MWAA 主控台上開啟排程器的日誌群組,以及如何在日誌主控台上檢視 Apache Airflow CloudWatch 日誌。
若要檢視 requirements.txt
-
在 Amazon MWAA 控制台上打開「環境」頁面
。 -
選擇一個環境。
-
在 [監視] 窗格中選擇 Airflow 排程器記錄群組。
-
在「
requirements_install_ip
記錄資料流」中選擇記錄檔。 -
您應該會看到已安裝在環境中的套件清單,位於
/usr/local/airflow/.local/bin
。例如:Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1)) Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
-
檢閱套件清單,以及這些套件是否在安裝過程中遇到錯誤。如果發生錯誤,您可能會看到類似下列內容的錯誤:
2021-03-05T14:34:42.731-07:00 No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4)) No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
檢視 Apache 氣流使用者介面中的錯誤
您也可以檢查 Apache 氣流使用者介面,以識別錯誤是否可能與其他問題有關。在 Amazon 上,您可能會遇到的 Apache 氣流的最常見錯誤MWAA是:
Broken DAG: No module named
x
如果您在 Apache Airflow 使用者介面中看到此錯誤,表示您可能會遺漏requirements.txt
檔案中必要的相依性。
登錄到阿帕奇氣流
您需要 AWS Identity and Access Management (IAM) 中的 AWS 帳戶阿帕奇氣流 UI 訪問策略:A mazonMWAAWeb ServerAccess權限才能檢視您的 Apache 氣流使用者介面。
存取您的 Apache 氣流使用者介面
-
在 Amazon MWAA 控制台上打開「環境」頁面
。 -
選擇一個環境。
-
選擇「開啟氣流 UI」。
範例requirements.txt
案例
您可以混合和匹配不同的格式在你的requirements.txt
. 下列範例使用不同方式的組合來安裝額外功能。
範例 PyPi.org 和公眾上的額外內容 URL
除了公URL共軟件包(例如自定義 PEP 503 兼容存儲庫)之外,您還需要在從 PyPi .org 指定軟件包時使用該--index-url
選項URLs。
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib