如何在我的 Amazon MWAA 环境中安装自定义软件包?

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

我想在 Amazon Managed Workflows for Apache Airflow(Amazon MWAA)环境中使用 plugins.zip 安装自定义软件包。

简短描述

您可以使用 requirements.txtplugins.zip 文件在 Amazon MWAA 中安装 Python 库。当您使用 requirements.txt 文件安装软件包时,默认情况下这些软件包是从 PyPi.org 安装的。但是,如果您需要发送带有已编译构件的库(.whl 文件),则可以使用 plugins.zip 文件安装这些 Python wheel 文件。

使用 plugins.zip 文件,只需将文件放入 plugins.zip 文件即可安装自定义的 Apache Airflow 运算符、钩子、传感器或接口。此文件写在后端 Amazon ECS Fargate 容器中,位置为 /usr/local/airflow/plugins/。插件还可用于导出环境变量以及身份验证和配置文件,例如 .crt.yaml

解决方法

使用 Python Wheel 安装库

Python wheel 是一个包含已编译构件的软件包文件。您可以通过将(.whl)文件放在 plugins.zip 中然后在 requirements.txt 中引用此文件来安装此软件包。将 .whl 文件添加到 plugins.zip 中后更新环境时,.whl 文件将发送到底层 Amazon Elastic Container Service(Amazon ECS)Fargate 容器中的 /usr/local/airflow/plugins/ 位置。要安装 Python Wheel,请执行以下操作:

1.    创建 plugins.zip 文件:

运行以下命令,在系统上创建本地 Airflow 插件目录:

$ mkdir plugins

将 .whl 文件复制到您创建的插件目录中。

运行以下命令,将目录更改为指向本地 Airflow 插件目录:

$ cd plugins
运行以下命令,确保内容具有可执行权限:

plugins$ chmod -R 755

通过运行以下命令压缩插件文件夹中的内容:

plugins$ zip -r plugins.zip

2.    在 requirements.txt 文件中包含 .whl 文件的路径(例如:/usr/local/airflow/plugins/example_wheel.whl)。

注意:请记住为您的 Amazon Simple Storage Service(Amazon S3)存储桶启用版本控制。

3.    将 plugins.zip 和 requirements.txt 文件上载到 S3 存储桶中(例如:s3://example-bucket/plugins.zip)。

4.    要编辑环境,请在 Amazon MWAA console(Amazon MWAA 控制台)中打开 Environments(环境)页面。

5.    从列表中选中环境,然后选择 Edit(编辑)。

6.    在 Specify details(指定详细信息)页面的 DAG code in Amazon S3 section(Simple Storage Service(Amazon S3)中的 DAG 代码部分),根据您的使用案例执行以下任一操作:

注意:如果您是首次将 plugins.zip 或 requirements.txt 文件上载到您的环境中,请选中该文件,然后选择版本。如果您已上载文件并在最近进行了更新,则可以跳过选中文件而仅选择版本。

Plugins file - optional(插件文件 - 可选)字段下选择 Browse S3(浏览 S3)。

在您的 Simple Storage Service(Amazon S3)存储桶中选中 plugins.zip 文件,然后选择 Choose(选择)。

对于 Plugins file - optional(插件文件 - 可选)下的 Choose a version(选择版本),选中已上载文件的最新版本。

--或者--

Requirements file - optional(需求文件 - 可选)下选择 Browse S3(浏览 S3)。

在您的 Simple Storage Service(Amazon S3)存储桶中选中 requirements.txt 文件,然后选择 Choose(选择)。

对于 Requirements file - optional(需求文件 - 可选)下的 Choose a version(选择版本),选中已上载文件的最新版本。

7.    选择 Next(下一步),然后选择 Save(保存)。

安装自定义运算符、钩子、传感器或接口

Amazon MWAA 支持 Apache Airflow 的内置插件管理器,允许您使用自定义的 Apache Airflow 运算符、钩子、传感器或接口。这些自定义插件可以使用平面目录结构和嵌套目录结构放在 plugins.zip 文件中。有关自定义插件的一些示例,请参阅 Examples of custom plugins(自定义插件示例)。

创建自定义插件以生成运行时环境变量

您还可以创建自定义插件,以便在您的 Amazon MWAA 环境中运行时生成环境变量。然后,您可以在 DAG 代码中使用这些环境变量。有关更多信息,请参阅 Creating a custom plugin that generates runtime environment variables(创建用于生成运行时环境变量的自定义插件)。

导出 PEM、.crt 和配置文件

如果您不需要在环境执行期间持续更新特定文件,则可以使用 plugins.zip 来发送这些文件。此外,您还可以放置不需要向写入 DAG 的用户授予访问权限的文件(例如:证书(.crt)、PEM 和配置 YAML 文件)。将这些文件压缩到 plugins.zip 中后,将 plugins.zip 上载到 S3,然后更新环境。复制这些文件时需要具有访问 /usr/local/airflow/plugins 的权限。

您可以通过运行以下命令将自定义 CA 证书压缩到 plugins.zip 文件中:

$ zip plugins.zip ca-certificates.crt
该文件现在位于 /usr/local/airflow/plugins/ca-certificates.crt

要将 kube_config.yaml 压缩到 plugins.zip 文件中,请运行以下命令:

$ zip plugins.zip kube_config.yaml
该文件现在位于 /usr/local/airflow/plugins/kube_config.yaml

对安装过程进行问题排查

如果您在安装这些软件包的过程中遇到问题,可以使用 aws-mwaa-local-runner 在本地测试您的 DAG、自定义插件和 Python 依赖项。

要解决使用 plugins.zip 文件安装 Python 软件包的问题,可以在 Apache Airflow 工件或调度器日志组中查看日志文件(requirements_install_ip)。

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


这篇文章对您有帮助吗?


您是否需要账单或技术支持?