本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安装 Python 依赖项
Python 依赖关系是指在 Apache Airflow 的亚马逊托管工作流环境中为你的 Apache Airflow 版本安装的 Apache Airflow 基础安装中未包含的任何包或发行版。本主题介绍使用亚马逊 S3 存储桶中的文件在亚马逊 MWAA 环境中安装 Apache Airflow Python 依赖项requirements.txt的步骤。
目录
先决条件
在完成本页上的步骤之前,您需要具备以下条件。
-
权限 — 您的管理员 Amazon Web Services 账户 必须已授予您访问您环境的 Amazon MWAAFull ConsoleAccess 访问控制策略的权限。此外,您的执行角色必须允许您的 Amazon MWAA 环境访问您的环境所使用的 Amazon 资源。
-
访问权限-如果您需要访问公共存储库才能直接在 Web 服务器上安装依赖项,则您的环境必须配置为具有公共网络 Web 服务器访问权限。有关更多信息,请参阅Apache Airflow 访问模式。
-
Amazon S3 配置 — 用于存储您的 DAGs自定义插件和 Python 依赖项的 Amazon S3 存储桶
requirements.txt必须配置为已阻止公共访问和启用版本控制。plugins.zip
工作原理
在 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 () 或 Python whe .whl els () 或环境中兼容私有的 /Pep-503 存储库上 PyPi托管的 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 文件
以下步骤描述了在本地创建 plugins.zip 文件时我们建议的步骤。
步骤 1:使用 Amazon MWAA CLI 实用工具测试 Python 依赖项
-
命令行界面 (CLI) 实用工具可在本地复制 Amazon MWAA 环境。
-
CLI 在本地构建 Docker 容器镜像,类似于 Amazon MWAA 生产镜像。这允许您在部署到亚马逊 MWAA 之前运行本地 Apache Airflow 环境来开发和 DAGs测试自定义插件和依赖项。
-
要运行 CLI,请参阅aws-mwaa-docker-images
上的 GitHub。
步骤 2:创建 requirements.txt
下一节介绍如何在 requirements.txt 文件中指定 Python 程序包索引
上传 requirements.txt 到 Amazon S3
您可以使用 Amazon S3 控制台或 Amazon Command Line Interface (Amazon CLI) 将requirements.txt文件上传到您的 Amazon S3 存储桶。
使用 Amazon CLI
Amazon Command Line Interface (Amazon CLI) 是一个开源工具,可让您使用命令行 shell 中的命令与 Amazon 服务进行交互。要完成本节中的步骤,您需要以下满足以下条件:
要使用上传 Amazon 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 的UI ,允许您创建和管理 Amazon S3 桶中的资源。
要使用 Amazon S3 控制台上传,请执行以下操作
-
在 Amazon MWAA 控制台上打开环境页面
。 -
选择环境。
-
在 S3 窗格的 DAG 代码中选择 S 3 存储桶链接,在控制台中打开您的存储桶。
-
选择上传。
-
选择 添加文件。
-
选择
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
您可以查看 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))
接下来做什么?
使用aws-mwaa-docker-images