访问私有代码仓库以安装 Amazon M

在 Amazon MWAA 上访问私有代码库以安装 Python 依赖项

关键要点

本篇文章展示了如何在 Amazon Managed Workflows for Apache Airflow(AmazonMWAA)环境中,根据组件类型(web服务器、调度器或工作节点)从仅可在虚拟私有云(VPC)中访问的 Git 仓库中选择性安装 Python依赖项。通过这种方法,用户能够更有效地管理私有代码库中的依赖并确保安全性。


许多使用 的客户需要从私有代码库中获取 Python 依赖项。虽然许多客户选择使用方便的 ,该模式允许进行对外互联网请求,但私有代码库可能无法直接访问互联网。最佳实践是仅在需要的地方安装 Python 依赖项。通过使用 ,可以选择性地安装运行代码所需的 Python 依赖项,从而避免因 Web 服务器限制而导致的问题。

这篇文章阐述了一种方法,可以根据 Amazon MWAA 组件类型(web 服务器、调度器或工作节点)从 Git 仓库选择性地安装 Python 依赖项。

解决方案概述

本解决方案侧重于使用私有 Git 仓库选择性地安装 Python 依赖项,您还可以使用本篇文章中展示的模式与私有 Python 包索引,例如 。有关更多信息,请参阅 。

允许您选择 以控制 Web 服务器是可从互联网访问还是仅从您的 VPC 访问。您还可以通过客户 VPC 配置来控制工作节点、调度器和 Web 服务器是否可以访问互联网。本文中演示的环境示意图如下,其中环境使用 进行 Web 服务器访问,而 Apache Airflow的工作节点和调度器则无法从 VPC 访问互联网。

![mwaa- 删除)

对 Amazon MWAA 环境的网络配置有四种可能性:

配置类型描述
公共路由和公共 Web 服务器访问模式通过公共网络访问 Web 服务器
私有路由和公共 Web 服务器访问模式如前图所示的场景
公共路由和私有 Web 服务器访问模式Web 服务器不对外可见
私有路由和私有 Web 服务器访问模式完全隔离在私有网络中

我们在这篇文章中重点介绍一种网络配置,但基本概念适用于任何网络配置。

我们将演示的解决方案基于 Amazon MWAA 在启动时会在每个 Apache Airflow 组件(工作节点、调度器和 Web 服务器)上运行一个 (startup.sh),在安装依赖之前设置所需的环境变量。此启动脚本设置一个环境变量,该变量在 requirements.txt 文件中被引用,以选择性地安装库。

以下步骤可以帮助实现此目的:

  1. 在 Amazon MWAA 环境中创建并安装启动脚本 (startup.sh),该脚本设置环境变量以选择性安装依赖项。
  2. 在 Amazon MWAA 环境中创建并安装全局 Python 依赖项 (requirements.txt),此文件包含所有 Amazon MWAA 组件需要的全局依赖项。
  3. 在 Amazon MWAA 环境中创建并安装特定于组件的 Python 依赖项。这一步涉及为每种组件类型(工作节点、调度器、Web 服务器)创建单独的需求文件,以选择性安装所需的依赖项。

前提条件

在进行演示之前,您需要具备以下条件:

  • 一个
  • 已部署的 Amazon MWAA 环境,且 Web 服务器采用公共访问模式
  • 启用版本控制的 Amazon MWAA 环境 (Amazon S3) 存储桶
  • 在 INFO 级别启用了 日志记录功能,适用于工作节点和 Web 服务器
  • 一个在您的 VPC 内部可访问的 Git 仓库

此外,我们还将一个样例 Python 包上传至 Git 仓库:

bash git clone https://github.com/scrapy/scrapy git clone https://git- codecommit.us-east-1.amazonaws.com/v1/repos/scrapy scrapylocal rm -rf ./scrapy/.git* cp -r ./scrapy/* ./scrapylocal cd scrapylocal git add --all gitcommit -m "first commit" git push

在 Amazon MWAA 环境中创建并安装启动脚本

使用以下示例代码创建 startup.sh 文件:


# !/bin/sh

echo "打印 Apache Airflow 组件" echo $MWAA_AIRFLOW_COMPONENT

if 

## 在 Amazon MWAA 环境中创建并安装全局 Python 依赖项

您的 `requirements.txt` 文件必须包含一个约束语句,以确保列表中的包与您正在使用的  兼容。以 `-r` 开头的语句引用了您在 `startup.sh`
脚本中根据组件类型设置的环境变量。

以下是 `requirements.txt` 文件的示例代码:

`bash --constrainthttps://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.11.txt
-r /usr/local/airflow/dags/${EXTENDED_REQUIREMENTS}`

将 `requirements.txt` 文件上传至 Amazon MWAA 环境的 S3 存储桶:

`bash aws s3 cp requirements.txt s3://

![log-
git](https://d2908q01vomqb2.cloudfront.net/b6692ea5df920cad691c20319a6fffd7a4a766b8/2024/09/26/log-
删除)

## 结论

在本文中,我们展示了一种方法,以便从仅可在 VPC 内部访问的 Git 仓库,根据 Amazon MWAA 组件类型(Web服务器、调度器或工作节点)选择性地安装 Python 依赖项。

我们希望这篇文章为您提供了关于如何使用
 和  在 Amazon MWAA环境中如何工作的更好理解。您可以根据具体的网络设置和需求实现其他变体和配置,利用本文所列出的概念。

* * *

### 关于作者

![Tim删除)  
**Tim Wilhoit** 是 AWS 国防部的高级解决方案架构师,拥有超过 20 年的企业 IT经验。他的兴趣领域是无服务器计算和机器学习/人工智能。在业余时间,Tim 喜欢在湖边度过时光,并支持俄克拉荷马州立大学的队伍。加油,Pokes!

Leave a Reply

Required fields are marked *