安装 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 调度器 和 Worker 节点会在 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 生产镜像。这允许您在部署到 Amazon MWAA 之前运行本地 Apache Airflow 环境来开发和测试 DAG、自定义插件和依赖项。
-
要运行 CLI,请参阅 GitHub 上的 aws-mwaa-local-runner
。
步骤 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://
YOUR_S3_BUCKET_NAME
/requirements.txt
使用 Amazon S3 控制台
Amazon S3 控制台是一个基于 Web 的UI ,允许您创建和管理 Amazon S3 桶中的资源。
要使用 Amazon S3 控制台上传,请执行以下操作
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
在 S3 中的 DAG 代码窗格中选择 S3 存储桶链接,在 Amazon 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-local-runner
在本地测试 DAG、自定义插件和 Python 依赖项。