安装 Python 依赖项
Python 依赖项是指在 Amazon MWAA 环境中的 Apache Airflow 版本的 Apache Airflow 基础版安装中未包含的任何程序包或发行版。本主题介绍使用 Amazon S3 存储桶中的 requirements.txt 文件在 Amazon MWAA 环境中安装 Apache Airflow Python 依赖项的步骤。
目录
先决条件
在完成本页上的步骤之前,您需要具备以下条件。
-
权限 — 您的 AWS 账户 必须已获得管理员授权,访问适用于环境的 AmazonMWAAFullConsoleAccess 访问控制策略。此外,执行角色必须允许 Amazon MWAA 环境访问环境所使用的 AWS 资源。
-
访问权限 — 如果您需要访问公共存储库以便直接在 Web 服务器上安装依赖项,则必须将环境配置为具有公共网络 Web 服务器访问权限。有关更多信息,请参阅Apache Airflow 访问模式。
-
Amazon S3 配置 — 用于存储 DAG 的 Amazon S3 存储桶、在
plugins.zip中的自定义插件和在requirements.txt中的 Python 依赖项必须配置为已阻止公共访问和已启用版本控制。
工作方式
在 Amazon MWAA 上,您可以安装所有 Python 依赖项,方法是将 requirements.txt 文件上传到 Amazon S3 存储桶,然后在每次更新文件时在 Amazon MWAA 控制台上指定该文件的版本。Amazon MWAA 运行 pip3 install -r requirements.txt,以在 Apache Airflow 计划程序和每个工作线程上安装 Python 依赖项。
要在环境中运行 Python 依赖项,您必须做三件事:
-
在本地创建
requirements.txt文件。 -
将本地
requirements.txt上传到 Amazon S3 中的存储桶。 -
在 Amazon MWAA 控制台上的要求文件字段中指定此文件的版本。
注意
如果这是您首次创建 requirements.txt 并将其上传到 Amazon S3 存储桶,则还需要在 Amazon MWAA 控制台上指定文件路径。您只需要完成此步骤一次。
Python 依赖项概述
您可以从 Python 程序包索引(Pypi.org)、Python wheels (.whl) 或 Python 依赖项中安装 Apache Airflow Extras 和其他来自环境中兼容 Pypi/Pep-503 的私有存储库上托管的 Python 依赖项。
Python 依赖项位置和大小限制
Apache Airflow 计划程序和工作线程会在 requirements.txt 文件中搜索软件包,然后在环境中将该软件包安装到 /usr/local/airflow/.local/bin 位置。
-
大小限制。我们建议使用
requirements.txt文件,以引用组合大小小于 1 GB 的库。Amazon MWAA 需要安装的库越多,环境上的启动时间就越长。尽管 Amazon MWAA 没有明确限制安装的库的大小,但如果无法在十分钟内安装依赖项,Fargate 服务将超时并尝试将环境回滚到稳定状态。
创建 requirements.txt 文件
以下步骤描述了在本地创建 plugins.zip 文件时我们建议的步骤。
步骤 1:使用 Amazon MWAA CLI 实用工具测试 Python 依赖项
-
命令行界面 (CLI) 实用工具可在本地复制 Amazon MWAA 环境。
-
CLI 在本地构建 Docker 容器镜像,类似于 Amazon MWAA 生产镜像。您可以使用它运行本地 Apache Airflow 环境来开发和测试 DAG、自定义插件和依赖项,然后部署到 Amazon MWAA。
-
要运行 CLI,请参阅 GitHub 上的 aws-mwaa-docker-images
。
步骤 2:创建 requirements.txt
下一节介绍如何在 requirements.txt 文件中指定 Python 程序包索引
上传 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 上传,请执行以下操作
-
以下示例列出所有 Amazon S3 存储桶。
aws s3 ls -
使用以下命令列出 Amazon S3 存储桶中适合环境的文件和文件夹。
aws s3 ls s3://YOUR_S3_BUCKET_NAME -
以下命令将
requirements.txt文件上传到 Amazon S3 存储桶。aws s3 cp requirements.txt s3://amzn-s3-demo-bucket/requirements.txt
使用 Amazon S3 控制台
Amazon S3 控制台是一个基于 Web 的用户界面,可用来创建和管理 Amazon S3 存储桶中的资源。
要使用 Amazon S3 控制台上传,请执行以下操作
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
在 S3 中的 DAG 代码窗格中选择 S3 存储桶链接,在控制台上打开存储桶。
-
选择上传。
-
选择 添加文件。
-
选择
requirements.txt的本地副本,选择上传。
在环境中安装 Python 依赖项
本节介绍如何安装您上传到 Amazon S3 存储桶的依赖项,方法是指定 requirements.txt 文件的路径,并在每次更新时指定 requirements.txt 文件的版本。
在 Amazon MWAA 控制台上指定 requirements.txt 的路径(第一次)
如果这是您首次创建 requirements.txt 并将其上传到 Amazon S3 存储桶,则还需要在 Amazon MWAA 控制台上指定文件路径。您只需要完成此步骤一次。
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
选择编辑。
-
在 Amazon S3 中的 DAG 代码窗格上,选择要求文件 - 可选字段旁边的浏览 S3。
-
选择 Amazon S3 存储桶中的
requirements.txt文件。 -
选择选择。
-
选择下一步、更新环境。
您可以在环境完成更新后立即开始使用新程序包。
在 Amazon MWAA 控制台上指定 requirements.txt 的版本
每次在 Amazon S3 存储桶中上传 requirements.txt 的新版本时,都需要在 Amazon MWAA 控制台上指定 requirements.txt 文件的版本。
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
选择编辑。
-
在 Amazon S3 中的 DAG 代码窗格中,从下拉列表中选择
requirements.txt的版本。 -
选择下一步、更新环境。
您可以在环境完成更新后立即开始使用新程序包。
访问 requirements.txt 的日志
您可以查看调度工作流程并解析 dags 文件夹的计划程序的 Apache Airflow 日志。以下步骤介绍如何在 Amazon MWAA 控制台上打开计划程序的日志组,以及如何在 CloudWatch Logs 控制台上访问 Apache Airflow 日志。
访问 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))
接下来做什么?
使用 GitHub 上的 aws-mwaa-docker-images