安装 Python 依赖项 - Amazon Managed Workflows for Apache Airflow

安装 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 依赖项,您必须做三件事:

  1. 在本地创建 requirements.txt 文件。

  2. 将本地 requirements.txt 上传到 Amazon S3 中的存储桶。

  3. 在 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 程序包索引中的 Python 依赖项。

Apache Airflow v2
  1. 本地测试。在创建 requirements.txt 文件之前,以迭代方式添加其他库以找到程序包及其版本的正确组合。要运行 Amazon MWAA CLI 实用工具,请参阅 GitHub 上的 aws-mwaa-local-runner

  2. 查看 Apache Airflow 程序包的 Extras。要查看 Amazon MWAA 上为 Apache Airflow v2 安装的程序包列表,请参阅 GitHub 网站上的 Amazon MWAA 本地运行器 requirements.txt

  3. 添加约束语句。在 requirements.txt 文件顶部添加 Apache Airflow v2 环境的约束文件。Apache Airflow 约束文件指定了 Apache Airflow 发布时可用的提供程序版本。

    从 Apache Airflow v2.7.2 开始,要求文件必须包含一条 --constraint 语句。如果您未提供约束条件,Amazon MWAA 将为您指定一个约束条件,以确保您的要求中列出的程序包与您正在使用的 Apache Airflow 版本兼容。

    在以下示例中,请将 {environment-version} 替换为环境的版本号,将 {Python-version} 替换为与环境兼容的 Python 版本。

    要了解与 Apache Airflow 环境兼容的 Python 版本,请参阅 Apache Airflow 版本

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    如果约束文件确定 xyz==1.0 程序包与环境中的其他程序包不兼容,则为了防止将不兼容的库安装到环境中,pip3 install 将会失败。如果任何程序包安装失败,则可以在 CloudWatch Logs 的对应日志流中查看每个 Apache Airflow 组件(调度器、Worker 节点和 Web 服务器)的错误日志。有关日志类型的更多信息,请参阅 在 Amazon CloudWatch 中查看 Airflow 日志

  4. Apache Airflow 程序包。添加程序包 Extras及其版本 (==)。这有助于防止在环境中安装同名但版本不同的程序包。

    apache-airflow[package-extra]==2.5.1
  5. Python 库。在 requirements.txt 文件中添加程序包名称和版本 (==)。这有助于防止自动应用来自 Pypi.org 的未来重大更新。

    library == version
    例 boto3 和 psycopg2-binary

    此示例仅用于演示目的。boto 和 psycopg2-binary 库包含在 Apache Airflow v2 基础版安装中,无需在 requirements.txt 文件中指定。

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    如果指定的程序包没有版本,则 Amazon MWAA 会从 Pypi.org 安装该程序包的最新版本。此版本可能与您 requirements.txt 中的其他程序包冲突。

Apache Airflow v1
  1. 本地测试。在创建 requirements.txt 文件之前,以迭代方式添加其他库以找到程序包及其版本的正确组合。要运行 Amazon MWAA CLI 实用工具,请参阅 GitHub 上的 aws-mwaa-local-runner

  2. 查看 Apache Airflow 程序包的 Extras。在 https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt中,查看 Apache Airflow v1.10.12 的可用程序包列表。

  3. 添加约束文件。在 requirements.txt 文件顶部添加 Apache Airflow v2v1.10.12 的约束文件。如果约束文件确定该 xyz==1.0 程序包与环境中的其他程序包不兼容,则 pip3 install 将无法阻止不兼容的库安装到环境中。

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.7.txt"
  4. Apache Airflow v1.10.12 程序包。添加 Airflow 程序包 Extras和 Apache Airflow v1.10.12 版本 (==)。这有助于防止在环境中安装同名但版本不同的程序包。

    apache-airflow[package]==1.10.12
    例 Secure Shell(SSH)

    以下示例 requirements.txt 文件安装适用于 Apache Airflow v1.10.12 的 SSH。

    apache-airflow[ssh]==1.10.12
  5. Python 库。在 requirements.txt 文件中添加程序包名称和版本 (==)。这有助于防止自动应用来自 Pypi.org 的未来重大更新。

    library == version
    例 Boto3

    以下示例 requirements.txt 文件安装适用于 Apache Airflow v1.10.12 的 Boto3 库。

    boto3 == 1.17.4

    如果指定的程序包没有版本,则 Amazon MWAA 会从 Pypi.org 安装该程序包的最新版本。此版本可能与您 requirements.txt 中的其他程序包冲突。

上传 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 上传,请执行以下操作
  1. 以下示例列出所有 Amazon S3 存储桶。

    aws s3 ls
  2. 使用以下命令列出 Amazon S3 存储桶中适合环境的文件和文件夹。

    aws s3 ls s3://YOUR_S3_BUCKET_NAME
  3. 以下命令将 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 控制台上传,请执行以下操作
  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. S3 中的 DAG 代码窗格中选择 S3 存储桶链接,在 Amazon S3 控制台上打开存储桶。

  4. 选择上传

  5. 选择 添加文件

  6. 选择 requirements.txt 的本地副本,选择上传

在环境中安装 Python 依赖项

本节介绍如何安装您上传到 Amazon S3 存储桶的依赖项,方法是指定 requirements.txt 文件的路径,并在每次更新时指定 requirements.txt 文件的版本。

在 Amazon MWAA 控制台上指定 requirements.txt 的路径(第一次)

如果这是您首次创建 requirements.txt 并将其上传到 Amazon S3 存储桶,则还需要在 Amazon MWAA 控制台上指定文件路径。您只需要完成此步骤一次。

  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. 选择编辑

  4. 在 Amazon S3 中的 DAG 代码窗格上,选择要求文件-可选字段旁边的浏览 S3

  5. 选择 Amazon S3 存储桶中的 requirements.txt 文件。

  6. 选择选择

  7. 选择下一步更新环境

您可以在环境完成更新后立即开始使用新程序包。

在 Amazon MWAA 控制台上指定 requirements.txt 的版本

每次在 Amazon S3 存储桶中上传 requirements.txt 的新版本时,都需要在 Amazon MWAA 控制台上指定 requirements.txt 文件的版本。

  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. 选择编辑

  4. Amazon S3 中的 DAG 代码窗格中,从下拉列表中选择 requirements.txt 的版本。

  5. 选择下一步更新环境

您可以在环境完成更新后立即开始使用新程序包。

查看您 requirements.txt 的日志

您可以查看调度工作流程并解析 dags 文件夹的计划程序的 Apache Airflow 日志。以下步骤介绍如何在 Amazon MWAA 控制台上打开计划程序的日志组,以及如何在 CloudWatch Logs 控制台上查看 Apache Airflow 日志。

要查看 requirements.txt 的日志,请执行以下操作
  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. 监控窗格上选择 Airflow 计划程序日志组

  4. 日志流中选择 requirements_install_ip 日志。

  5. 您应该可以在 /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))
  6. 查看程序包列表以及其中任何程序包在安装过程中是否遇到错误。如果出现问题,您可能会看到类似以下内容的错误:

    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 依赖项。