安裝 Python 相依性 - Amazon Managed Workflows for Apache Airflow

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

安裝 Python 相依性

Python 相依性是未包含在 Amazon Managed Workflows for Apache Airflow 環境上 Apache Airflow 版本之 Apache Airflow 基本安裝中的任何套件或分佈。此頁面說明使用 Amazon S3 儲存貯體中的requirements.txt檔案在 Amazon MWAA環境上安裝 Apache Airflow Python 相依性的步驟。

必要條件

您需要下列項目,才能完成此頁面上的步驟。

  • 許可 — AWS 您的管理員必須已授予您環境 A mazonMWAAFullConsoleAccess存取控制政策的存取權。此外,您的執行角色必須允許您的 Amazon MWAA環境,才能存取環境所使用的 AWS 資源。

  • 存取:如果您需要存取公有儲存庫,才能直接在 Web 伺服器上安裝相依性,您的環境必須設定為公有網路 Web 伺服器存取。如需詳細資訊,請參閱Apache Airflow 存取模式

  • Amazon S3 組態 — 用於在 中存放 DAGs、自訂外掛程式plugins.zip和 Python 相依性的 Amazon S3 儲存貯requirements.txt必須設定為 Public Access Blocked and Versioning Enabled

運作方式

在 Amazon 上MWAA,您可以將requirements.txt檔案上傳到 Amazon S3 儲存貯體,然後在每次更新檔案時,在 Amazon MWAA主控台上指定檔案的版本,以安裝所有 Python 相依性。Amazon pip3 install -r requirements.txt會MWAA執行 在 Apache Airflow 排程器和每個工作者上安裝 Python 相依性。

若要在環境上執行 Python 相依性,您必須執行下列三項操作:

  1. 在本機建立requirements.txt檔案。

  2. 將本機 上傳至requirements.txt您的 Amazon S3 儲存貯體。

  3. 在 Amazon MWAA主控台的要求檔案欄位中指定此檔案的版本。

注意

如果這是您第一次建立和上傳 requirements.txt到 Amazon S3 儲存貯體,您也需要在 Amazon MWAA主控台上指定檔案的路徑。您只需完成此步驟一次。

Python 相依性概觀

您可以從 Python 套件索引 (PyPi.org)、Python 輪子 (.whl) 或託管在環境中私有 PyPi/PEP-503 合規儲存庫上的 Python 相依性,安裝 Apache Airflow 額外項目和其他 Python 相依性。

Python 相依性位置和大小限制

Apache Airflow 排程器工作者會尋找requirements.txt檔案中的套件,且套件會安裝在 的環境。 /usr/local/airflow/.local/bin

  • 大小限制 。我們建議requirements.txt檔案參考合併大小小於 1 GB 的程式庫。Amazon MWAA需要安裝的程式庫越多,環境的啟動時間就越長。雖然 Amazon MWAA不會明確限制已安裝程式庫的大小,但如果無法在十分鐘內安裝相依性,則 Fargate 服務將會逾時,並嘗試將環境復原至穩定狀態。

建立 requirements.txt 檔案

下列步驟說明我們建議在本機建立 requirements.txt 檔案的步驟。

步驟 1:使用 Amazon MWAACLI公用程式測試 Python 相依性

  • 命令列介面 (CLI) 公用程式會在本機複寫 Amazon Managed Workflows for Apache Airflow 環境。

  • 會在本機CLI建置類似 Amazon MWAA生產映像的 Docker 容器映像。這可讓您執行本機 Apache Airflow 環境,以在部署至 Amazon 之前開發和測試 、DAGs自訂外掛程式和相依性MWAA。

  • 若要執行 CLI,請參閱aws-mwaa-local-runner上的 GitHub。

步驟 2:建立 requirements.txt

下一節說明如何從requirements.txt檔案中的 Python 套件索引指定 Python 相依性。

Apache Airflow v2
  1. 本機測試 。在建立requirements.txt檔案之前,反覆新增其他程式庫,以尋找套件及其版本的正確組合。若要執行 Amazon MWAACLI公用程式,請參閱aws-mwaa-local-runner上的 GitHub。

  2. 檢閱 Apache Airflow 套件額外項目 。若要檢視 Amazon 上安裝的 Apache Airflow v2 套件清單MWAA,請參閱 GitHub 網站上的 Amazon MWAA本機執行器requirements.txt

  3. 新增限制陳述式 。在檔案頂端新增 Apache Airflow v2 環境的限制requirements.txt檔案。Apache Airflow 限制檔案會指定 Apache Airflow 發行時可用的提供者版本。

    從 Apache Airflow 2.7.2 版開始,您的需求檔案必須包含--constraint陳述式。如果您沒有提供限制,Amazon MWAA會為您指定一個,以確保您需求中列出的套件與您正在使用的 Apache Airflow 版本相容。

    在下列範例中,取代 {environment-version} 您環境的版本號碼,以及 {Python-version} 與您的環境相容的 Python 版本。

    如需與 Apache Airflow 環境相容的 Python 版本資訊,請參閱 Apache Airflow 版本

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    如果限制檔案判斷該xyz==1.0套件與您環境中的其他套件不相容, pip3 install將會失敗,以防止不相容的程式庫安裝在您的環境中。如果任何套件的安裝失敗,您可以在 Logs 的對應日誌串流中檢視每個 Apache Airflow 元件 (排程器、工作者和 Web 伺服器) 的錯誤 CloudWatch 日誌。如需日誌類型的詳細資訊,請參閱 在 Amazon 中檢視 Airflow 日誌 CloudWatch

  4. Apache Airflow 套件 。新增套件額外項目和版本 (==)。這有助於防止相同名稱但不同版本的套件安裝在您的環境中。

    apache-airflow[package-extra]==2.5.1
  5. Python 程式庫 。在您的requirements.txt檔案中新增套件名稱和版本 (==)。這有助於防止從 PyPi.org 自動套用未來的中斷更新。

    library == version
    範例 Boto3 和 psycopg2-binary

    此範例僅供示範之用。boto 和 psycopg2-binary 程式庫包含在 Apache Airflow v2 基礎安裝中,不需要在requirements.txt檔案中指定。

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    如果指定套件時沒有版本,Amazon 會從 PyPi.org MWAA 安裝最新版本的套件。此版本可能會與 中的其他套件衝突requirements.txt

Apache Airflow v1
  1. 本機測試 。在建立requirements.txt檔案之前,反覆新增其他程式庫,以尋找套件及其版本的正確組合。若要執行 Amazon MWAACLI公用程式,請參閱aws-mwaa-local-runner上的 GitHub。

  2. 檢閱 Airflow 套件額外項目 。在 airflow/constraints-1.10.12/constraints-3.7.txt 中檢閱 Apache Airflow v 可用的套件清單。 https://raw.githubusercontent.com/apache/1.10.12

  3. 新增限制檔案 。將 Apache Airflow v1.10.12 的限制檔案新增至requirements.txt檔案頂端。如果限制檔案判斷 xyz==1.0套件與您環境中的其他套件不相容,pip3 install則 將無法防止不相容的程式庫安裝至您的環境。

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. Apache Airflow v1.10.12 套件 。新增 Airflow 套件額外項目和 Apache Airflow v1.10.12 版本 (==)。這有助於防止相同名稱但不同版本的套件安裝在您的環境中。

    apache-airflow[package]==1.10.12
    範例 安全殼層 (SSH)

    下列範例requirements.txt檔案SSH會為 Apache Airflow v1.10.12 安裝 。

    apache-airflow[ssh]==1.10.12
  5. Python 程式庫 。在您的requirements.txt檔案中新增套件名稱和版本 (==)。這有助於防止自動套用來自 PyPi.org 的未來中斷更新。

    library == version
    範例 Boto3

    下列範例requirements.txt檔案會安裝適用於 Apache Airflow v1.10.12 的 Boto3 程式庫。

    boto3 == 1.17.4

    如果指定套件時沒有版本,Amazon 會從 .PyPiorg MWAA 安裝最新版本的套件。此版本可能會與 中的其他套件衝突requirements.txt

requirements.txt 上傳至 Amazon S3

您可以使用 Amazon S3 主控台或 AWS Command Line Interface (AWS CLI) 將requirements.txt檔案上傳至您的 Amazon S3 儲存貯體。

使用 AWS CLI

AWS Command Line Interface (AWS CLI) 是一種開放原始碼工具,可讓您使用命令列 Shell 中的命令與 AWS 服務互動。若要完成此頁面上的步驟,您需要下列項目:

使用 上傳 AWS CLI
  1. 使用下列命令列出所有 Amazon S3 儲存貯體。

    aws s3 ls
  2. 使用下列命令來列出 Amazon S3 儲存貯體中您環境的檔案和資料夾。

    aws s3 ls s3://YOUR_S3_BUCKET_NAME
  3. 下列命令會將requirements.txt檔案上傳至 Amazon S3 儲存貯體。

    aws s3 cp requirements.txt s3://YOUR_S3_BUCKET_NAME/requirements.txt

使用 Amazon S3 主控台

Amazon S3 主控台是 Web 型使用者介面,可讓您建立和管理 Amazon S3 儲存貯體中的資源。

使用 Amazon S3 主控台上傳
  1. 在 Amazon MWAA主控台上開啟環境頁面

  2. 選擇環境。

  3. S3 窗格中的程式碼中選取 S3 儲存貯體連結,以在 Amazon S3 主控台上開啟儲存貯體。 DAG S3

  4. 選擇上傳

  5. 選擇新增檔案

  6. 選取 的本機複本requirements.txt,然後選擇上傳

在環境中安裝 Python 相依性

本節說明如何安裝您上傳至 Amazon S3 儲存貯體的相依性,方法是指定 requirements.txt 檔案的路徑,並在每次更新時指定 requirements.txt 檔案的版本。

在 Amazon MWAA主控台requirements.txt上指定 的路徑 (第一次)

如果這是您第一次建立 並將 上傳requirements.txt到 Amazon S3 儲存貯體,您也需要在 Amazon MWAA主控台上指定檔案的路徑。您只需完成此步驟一次。

  1. 在 Amazon MWAA主控台上開啟環境頁面

  2. 選擇環境。

  3. 選擇編輯

  4. DAG Amazon S3 窗格中的程式碼上,選擇需求檔案 - 選用欄位旁的瀏覽 S3

  5. 選取 Amazon S3 儲存貯體上的requirements.txt檔案。

  6. 選擇 Choose (選擇)

  7. 選擇下一個 更新環境

您可以在環境完成更新後立即開始使用新套件。

在 Amazon MWAA主控台上指定requirements.txt版本

每次在 Amazon S3 儲存貯requirements.txt體中上傳新版本的 時,您需要在 Amazon MWAA主控台上指定requirements.txt檔案的版本。

  1. 在 Amazon MWAA主控台上開啟環境頁面

  2. 選擇環境。

  3. 選擇編輯

  4. DAG Amazon S3 窗格中的程式碼上,在下拉式清單中選擇requirements.txt版本。

  5. 選擇下一個 更新環境

您可以在環境完成更新後立即開始使用新套件。

檢視 的日誌 requirements.txt

您可以檢視排程器排程工作流程和剖析dags資料夾的 Apache Airflow 日誌。下列步驟說明如何在 Amazon MWAA主控台上開啟排程器的日誌群組,以及在 CloudWatch 日誌主控台上檢視 Apache Airflow 日誌。

檢視 的日誌 requirements.txt
  1. 在 Amazon MWAA主控台上開啟環境頁面

  2. 選擇環境。

  3. 監控窗格中選擇 Airflow 排程器日誌群組

  4. 選擇requirements_install_ip日誌串流 中的日誌

  5. 您應該會在 看到安裝在環境中的套件清單/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))
  6. 檢閱套件清單,以及其中任何項目在安裝期間是否發生錯誤。如果發生錯誤,您可能會看到類似下列的錯誤:

    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))

後續步驟?

  • 在本機使用 aws-mwaa-local-runner上的 DAGs測試您的 、自訂外掛程式和 Python 相依性 GitHub。