本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
安装 Python 依赖项
Python 依赖关系是指在 Apache Airflow 的亚马逊托管工作流环境中为你的 Apache Airflow 版本安装的 Apache Airflow 基础安装中未包含的任何包或发行版。本主题介绍使用亚马逊 S3 存储桶中的文件在亚马逊 MWAA 环境中安装 Apache Airflow Python 依赖项requirements.txt
的步骤。
目录
先决条件
在完成本页上的步骤之前,您需要具备以下条件。
-
权限 — 您的管理员 AWS 账户 必须已授予您访问您环境的 Amazon MWAAFull ConsoleAccess 访问控制策略的权限。此外,您的执行角色必须允许您的 Amazon MWAA 环境访问您的环境所使用的 AWS 资源。
-
访问权限-如果您需要访问公共存储库才能直接在 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 控制台或 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 的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