如何在我的 Amazon MWAA 环境中安装自定义软件包?
上次更新日期:2022 年 3 月 3 日
我想在 Amazon Managed Workflows for Apache Airflow(Amazon MWAA)环境中使用 plugins.zip 安装自定义软件包。
简短描述
您可以使用 requirements.txt 和 plugins.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
要将 kube_config.yaml 压缩到 plugins.zip 文件中,请运行以下命令:
$ zip plugins.zip 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 文件。