如何在我的 Amazon MWAA 环境中安装库?

上次更新日期:2022 年 3 月 2 日

我想要在 Amazon Managed Workflows for Apache Airflow (Amazon MWAA) 环境中安装库。

简短描述

当您创建 Amazon MWAA 环境中,一些基本安装包/发行版将包含在 Apache Airflow 基本安装中。您可以在 Amazon MWAA 环境中使用 requirements.txtplugins.zip 文件安装基本安装中包含的包之外的安装包。

默认情况下,从公有存储库 (PyPi.org) 中将安装包安装在 Amazon MWAA 中。您还可以从私有托管的存储库(例如 JFROG 和 AWS CodeArtifact)安装软件包。

解决方法

您可以从默认的公有存储库 (PyPi.org) 或私有存储库安装库。选择最适合您的使用案例的方法。

从公有存储库安装

要从默认的公有存储库安装软件包,只需在 requirements.txt 文件中添加软件包名称和版本 (==) 即可。然后,将 requirements.txt 文件上传到您的 Amazon S3 存储桶。使用 Amazon MWAA 控制台更新环境时,请在需求文件字段中指定此文件的版本。

从私有或本地存储库安装

如果您的环境没有互联网访问权限,无法从公有存储库安装软件包,则可以从私有托管的 PyPi 存储库中安装库/自定义软件包。为此,请下载所有软件包并将这些软件包包含在您的本地存储库中,这些存储库可能是 JFROG、AWS CodeArtifact 或任何其他存储库。将软件包添加到存储库后,使用存储库的 URL 导入这些软件包。要导入私有库,请在 requirements.txt 文件中指定存储库 URL (--index-url)。

使用以下选项之一从本地存储库安装软件包(例如:redis==3.5.3)。

如果您使用的是私有存储库,请更新您的 requirements.txt 文件以包含以下内容:

--trusted-host artifactory-aws.example-org.com
--index-url https://artifactory-aws.example-org.com/artifactory/api/pypi/pypi-virtual/simple
redis==3.5.3

如果您使用的是 JFROG 存储库,请更新您的 requirements.txt 文件以包含以下内容:

--index-url=https://${AIRFLOW__JFROG__USER}:${AIRFLOW__JFROG__PASS}@<server-name>.jfrog.io/artifactory/api/pypi/<repository>/simple
redis==3.5.3

您还可以在文本文件中包含 --index-url,而不是直接在 requirements.txt 文件中添加 URL。您可以在文本文件(例如codeartifact.txt)中指定 --index-url,然后将 codeartifact.txt 上载到 /dags 文件夹下的 S3 存储桶中。

然后,更新 requirements.txt 文件以包含 codeartifact.txt 文件的路径:

-r /usr/local/airflow/dags/codeartifact.txt
<br>redis==3.5.3

要了解如何执行以下操作,请参阅适用于分析的 Amazon MWAA 研讨会 - 私有 PyPi 存储库

注意:此解决方案使用 codeartifact.txt 文件来指定 --index-url

  • 使用 AWS CodeArtifact 创建一个私有 PyPi 存储库,该存储库具有与外部源的连接。
  • 在没有连接到公共互联网的情况下,预置私有 MWAA 环境,并利用 VPC 终端节点连接到 AWS CodeArtifact。
  • 创建 Lambda 函数以使私有 PyPi 存储库的授权令牌保持最新。

安装软件包

要从公有或私有存储库安装软件包,请更新环境以包含 requirement.txt 文件:

  1. 创建 requirements.txt 文件的本地副本,然后使用 Amazon S3 控制台AWS Command Line Interface (AWS CLI) 将此副本上传到 Amazon Simple Storage Service (Amazon S3) 存储桶(示例:s3://example-bucket/requirements.txt)。
    注意:请记住在 S3 存储桶上开启版本控制。
  2. 要编辑环境,请在 Amazon MWAA 控制台中打开 Environments(环境)页面。
  3. 从列表中选中环境,然后选择 Edit(编辑)。
    注意:如果您是首次将 requirements.txt 文件上传到您的环境中,请按照步骤 4、5 和 6 进行操作。如果您已上传文件并在最近进行了更新,请仅执行步骤 6。
  4. Specify details(指定详细信息)页面的 DAG code in Amazon S3(Amazon S3 中的 DAG 代码)部分,选择 Requirements file - optional(需求文件 - 可选)字段下的 Browse S3(浏览 S3)。
  5. 在您的 Amazon S3 存储桶中选择 requirements.txt 文件,然后选择 Choose(选择)。
  6. 对于 Requirements file - optional(需求文件 - 可选)字段下的 Choose a version(选择版本),选中已上载的最新版本。
  7. 选择 Next(下一步),然后选择 Save(保存)。

您可以在环境更新后立即开始使用新软件包。

环境需要 15 到 20 分钟才能获得更新。更新环境后,将安装 requirements.txt 文件中列出的软件包。如果未在 10 分钟内安装依赖项,则 AWS Fargate 服务可能会超时并尝试将环境回滚到稳定状态。

对安装过程进行问题排查

如果在安装这些软件包的过程中遇到问题,您可以从 Apache Airflow 工件/调度器日志组中查看日志文件 (requirements_install_ip)。

如果日志文件中包含软件包错误,则可以通过添加其他版本的软件包来重试安装软件包。最佳实践是在 requirements.txt 文件前加上约束文件。

示例:

--constraint "https://raw.githubusercontent.com/apache/airflow/constraints-example-Airflow-version/constraints-3.7.txt"

注意:务必将 example-Airflow-version 替换为您的环境的版本号。

重要提示:在 Amazon MWAA 环境中安装软件包之前,最佳实践是使用 Amazon MWAA CLI 实用程序 (aws-mwaa-local-runner) 测试 Python 依赖项。