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

3 分钟阅读
0

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

简短描述

使用 requirements.txt 和 plugins.zip 文件在 Amazon MWAA 中安装 Python 库。如果您使用 requirements.txt 文件安装包,则默认情况下,包是从 Python 包索引(来自 PyPI 网站)安装的。如果您发送带有已编译构件的库(.whl 文件),请使用 plugins.zip 文件安装这些 Python wheel。

对于 Amazon MWAA 版本 2.2.2 和 2.4.3,私有 Web 服务器选项不提供出站互联网访问权限。Amazon MWAA 在 Amazon MWAA 服务虚拟私有云 (VPC) 的 Web 服务器上安装要求和插件。这些要求包括具有出站互联网访问权限的 NAT 网关。但是,对于早期的 Amazon MWAA 版本(2.0.2 和 1.10.12),默认情况下 Web 服务器上不安装要求和插件。

对于 Amazon MWAA 版本 2.2.2 和 2.4.3,Amazon MWAA 本地运行程序提供命令行实用程序,用于在 plugins.zip 文件中下载和打包 Python 依赖项 (.whl) 和要求。

对于所有版本的 Amazon MWAA,您可以使用 plugins.zip 文件安装自定义 Apache Airflow 操作、挂钩、传感器或接口。插件导出环境变量、身份验证和配置文件,如 .crt 和 .yaml。

解决方法

在有私有 Web 服务器的环境中使用 .whl 安装库(Amazon MWAA 版本 2.2.2 和 2.4.3)

设置您的 Amazon MWAA 本地环境

1.    构建 Docker 映像并设置 Amazon MWAA 本地环境(来自 GitHub 网站)。MWAA 存储库提供命令行界面 (CLI) 实用程序,用于在本地复制 Amazon MWAA 环境。

2.    将 Python 库和依赖项添加到 requirements.txt 文件中。

3.    使用以下脚本测试 requirements.txt 文件:

#aws-mwaa-local-runner % ./mwaa-local-env test-requirements

输出类似于以下内容:

 Installing requirements.txt
Collecting aws-batch (from -r /usr/local/airflow/dags/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/5d/11/3aedc6e150d2df6f3d422d7107ac9eba5b50261cf57ab813bb00d8299a34/aws_batch-0.6.tar.gz
Collecting awscli (from aws-batch->-r /usr/local/airflow/dags/requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/07/4a/d054884c2ef4eb3c237e1f4007d3ece5c46e286e4258288f0116724af009/awscli-1.19.21-py2.py3-none-any.whl (3.6MB)
    100% |████████████████████████████████| 3.6MB 365kB/s
...
...
...
Installing collected packages: botocore, docutils, pyasn1, rsa, awscli, aws-batch
  Running setup.py install for aws-batch ... done
Successfully installed aws-batch-0.6 awscli-1.19.21 botocore-1.20.21 docutils-0.15.2 pyasn1-0.4.8 rsa-4.7.2

从 requirements.txt 文件构建 .whl 文件

运行以下 package-requirements local-runner 命令,从 requirements.txt 文件中构建 .whl 文件:

#aws-mwaa-local-runner % ./mwaa-local-env package-requirements

该命令将所有 .whl 文件下载到该文件夹中:aws-mwaa-local-runner/plugin

创建包含 .whl 文件和 Amazon MWAA 约束的 plugins.zip 文件

下载 constraints.txt 并将其复制到插件的目录中。然后,运行以下命令创建 plugins.zip 文件:

#aws-mwaa-local-runner % curl -o plugins/constraints.txt "https://raw.githubusercontent.com/apache/airflow/constraints-2.2.2/constraints-3.7.txt"
#aws-mwaa-local-runner % zip -j dags/plugins.zip plugins/constraints.txt

创建一个新的 requirements.txt 文件,该文件指向 plugins.zip 文件中打包的 .whl 文件

1.创建新的 requirements.txt 文件。在您选择的文本工具中,使用与以下格式类似的格式:

=========new requirements.txt==========

--find-links /usr/local/airflow/plugins

--no-index

--constraint “/usr/local/airflow/plugins/constraints.txt”

aws-batch==0.6
====================================

2.将 plugins.zip 文件和 requirements.txt 文件上传到您的 MWAA 集群的 Amazon Simple Storage Service (Amazon S3) 桶。然后,更新环境。

使用 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 文件。运行以下命令在您的系统上创建本地 Amazon MWAA 插件目录:

$ mkdir plugins

2.    将 .whl 文件复制到您创建的插件目录中。运行以下命令将目录更改为指向您的本地 Airflow 插件目录:

$ cd plugins

运行以下命令以确认内容具有可执行权限:

plugins$ chmod -R 755

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

plugins$ zip -r plugins.zip .

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

注意: 请务必为您的 Amazon S3 桶启用版本控制。

4.    将 plugins.zip 和 requirements.txt 文件上传到 Amazon S3 桶(例如,s3://example-bucket/plugins.zip)。

5.    在 Amazon MWAA 控制台上指定 plugins.zip 版本

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

Amazon MWAA 支持 Apache Airflow 的内置插件管理器。插件管理器允许您使用自定义 Apache Airflow 运算符、挂钩、传感器或接口。这些自定义插件以扁平和嵌套的目录结构放置在 plugins.zip 文件中。plugins.zip 文件的内容写入后端 Amazon ECS Fargate 容器,该容器位于:/usr/local/airflow/plugins/。有关详细信息,请参阅自定义插件示例

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

创建一个自定义插件,在您的 Amazon MWAA 环境上生成运行时系统环境变量。然后,在有向无环图 (DAG) 代码中使用这些环境变量。有关详细信息,请参阅创建自定义插件来生成运行时系统环境变量

导出 PEM、.crt 和配置文件 (.yaml)

如果在您的环境运行时您不需要持续更新某些文件,请使用 plugins.zip 文件分发这些文件。您也可以创建 DAG 并将 plugins.zip 用于不需要用户访问的文件(例如证书、PEM 和配置 YAML 文件)。

以下示例命令将 ca-certificates.crt 文件捆绑到 plugins.zip 文件中:

$ zip plugins.zip ca-certificates.crt

使用此 plugins.zip 文件更新环境后,.crt 文件将在每个 Worker 容器的路径 /usr/local/airflow/plugins/ca-certificates.crt 上同步。然后,您的 DAG 会访问此文件。对于其他文件类型,请遵循相同的流程。

安装自定义插件和二进制文件

您可以使用 Oracle for Amazon MWAA 创建自定义插件,并将其与 plugins.zip 文件中的其他自定义插件和二进制文件结合使用。这包括非 Python 包。有关详细信息,请参阅使用 Oracle 创建自定义插件

要向容器添加二进制文件或设置和修改环境变量,请参阅使用 Apache Hive 和 Hadoop 创建自定义插件

解决包安装问题

使用 aws-mwaa-local-runner(来自 GitHub 网站)测试 DAG、自定义插件和 Python 依赖项。

查看日志文件。您可以从 Apache Airflow Worker 或 Scheduler 日志组查看该文件。

重要事项: 在安装包或 plugins.zip 文件之前,最佳做法是使用 Amazon MWAA CLI 实用程序测试 Python 依赖项和 plugins.zip 文件

相关信息

插件

AWS 官方
AWS 官方已更新 10 个月前