本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 requirements.txt 中管理 Python 依赖项
本主题介绍如何在适用于 Apache Airflow 的亚马逊托管工作流程环境requirements.txt的文件中安装和管理 Python 依赖项。
目录
DAGs 使用 Amazon MWAA CLI 实用工具进行测试
-
命令行界面 (CLI) 实用工具可在本地复制 Amazon MWAA 环境。
-
CLI 在本地构建 Docker 容器镜像,类似于 Amazon MWAA 生产镜像。在部署到 Amazon MWAA 之前,您可以使用它来运行本地 Apache Airflow 环境来开发和 DAGs测试自定义插件和依赖项。
-
要运行 CLI,请参阅aws-mwaa-docker-images
上的 GitHub。
使用 PyPi .org 需求文件格式安装 Python 依赖项
以下部分介绍了根据 PyPi .org 需求文件格式
选项一:来自 Python 程序包索引的 Python 依赖关系
下一节介绍如何在 requirements.txt 文件中指定 Python 程序包索引
选项二:Python Wheel(.whl)
Python Wheel 是一种程序包格式,旨在发布包含已编译构件的库。将 Wheel 程序包作为在 Amazon MWAA 中安装依赖项的方法有几个好处:
-
安装速度更快 — WHL 文件作为单个 ZIP 文件复制到容器中,然后安装到本地,无需下载每个文件。
-
减少冲突-您可以提前确定程序包的版本兼容性。因此,无需
pip以递归方式计算出兼容版本。 -
更高的弹性 — 对于外部托管的库,下游要求可能会发生变化,从而导致 Amazon MWAA 环境中容器之间的版本不兼容。由于不依赖外部来源来获取依赖项,因此无论每个容器何时实例化,其上每个容器都有相同的库。
我们建议使用以下方法来安装 requirements.txt 中来自 Python Wheel 档案 (.whl) 的 Python 依赖项。
在 Amazon S3 存储桶上使用 plugins.zip 文件
Apache Airflow 调度程序、工作程序和网络服务器(适用于 Apache Airflow v2.2.2 及更高版本)在启动期间在您的环境的托管的 Fargate 容器上搜索自定义插件,网址为。 Amazon/usr/local/airflow/plugins/此过程在 Python 依赖项的 Amazon MWAA 的 *pip3 install -r requirements.txt 和 Apache Airflow 服务启动之前开始。plugins.zip文件可用于任何您不想在环境执行期间持续更改的文件,或者您不想向写入用户授予访问权限的任何文件 DAGs。例如,Python 库 Wheel 文件、证书 PEM 文件和配置 YAML 文件。
下一节介绍如何在 Amazon S3 存储桶上安装 plugins.zip 文件中的 Wheel。
-
下载必要的 WHL 文件您可以使用
pip download亚马逊 MWAA aws-mwaa-docker-images 或其他亚马逊 Linux 2 容器 requirements.txt上的现有文件来解析和下载必要的 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 中的 wheel
以下示例假设您已将 Wheel 上传到 Amazon S3 存储桶根目录中的
plugins.zip文件中。例如:--find-links /usr/local/airflow/plugins --no-index numpyAmazon MWAA 从
plugins文件夹中提取numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whlWheel 并将其安装到环境中。
使用托管在 URL 上的 WHL 文件
下一节将介绍如何安装托管在 URL 上的 Wheel。此 URL 必须是可公开访问的,或者可以从您为 Amazon MWAA 环境指定的自定义 Amazon VPC 中访问。
-
提供 URL。向
requirements.txt中的 Wheel 提供 URL。例 公有 URL 上的 Wheel 档案
以下示例从公有站点下载 Wheel。
--find-links https://files.pythonhosted.org/packages/ --no-indexAmazon MWAA 从您指定的 URL 中获取 Wheel 并将其安装到环境中。
注意
URLs 无法通过私有 Web 服务器访问 Amazon MWAA v2.2 及更高版本中的安装要求。
从 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://amzn-s3-demo-bucket/{S3_KEY}" )
运行 DAG 后,使用这个新文件作为 Amazon MWAA plugins.zip,也可以选择与其他插件一起打包。然后通过在前面添加 --find-links /usr/local/airflow/plugins 和 --no-index,但不添加 --constraint 来更新 requirements.txt。
您可以使用此方法离线使用相同的库。
选项三:托管在兼容 PyPi /PEP-503 的私有存储库上的 Python 依赖关系
下一节介绍如何安装托管在私有 URL 上且经过身份验证的 Apache Airflow Extra。
-
将用户名和密码添加为 Apache Airflow 配置选项。例如:
-
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、ERROR 或 CRITICAL 级别的 Apache Airflow 日志。当您选择日志级别时,Amazon MWAA 会发送该级别和所有更高级别的严重性级别的日志。例如,如果您在INFO级别启用日志,Amazon MWAA 会向INFO日志发送日志WARNING、ERROR、和CRITICAL日志级别。 CloudWatch 我们建议在级别启用 Apache Airflow 日志INFO,以便调度程序访问收到的日志。requirements.txt
在日志控制台上访问 CloudWatch 日志
您可以访问调度程序的 Apache Airflow 日志,以安排您的工作流程和解析您的文件夹。dags以下步骤介绍如何在 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 Airflow 用户界面中的错误
你也可以检查你的 Apache Airflow 用户界面,以确定错误是否与其他问题有关。在亚马逊 MWAA 上使用 Apache Airflow 时,你可能遇到的最常见的错误是:
Broken DAG: No module namedx
如果您在 Apache Airflow 用户界面中发现此错误,则您的文件中可能缺少必需的依赖项。requirements.txt
登录 Apache Airflow
你需要你的 Amazon Web Services 账户 内部 Amazon Identity and Access Management (IAM) Apache Airflow 用户界面访问策略:亚马逊 MWAAWeb ServerAccess 权限才能访问你的 Apache Airflow 用户界面。
要访问 Apache Airflow UI,请执行以下操作
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
选择打开 Airflow UI。
示例 requirements.txt 应用场景
您可以在 requirements.txt 中混合搭配不同的格式。以下示例使用不同方式的组合来安装 Extras。
例 PyPi.org 上的额外内容和公共网址
除了在公共 URL 上指定软件包(例如 PyPi兼容 PEP 503 的自定义存储库)之外,还需要使用该--index-url选项。 URLs
aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib