

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 添加或更新 DAG
<a name="configuring-dag-folder"></a>

有向无环图（DAG）在 Python 文件中定义，该文件将 DAG 的结构定义为代码。您可以使用 AWS CLI 或 Amazon S3 控制台将 DAG 上传到环境。本主题介绍使用 Amazon S3 存储桶中的 `dags` 文件夹，在 Amazon MWAA 环境中添加或更新 Apache Airflow DAG 的步骤。

**Topics**
+ [先决条件](#configuring-dag-folder-prereqs)
+ [工作方式](#configuring-dag-folder-how)
+ [更改了哪些内容？](#configuring-dag-folder-changed)
+ [使用 Amazon MWAA CLI 实用工具测试 DAG](#working-dag-folder-cli-utility)
+ [将 DAG 代码上传到 Amazon S3](#configuring-dag-folder-uploading)
+ [在 Amazon MWAA 控制台上指定 DAG 文件夹的路径（第一次）](#configuring-dag-folder-mwaaconsole)
+ [在 Apache Airflow UI 上访问更改](#configuring-dag-folder-mwaaconsole-view)
+ [接下来做什么？](#configuring-dag-folder-next-up)

## 先决条件
<a name="configuring-dag-folder-prereqs"></a>

在完成本页上的步骤之前，您需要具备以下条件。
+ **权限** — 您的 AWS 账户 必须已获得管理员授权，访问适用于环境的 [AmazonMWAAFullConsoleAccess](access-policies.md#console-full-access) 访问控制策略。此外，[执行角色](mwaa-create-role.md)必须允许 Amazon MWAA 环境访问环境所使用的 AWS 资源。
+ **访问权限** — 如果您需要访问公共存储库以便直接在 Web 服务器上安装依赖项，则必须将环境配置为具有**公共网络** Web 服务器访问权限。有关更多信息，请参阅[Apache Airflow 访问模式](configuring-networking.md)。
+ **Amazon S3 配置** — 用于存储 DAG 的 [Amazon S3 存储桶](mwaa-s3-bucket.md)、在 `plugins.zip` 中的自定义插件和在 `requirements.txt` 中的 Python 依赖项必须配置为*已阻止公共访问*和*已启用版本控制*。

## 工作方式
<a name="configuring-dag-folder-how"></a>

有向无环图（DAG）在单个 Python 文件中定义，该文件将 DAG 的结构定义为代码。它包含以下各项：
+ [DAG](https://airflow.apache.org/docs/stable/concepts.html#dags) 定义。
+ 描述如何运行 DAG 和要运行的[任务](https://airflow.apache.org/docs/stable/concepts.html#tasks)的[运算符](https://airflow.apache.org/concepts.html#operators)。
+ 描述任务运行顺序的[运算符关系](https://airflow.apache.org/concepts.html#bitshift-composition)。

要在 Amazon MWAA 环境中运行 Apache Airflow 平台，您需要将 DAG 定义复制到存储桶中的 `dags` 文件夹。例如，存储桶中的 DAG 文件夹应如下所示：

**Example DAG 文件夹**  

```
dags/
└ dag_def.py
```

Amazon MWAA 每 30 秒自动将新建和更改的对象从 Amazon S3 存储桶同步到 Amazon MWAA 计划程序和工作线程容器的 `/usr/local/airflow/dags` 文件夹，从而保留 Amazon S3 源的文件层次结构，无论文件类型如何。新 DAG 在 Apache Airflow UI 中列出所需的时间由 `scheduler.dag\_dir\_list\_interval` 控制。对现有 DAG 的更改将在下一个 [DAG 处理循环](best-practices-tuning.md#best-practices-tuning-scheduler)中获取。

**注意**  
您不需要在 DAG 文件夹中包含 `airflow.cfg` 配置文件。您可以从Amazon MWAA 控制台覆盖默认 Apache Airflow 配置。有关更多信息，请参阅[在 Amazon MWAA 上使用 Apache Airflow 配置选项](configuring-env-variables.md)。

## 更改了哪些内容？
<a name="configuring-dag-folder-changed"></a>

要查看特定 Apache Airflow 版本的更改，请参阅[发布说明](https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html#release-notes)页面。
+ Apache Airflow v3 配置：[配置参考](https://airflow.apache.org/docs/apache-airflow/3.0.6/configurations-ref.html)
+ Apache Airflow v2 公共接口信息：[Airflow 的公共接口](https://airflow.apache.org/docs/apache-airflow/2.10.3/public-airflow-interface.html)

## 使用 Amazon MWAA CLI 实用工具测试 DAG
<a name="working-dag-folder-cli-utility"></a>
+ 命令行界面 (CLI) 实用工具可在本地复制 Amazon MWAA 环境。
+ CLI 在本地构建 Docker 容器镜像，类似于 Amazon MWAA 生产镜像。您可以使用它运行本地 Apache Airflow 环境来开发和测试 DAG、自定义插件和依赖项，然后部署到 Amazon MWAA。
+ 要运行 CLI，请参阅 GitHub 上的 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)。

## 将 DAG 代码上传到 Amazon S3
<a name="configuring-dag-folder-uploading"></a>

您可以使用 Amazon S3 控制台或 AWS Command Line Interface (AWS CLI) 将 DAG 代码上传到 Amazon S3 存储桶中。以下步骤假设您正在将代码 (`.py`) 上传到 Amazon S3 存储桶中名为 `dags` 的文件夹。

### 使用 AWS CLI
<a name="configuring-dag-folder-cli"></a>

AWS Command Line Interface (AWS CLI) 是一种开源工具，您可以用来在命令行 Shell 中使用命令与 AWS 服务进行交互。要完成本节中的步骤，您需要以下满足以下条件：
+ [AWS CLI – 安装版本 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。
+ [AWS CLI – 使用 `aws configure` 进行快速配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

**要使用 AWS CLI 上传，请执行以下操作**

1. 以下示例列出所有 Amazon S3 存储桶。

   ```
   aws s3 ls
   ```

1. 使用以下命令列出 Amazon S3 存储桶中适合环境的文件和文件夹。

   ```
   aws s3 ls s3://{{YOUR_S3_BUCKET_NAME}}
   ```

1. 以下命令将 `dag_def.py` 文件上传到 `dags` 文件夹。

   ```
   aws s3 cp dag_def.py s3://{{amzn-s3-demo-bucket}}/dags/
   ```

   如果 Amazon S3 存储桶中尚不存在名为 `dags` 的文件夹，则此命令会创建 `dags` 文件夹，并将名为 `dag_def.py` 的文件上传到新文件夹。

### 使用 Amazon S3 控制台
<a name="configuring-dag-folder-console"></a>

Amazon S3 控制台是一个基于 Web 的用户界面，可用来创建和管理 Amazon S3 存储桶中的资源。以下步骤假设您有一个名为 `dags` 的 DAG 文件夹。

**要使用 Amazon S3 控制台上传，请执行以下操作**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 在 **S3 中的 DAG 代码**窗格中选择 **S3 存储桶**链接，在控制台上打开存储桶。

1. 选择 `dags` 文件夹。

1. 选择**上传**。

1. 选择 **添加文件**。

1. 选择 `dag_def.py` 的本地副本，选择**上传**。

## 在 Amazon MWAA 控制台上指定 DAG 文件夹的路径（第一次）
<a name="configuring-dag-folder-mwaaconsole"></a>

以下步骤假设您要在 Amazon S3 桶中指定名为 `dags` 文件夹的路径。

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择要在其中运行 DAG 的环境。

1. 选择**编辑**。

1. 在 **Amazon S3 中的 DAG 代码**窗格上，选择 **DAG 文件夹**字段旁边的**浏览 S3**。

1. 选择 `dags` 文件夹。

1. 选择**选择**。

1. 选择**下一步**、**更新环境**。

## 在 Apache Airflow UI 上访问更改
<a name="configuring-dag-folder-mwaaconsole-view"></a>

您需要在 AWS Identity and Access Management (IAM) 中拥有 AWS 账户 的 [Apache Airflow 用户界面访问策略：亚马逊 MWAAWeb ServerAccess](access-policies.md#web-ui-access) 权限才能访问 Apache Airflow UI。

**要访问 Apache Airflow UI，请执行以下操作**

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/mwaa/home#/environments)。

1. 选择环境。

1. 选择**打开 Airflow UI**。

## 接下来做什么？
<a name="configuring-dag-folder-next-up"></a>

使用 GitHub 上的 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images) 在本地测试 DAG、自定义插件和 Python 依赖项。