本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 requirements.txt 中 Python 理依賴關係
本頁說明我們建議在適用於 Apache 氣流環境之 Amazon 受管工作流程的requirements.txt
檔案中安裝和管理 Python 相依性的最佳實務。
內容
使用 Amazon MWAA CLI 公用程式測試 DAG
-
命令列介面 (CLI) 公用程式可在本機複寫 Apache 氣流環境的 Amazon 受管工作流程。
-
CLI 會在本機建置 Docker 容器映像,類似於 Amazon MWAA 生產映像。這可讓您執行本機 Apache 氣流環境來開發和測試 DAG、自訂外掛程式和相依性,然後再部署到 Amazon MWAA。
-
若要執行 CLI,請參閱上的 aws-m
waa 本機執行程式。 GitHub
使用 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
檔案可用於您不希望在環境執行期間持續變更的任何檔案,或是您可能不想要授與寫入 DAG 的使用者存取權。例如,Python 庫輪盤文件,證書 PEM 文件和配置 YAML 文件。
下節說明如何在 Amazon S3 儲存貯體上安裝plugins.zip
檔案中的輪子。
-
下載必要的 WHL 檔案您可以
pip download
requirements.txt
在 Amazon MWAA 本機執行器或其他 Amazon Linux 2容器上使用,以解決並下載必要的 Python 輪 盤檔案。 $
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 MWAA 會從
plugins
資料夾中取出numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl
滾輪,並將其安裝在您的環境中。
使用託管在網址上的 WHL 文件
以下部分說明如何安裝裝載在 URL 上的操控盤。該 URL 必須可公開存取,或可從您為 Amazon MWAA 環境指定的自訂 Amazon VPC 中存取。
-
提供網址。將 URL 提供給您的
requirements.txt
.範例 公共 URL 上的車輪歸檔
下列範例會從公用網站下載操控盤。
--find-links https://files.pythonhosted.org/packages/ --no-index
Amazon MWAA 會從您指定的 URL 擷取滾輪,然後將它們安裝在您的環境中。
注意
無法從 Amazon MWAA v2.2.2 及更新版本中安裝需求的私有網頁伺服器存取 URL。
從 DAG 建立 WHL 檔案
如果您擁有使用 Apache Airflow v2.2.2 或更新版本的私有網頁伺服器,且因為您的環境無法存取外部儲存庫而無法安裝需求,則可以使用下列 DAG 取得您現有的 Amazon MWAA 要求,並將它們封裝在 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 會將日誌WARNING
、ERROR
、和INFO
日誌層級傳送到 CloudWatch 日CRITICAL
誌。我們建議您在INFO
層級啟用 Apache Airflow 記錄檔,以便排程器檢視接收的requirements.txt
.
![此影像顯示如何在 INFO 層級啟用記錄檔。](images/mwaa-console-logs-info.png)
在記錄主控台上檢視 CloudWatch 記錄檔
您可以檢視排程器排程工作流程和剖析dags
資料夾的 Apache Airflow 記錄。下列步驟說明如何在 Amazon MWAA 主控台上開啟排程器的日誌群組,以及如何在日誌主控台上檢視 Apache 氣流 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 MWAA 上,您可能會遇到的阿帕奇氣流的最常見錯誤是:
Broken DAG: No module named
x
如果您在 Apache Airflow 使用者介面中看到此錯誤,表示您可能會遺漏requirements.txt
檔案中必要的相依性。
登錄到阿帕奇氣流
您需要 AWS Identity and Access Management (IAM) 中的 AWS 帳戶阿帕奇氣流 UI 訪問政策:亞馬遜WebServer訪問許可,才能檢視您的 Apache 氣流使用者介面。
存取您的 Apache 氣流使用者介面
-
在 Amazon MWAA 主控台上開啟「環境」頁面
。 -
選擇一個環境。
-
選擇「開啟氣流 UI」。
範例requirements.txt
案例
您可以在requirements.txt
. 下列範例使用不同方式的組合來安裝額外功能。
範例 PyPi.org 和公共網址上的其他內容
除了公開 URL 上的套件之外,您還需要在指定 PyPi .org 的套件時使用此--index-url
選項,例如自訂 PEP 503 相容的存放庫 URL。
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib