

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

# 管理与 Apache Airflow 的连接
管理连接

本章介绍如何为 Amazon MWAA 环境配置 Apache Airflow 连接。

**Topics**
+ [

## Apache Airflow 变量和连接概述
](#manage-connections-t-overview)
+ [

# 安装在 Amazon MWAA 环境中的 Apache Airflow 提供程序包
](connections-packages.md)
+ [

# 连接类型概述
](manage-connection-types.md)
+ [

# 使用密钥配置 Apache Airflow 连接 Amazon Secrets Manager
](connections-secrets-manager.md)

## Apache Airflow 变量和连接概述
概览

在某些情况下，您可能需要为环境（例如 Amazon 配置文件）指定其他连接或变量，或者为 Apache Airflow 元存储中的连接对象添加执行角色，然后从 DAG 内部引用该连接。
+ **自行管理的 Apache Airflow**。在自行管理的 Apache Airflow 安装中，可以在 `airflow.cfg` 中设置 [Apache Airflow](https://airflow.apache.org/docs/apache-airflow/stable/howto/set-config.html) 配置选项。

  ```
  [secrets]
  backend = airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend
  backend_kwargs = {"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"}
  ```
+ **Amazon MWAA 上的 Apache Airflow**。在 Amazon MWAA 上，您需要将这些配置设置作为 [Apache Airflow 配置选项](configuring-env-variables.md)添加到 Amazon MWAA 控制台上。Apache Airflow 配置选项作为环境变量写入环境，并覆盖相同设置的所有其他现有配置。

# 安装在 Amazon MWAA 环境中的 Apache Airflow 提供程序包
Apache Airflow 程序包

本页列出了 Amazon MWAA 为所有支持的 Apache Airflow 环境安装的 Apache Airflow 提供程序包。有关这些程序包的更多信息，请参阅[程序包 Extras 的 Apache Airflow 参考](https://airflow.apache.org/docs/apache-airflow/stable/extra-packages-ref.html)。

**注意**  
为了确保与 CloudWatch 日志记录的兼容性不会被其他 Python 库安装所覆盖，Amazon MWAA 在执行后会安装 W [atchtower](https://pypi.org/project/watchtower/2.0.1/) 版本 2.0.1。`pip3 install -r requirements.txt`

**Topics**
+ [

## 约束条件文件
](#connections-packages-constraints)
+ [

## 特定版本的提供程序包
](#connections-packages-table)

## 约束条件文件


从 Apache Airflow v2.7.2 开始，要求文件必须包含一条 `--constraint` 语句。如果您未提供约束条件，Amazon MWAA 将为您指定一个约束条件，以确保您的要求中列出的程序包与您正在使用的 Apache Airflow 版本兼容。

Apache Airflow 约束条件文件指定了 Apache Airflow 发布时可用的提供程序版本。但是，在许多情况下，较新的提供程序与该版本的 Apache Airflow 兼容。由于必须使用约束条件，因此要指定提供程序包的较新版本，因此可以修改特定提供程序版本的约束文件：

1. 例如，从 GitHub [https://raw.githubusercontent.com/apache/airflow/constraints-2.7.2/constraints-3.11.txt](https://raw.githubusercontent.com/apache/airflow/constraints-2.7.2/constraints-3.11.txt) 下载特定于版本的约束文件（将 '2.7.2' 替换为要使用的版本）。

1. 将修改后的约束条件文件另存到 Amazon MWAA 环境的 Amazon S3 DAG 文件夹，例如 `constraints-3.11-updated.txt`。

1. 如下所示，指定您的要求。

   ```
   --constraint "/usr/local/airflow/dags/constraints-3.11-updated.txt"
   apache-airflow-providers-amazon==version-number
   ```
**注意**  
如果您使用的是私有 Web 服务器，我们建议您使用[将所需的库打包为 WHL 文件](best-practices-dependencies.md#best-practices-dependencies-python-wheels)。[aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)

## 特定版本的提供程序包


安装提供程序包允许您在 Apache Airflow UI 中访问连接类型。这也意味着您无需在 `requirements.txt` 文件中将这些程序包指定为 Python 依赖项。本页列出了 Amazon MWAA 为所有支持的 Apache Airflow 环境安装的 Apache Airflow 提供程序包。

**注意**  
对于 Apache Airflow v2 及更高版本，亚马逊 MWAA 在`pip3 install -r requirements.txt`执行后[会安装 Watchtower 版本](https://pypi.org/project/watchtower/2.0.1/) 2.0.1，以确保与 CloudWatch 日志的兼容性不会被其他 Python 库安装所覆盖。

您可以指定支持的 `apache-airflow-providers-amazon` 的最新版本来升级此提供程序。

**支持的 Apache Airflow 版本：**

------
#### [ v3.0.6 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==9.9.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/9.9.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==6.2.1](https://airflow.apache.org/docs/apache-airflow-providers-postgres/6.2.1/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.13.1](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.13.1/index.html)  | 
|  Fab 连接  |  [apache-airflow-providers-fab==2.3.0](https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.12.1](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.12.1/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==5.3.2](https://airflow.apache.org/docs/apache-airflow-providers-http/5.3.2/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.9.1](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.9.1/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.27.3](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.3/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==4.1.1](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/4.1.1/index.html)  | 

------
#### [ v2.11.0 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==9.8.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/9.8.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==6.2.0](https://airflow.apache.org/docs/apache-airflow-providers-postgres/6.2.0/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.13.0](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.13.0/index.html)  | 
|  Fab 连接  |  [apache-airflow-providers-fab==1.5.3](https://airflow.apache.org/docs/apache-airflow-providers-fab/1.5.3/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.11.0](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.11.0/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==5.3.0](https://airflow.apache.org/docs/apache-airflow-providers-http/5.3.0/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.9.0](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.9.0/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.27.1](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.27.1/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==4.1.0](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/4.1.0/index.html)  | 
|  SMTP 连接  |  [apache-airflow-providers-smtp==2.1.0](https://airflow.apache.org/docs/apache-airflow-providers-smtp/2.1.0/index.html)  | 

------
#### [ v2.10.3 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==9.0.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/9.0.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.13.1](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.13.1/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.11.1](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.11.1/index.html)  | 
|  Fab 连接  |  [apache-airflow-providers-fab==1.5.0](https://airflow.apache.org/docs/apache-airflow-providers-fab/1.5.0/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.8.3](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.8.3/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.13.2](https://airflow.apache.org/docs/apache-airflow-providers-http/4.13.2/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.7.0](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.7.0/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.19.0](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.19.0/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.9.0](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.9.0/index.html)  | 
|  SMTP 连接  |  [apache-airflow-providers-smtp==1.8.0](https://airflow.apache.org/docs/apache-airflow-providers-smtp/1.8.0/index.html)  | 

------
#### [ v2.10.1 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==8.28.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/2.28.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.12.0](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.12.0/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.11.0](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.11.0/index.html)  | 
|  Fab 连接  |  [apache-airflow-providers-fab==1.3.0](https://airflow.apache.org/docs/apache-airflow-providers-fab/1.3.0/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.8.1](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.8.1/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.13.0](https://airflow.apache.org/docs/apache-airflow-providers-http/4.13.0/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.7.0](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.7.0/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.16.0](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.16.0/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.9.0](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.9.0/index.html)  | 
|  SMTP 连接  |  [apache-airflow-providers-smtp==1.8.0](https://airflow.apache.org/docs/apache-airflow-providers-smtp/1.8.0/index.html)  | 

------
#### [ v2.9.2 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==8.24.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.24.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.11.1](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.11.1/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.9.1](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.9.1/index.html)  | 
|  Fab 连接  |  [apache-airflow-providers-fab==1.1.1](https://airflow.apache.org/docs/apache-airflow-providers-fab/1.1.1/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.7.2](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.7.2/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.11.1](https://airflow.apache.org/docs/apache-airflow-providers-http/4.11.1/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.6.1](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.6.1/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.14.0](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.14.0/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.8.1](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.8.1/index.html)  | 
|  SMTP 连接  |  [apache-airflow-providers-smtp==1.7.1](https://airflow.apache.org/docs/apache-airflow-providers-smtp/1.7.1/index.html)  | 

------
#### [ v2.8.1 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==8.16.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.16.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.10.0](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.10.0/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.7.0](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.7.0/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.5.1](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.5.1/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.8.0](https://airflow.apache.org/docs/apache-airflow-providers-http/4.8.0/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.5.0](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.5.0/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.10.0](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.10.0/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.7.0](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.7.0/index.html)  | 

------
#### [ v2.7.2 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==8.7.1](https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.7.1/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.6.1](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.6.1/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.5.2](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.5.2/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.3.4](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.3.4/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.5.2](https://airflow.apache.org/docs/apache-airflow-providers-http/4.5.2/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.3.2](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.3.2/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.7.2](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.7.2/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.4.3](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.4.3/index.html)  | 

------
#### [ v2.6.3 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon[aiobotocore] ==8.2.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/8.2.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.5.1](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.5.1/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.4.2](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.4.2/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.2.1](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.2.1/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.4.2](https://airflow.apache.org/docs/apache-airflow-providers-http/4.4.2/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.2.2](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.2.2/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.5.2](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.5.2/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.4.2](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.4.2/index.html)  | 

------
#### [ v2.5.1 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon==7.1.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/7.1.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.4.0](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.4.0/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.3.0](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.3.0/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.1.0](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.1.0/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.1.1](https://airflow.apache.org/docs/apache-airflow-providers-http/4.4.1/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.1.1](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.1.1/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.3.3](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.3.3/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.3.1](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.3.1/index.html)  | 

------
#### [ v2.4.3 ]


| 连接类型 | 程序包 | 
| --- | --- | 
|  Amazon 连接  |  [apache-airflow-providers-amazon==6.0.0](https://airflow.apache.org/docs/apache-airflow-providers-amazon/6.0.0/index.html)  | 
|  Postgres 连接  |  [apache-airflow-providers-postgres==5.2.2](https://airflow.apache.org/docs/apache-airflow-providers-postgres/5.2.2/index.html)  | 
|  FTP 连接  |  [apache-airflow-providers-ftp==3.1.0](https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.1.0/index.html)  | 
|  Celery 连接  |  [apache-airflow-providers-celery==3.0.0](https://airflow.apache.org/docs/apache-airflow-providers-celery/3.0.0/index.html)  | 
|  HTTP 连接  |  [apache-airflow-providers-http==4.0.0](https://airflow.apache.org/docs/apache-airflow-providers-http/4.0.0/index.html)  | 
|  IMAP 连接  |  [apache-airflow-providers-imap==3.0.0](https://airflow.apache.org/docs/apache-airflow-providers-imap/3.0.0/index.html)  | 
|  常见 SQL  |  [apache-airflow-providers-common-sql==1.2.0](https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.2.0/index.html)  | 
|  SQLite 连接  |  [apache-airflow-providers-sqlite==3.2.1](https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.2.1/index.html)  | 

------

# 连接类型概述
连接类型

Apache Airflow 将各个连接存储为连接 URI 字符串。它在 Apache Airflow UI 中提供了一个连接模板，用于生成连接 URI 字符串，无论连接类型如何。如果 Apache Airflow UI 中没有连接模板，则可以使用备用连接模板来生成此连接 URI 字符串，例如使用 HTTP 连接模板。主要区别在于 URI 前缀，例如 `my-conn-type://`，Apache Airflow 提供程序在连接中通常会忽略该前缀。本页介绍如何交替使用 Apache Airflow UI 中的连接模板来处理不同的连接类型。

**警告**  
请勿覆盖 Amazon MWAA 中的 [https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/connections/aws.html](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/connections/aws.html) 连接。Amazon MWAA 使用此连接来执行各种关键任务，例如收集任务日志。覆盖此连接可能会导致数据丢失和环境可用性中断。

**Topics**
+ [

## 连接 URI 字符串示例
](#manage-connection-types-string-example)
+ [

## 示例连接模板
](#manage-connection-types-template-example)
+ [

## 使用 HTTP 连接模板进行 Jdbc 连接的示例
](#manage-connection-types-example)

## 连接 URI 字符串示例


以下示例介绍了 MySQL 连接类型的连接 URI 字符串。

```
'mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1'
```

## 示例连接模板


以下示例描述了 Apache Airflow UI 中的 HTTP 连接模板。

------
#### [ Apache Airflow v3 ]

![\[此图描述了 Apache Airflow UI 中的 HTTP 连接类型。\]](http://docs.amazonaws.cn/mwaa/latest/userguide/images/airflow-connection-v3.0.6.png)


------
#### [ Apache Airflow v2 ]

![\[此图描述了 Apache Airflow UI 中的 HTTP 连接类型。\]](http://docs.amazonaws.cn/mwaa/latest/userguide/images/airflow-connection-v2.0.2.png)


------

## 使用 HTTP 连接模板进行 Jdbc 连接的示例


根据以下示例在 Apache Airflow UI 中为 *Jdbc* 连接类型应用 **HTTP** 连接模板。

------
#### [ Apache Airflow v3 ]

以下示例显示了 Apache Airflow 为本部分中的示例生成的连接 URI 字符串。

```
http://myconnectionurl/some/path&login=mylogin&extra__jdbc__dry__path=usr/local/airflow/dags/classpath/redshif-jdbc42-2.0.0.1.jar&extra__jdbc__dry__clsname=redshift-jdbc42-2.0.0.1
```

根据以下示例在 Apache Airflow UI 中为 Apache Airflow v3 的 *Jdbc* 连接应用 HTTP 连接模板。

![\[此图显示了 Apache Airflow UI 中 Jdbc 连接的 HTTP 连接类型。\]](http://docs.amazonaws.cn/mwaa/latest/userguide/images/airflow-connection-jdbc-v3.0.6.png)


------
#### [ Apache Airflow v2 ]

以下示例显示了 Apache Airflow 为本部分中的示例生成的连接 URI 字符串。

```
http://myconnectionurl/some/path&login=mylogin&extra__jdbc__dry__path=usr/local/airflow/dags/classpath/redshif-jdbc42-2.0.0.1.jar&extra__jdbc__dry__clsname=redshift-jdbc42-2.0.0.1
```

根据以下示例在 Apache Airflow UI 中为 Apache Airflow v2 的 *Jdbc* 连接应用 HTTP 连接模板。

![\[此图显示了 Apache Airflow UI 中 Jdbc 连接的 HTTP 连接类型。\]](http://docs.amazonaws.cn/mwaa/latest/userguide/images/airflow-connection-jdbc-v2.0.2.png)


------

# 使用密钥配置 Apache Airflow 连接 Amazon Secrets Manager
配置 Secrets Manager

Amazon Secrets Manager 是适用于 Apache Airflow 的亚马逊托管工作流程环境中支持的备用 Apache Airflow 后端。本主题介绍如何使用 Amazon Secrets Manager 在 Apache Airflow 的亚马逊托管工作流程上安全地存储 Apache Airflow 变量和 Apache Airflow 连接的机密。

**注意**  
您需要为自己创建的密钥付费。有关 Secrets Manager 定价的更多信息，请参阅 [Amazon 定价](https://www.amazonaws.cn/secrets-manager/pricing/)。
Amazon 亚马逊 MWAA 还支持 S@@ [ystems Manager 参数存储](https://docs.amazonaws.cn/systems-manager/latest/userguide/systems-manager-parameter-store)作为机密后端。有关更多信息，请参阅 [Amazon 提供程序包文档](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/secrets-backends/aws-ssm-parameter-store.html)。

**Contents**
+ [

## 步骤 1：向 Amazon MWAA 提供访问 Secrets Manager 密钥的权限
](#connections-sm-policy)
+ [

## 步骤 2： 创建 Secrets Manager 后端作为 Apache Airflow 配置选项
](#connections-sm-aa-configuration)
+ [

## 第三步：生成 Apache A Amazon irflow 连接 URI 字符串
](#connections-sm-aa-uri)
+ [

## 步骤 4：在 Secrets Manager 中添加变量
](#connections-sm-createsecret-variables)
+ [

## 步骤 5：在 Secrets Manager 中添加连接
](#connections-sm-createsecret-connection)
+ [

## 代码示例
](#connections-sm-samples)
+ [

## 资源
](#connections-sm-blogs)
+ [

## 接下来做什么？
](#connections-sm-next-up)

## 步骤 1：向 Amazon MWAA 提供访问 Secrets Manager 密钥的权限


您 Amazon MWAA 环境的[执行角色](mwaa-create-role.md)需要对 Amazon Secrets Manager中的密钥具有读取权限。以下 IAM 策略允许使用 Amazon托管[SecretsManagerReadWrite](https://console.amazonaws.cn/iam/home?#/policies/arn:aws:iam::aws:policy/SecretsManagerReadWrite$jsonEditor)策略进行读写访问。

**要将该策略附加到执行角色，请执行以下操作**

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

1. 选择环境。

1. 在**权限**窗格上选择执行角色。

1. 选择**附加策略**。

1. 在**筛选策略**文本字段中键入 `SecretsManagerReadWrite`。

1. 选择**附加策略**。

如果您不想使用 Amazon托管权限策略，则可以直接更新环境的执行角色以允许任何级别的访问您的 Secrets Manager 资源。例如，以下策略声明授予您在 Secrets Manager 中的特定密钥中创建的所有密钥 Amazon Web Services 区域 的读取权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:*"
        },
        {
            "Effect": "Allow",
            "Action": "secretsmanager:ListSecrets",
            "Resource": "*"
        }
    ]
}
```

------

## 步骤 2： 创建 Secrets Manager 后端作为 Apache Airflow 配置选项


以下部分介绍如何在亚马逊 MWAA 控制台上为后端创建 Apache Airflow 配置选项。 Amazon Secrets Manager 如果您在 `airflow.cfg` 中使用同名的配置设置，则您在以下步骤中创建的配置将优先并覆盖配置设置。

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

1. 选择环境。

1. 选择**编辑**。

1. 选择**下一步**。

1. 在 **Airflow 配置选项**窗格中选择**添加自定义配置**。添加以下键值对：

   1. **`secrets.backend`**: **`airflow.providers.amazon.aws.secrets.secrets_manager.SecretsManagerBackend`**

   1. **`secrets.backend_kwargs`**：**`{"connections_prefix" : "airflow/connections", "variables_prefix" : "airflow/variables"}`**这将 Apache Airflow 配置为在 `airflow/connections/*` 和 `airflow/variables/*` 路径中搜索连接字符串和变量。

      您可以使用[查找模式](https://airflow.apache.org/docs/apache-airflow-providers-amazon/stable/secrets-backends/aws-secrets-manager.html#optional-lookup)来减少 Amazon MWAA 代表您向 Secrets Manager 调用 API 的次数。如果您未指定查找模式，Apache Airflow 会在已配置的后端中搜索所有连接和变量。通过指定模式，可以收窄 Apache Airflow 搜索的可能路径。这可以降低您在 Amazon MWAA 中使用 Secrets Manager 时的成本。

      要指定查找模式，请指定 `connections_lookup_pattern` 和 `variables_lookup_pattern` 参数。这些参数接受 RegEx 字符串作为输入。例如，要搜索以 `test` 开头的密钥，请输入 `secrets.backend_kwargs` 的以下内容：

      ```
      {
        "connections_prefix": "airflow/connections",
        "connections_lookup_pattern": "^test",
        "variables_prefix" : "airflow/variables",
        "variables_lookup_pattern": "^test"
      }
      ```
**注意**  
要使用 `connections_lookup_pattern` 和 `variables_lookup_pattern`，必须安装 `apache-airflow-providers-amazon` 的 7.3.0 或更高版本。有关将提供程序包更新到新版本的更多信息，请参阅 [约束条件文件](connections-packages.md#connections-packages-constraints)。

1. 选择**保存**。

## 第三步：生成 Apache A Amazon irflow 连接 URI 字符串


要创建连接字符串，请使用键盘上的“Tab”键缩进[连接](https://airflow.apache.org/docs/stable/howto/connection/index.html)对象中的键值对。我们还建议在 shell 会话中为该 `extra` 对象创建一个变量。下一节将引导您完成使用 Apache Airflow 或 Python 脚本为 Amazon MWAA 环境[生成 Apache Airflow 连接 URI](https://airflow.apache.org/docs/apache-airflow/stable/howto/connection.html#generating-a-connection-uri) 字符串的步骤。

------
#### [ Apache Airflow CLI ]

以下 shell 会话使用本地 Airflow CLI 生成连接字符串。如果您没有安装 CLI，我们建议您使用 Python 脚本。

1. 打开 Python shell 会话：

   ```
   python3
   ```

1. 输入以下命令：

   ```
   >>> import json
   ```

1. 输入以下命令：

   ```
   >>> from airflow.models.connection import Connection
   ```

1. 在 shell 会话中为该 `extra` 对象创建一个变量。将中的*YOUR\$1EXECUTION\$1ROLE\$1ARN*样本值替换为执行角色 ARN 和中的区域*us-east-1*（例如`us-east-1`）。

   ```
   >>> extra=json.dumps({'role_arn': 'YOUR_EXECUTION_ROLE_ARN', 'region_name': 'us-east-1'})
   ```

1. 创建连接对象。用 Apache Airflow 连接的名称替换 `myconn` 中的示例值。

   ```
   >>> myconn = Connection(
   ```

1. 使用键盘上的“Tab”键缩进连接对象中的以下每个键值对。替换中的样本值*red*。

   1. 指定 Amazon 连接类型：

      ```
      ... conn_id='aws',
      ```

   1. 指定 Apache Airflow 数据库选项：

      ```
      ... conn_type='mysql',
      ```

   1. 在 Amazon MWAA 上指定 Apache Airflow UI 网址：

      ```
      ... host='288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com/home',
      ```

   1. 指定用于登录 Amazon MWAA 的 Amazon 访问密钥 ID（用户名）：

      ```
      ... login='YOUR_AWS_ACCESS_KEY_ID',
      ```

   1. 指定用于登录 Amazon MWAA 的私有访问 Amazon 密钥（密码）：

      ```
      ... password='YOUR_AWS_SECRET_ACCESS_KEY',
      ```

   1. 指定 `extra` shell 会话变量：

      ```
      ... extra=extra
      ```

   1. 关闭连接对象。

      ```
      ... )
      ```

1. 打印连接 URI 字符串：

   ```
   >>> myconn.get_uri()
   ```

   请参阅响应中的连接 URI 字符串：

   ```
   'mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1'
   ```

------
#### [ Python script ]

以下 Python 脚本不需要 Apache Airflow CLI。

1. 复制以下代码示例的内容，并在本地另存为 `mwaa_connection.py`。

   ```
   import urllib.parse
   								
   								conn_type = 'YOUR_DB_OPTION'
   								host = 'YOUR_MWAA_AIRFLOW_UI_URL'
   								port = 'YOUR_PORT'
   								login = 'YOUR_AWS_ACCESS_KEY_ID'
   								password = 'YOUR_AWS_SECRET_ACCESS_KEY'
   								role_arn = urllib.parse.quote_plus('YOUR_EXECUTION_ROLE_ARN')
   								region_name = 'us-east-1'
   								
   								conn_string = '{0}://{1}:{2}@{3}:{4}?role_arn={5}&region_name={6}'.format(conn_type, login, password, host, port, role_arn, region_name)
   								print(conn_string)
   ```

1. 将占位符替换为。*red*

1. 运行以下脚本可生成连接字符串。

   ```
   python3 mwaa_connection.py
   ```

------

## 步骤 4：在 Secrets Manager 中添加变量


下一节介绍如何在 Secrets Manager 中为变量创建密钥。

**要创建密钥，请执行以下操作**

1. 打开 [Amazon Secrets Manager 控制台](https://console.amazonaws.cn/secretsmanager/home#/environments)。

1. 选择**存储新密钥**。

1. 选择**其他密钥类型**。

1. **在 “指定要存储在此密钥中的 key/value 配对” 窗格中**，选择 **Plaintex** t。

1. 按以下格式将变量值添加为**纯文本**。

   ```
   "YOUR_VARIABLE_VALUE"
   ```

   例如，要指定一个整数，请执行以下操作：

   ```
   14
   ```

   例如，要指定一个字符串，请执行以下操作：

   ```
   "mystring"
   ```

1. 对于**加密密钥**，请从下拉列表中选择一个 Amazon KMS 密钥选项。

1. 按以下格式在**密钥名称**文本字段中输入名称。

   ```
   airflow/variables/YOUR_VARIABLE_NAME
   ```

   例如：

   ```
   airflow/variables/test-variable
   ```

1. 选择**下一步**。

1. 在**配置密钥**页面的**密钥名称和描述**窗格上，执行以下操作。

   1. 在**密钥名称**中，输入密钥名称。

   1. （可选）在**描述**中，输入密钥名称的描述。

   选择**下一步**。

1. 在**配置轮换-可选**上，保留默认选项，然后选择**下一步**。

1. 对于要添加的任何其他变量，在 Secrets Manager 中重复这些步骤。

1. 在**查看** 页上，查看您密钥的详细信息，然后选择**存储**。

## 步骤 5：在 Secrets Manager 中添加连接


下一节介绍如何在 Secrets Manager 中为连接字符串 URI 创建密钥。

**要创建密钥，请执行以下操作**

1. 打开 [Amazon Secrets Manager 控制台](https://console.amazonaws.cn/secretsmanager/home#/environments)。

1. 选择**存储新密钥**。

1. 选择**其他密钥类型**。

1. **在 “指定要存储在此密钥中的 key/value 配对” 窗格中**，选择 **Plaintex** t。

1. 按以下格式将连接 URI 字符串添加为**纯文本**。

   ```
   YOUR_CONNECTION_URI_STRING
   ```

   例如：

   ```
   mysql://288888a0-50a0-888-9a88-1a111aaa0000.a1.us-east-1.airflow.amazonaws.com%2Fhome?role_arn=arn%3Aaws%3Aiam%3A%3A001122332255%3Arole%2Fservice-role%2FAmazonMWAA-MyAirflowEnvironment-iAaaaA&region_name=us-east-1
   ```
**警告**  
Apache Airflow 会解析连接字符串中的每个值。**不得**使用单引号或双引号，否则它会将连接解析为单个字符串。

1. 对于**加密密钥**，请从下拉列表中选择一个 Amazon KMS 密钥选项。

1. 按以下格式在**密钥名称**文本字段中输入名称。

   ```
   airflow/connections/YOUR_CONNECTION_NAME
   ```

   例如：

   ```
   airflow/connections/myconn
   ```

1. 选择**下一步**。

1. 在**配置密钥**页面的**密钥名称和描述**窗格上，执行以下操作。

   1. 在**密钥名称**中，输入密钥名称。

   1. （可选）在**描述**中，输入密钥名称的描述。

   选择**下一步**。

1. 在**配置轮换-可选**上，保留默认选项，然后选择**下一步**。

1. 对于要添加的任何其他变量，在 Secrets Manager 中重复这些步骤。

1. 在**查看** 页上，查看您密钥的详细信息，然后选择**存储**。

## 代码示例

+ 要了解在使用以下示例代码的本页上如何使用 Apache Airflow 连接（`myconn`）的密钥，请参阅 [使用 Amazon Secrets Manager 中的密钥进行 Apache Airflow 连接](samples-secrets-manager.md)。
+ 要了解在使用以下示例代码的本页上如何使用 Apache Airflow 变量（`test-variable`）的密钥，请参阅 [为 Apache Airflow 变量使用 Amazon Secrets Manager 中的密钥](samples-secrets-manager-var.md)。

## 资源

+ 有关使用控制台和配置 Secrets Manager 密钥的更多信息 Amazon CLI，请参阅*Amazon Secrets Manager 用户指南*中的[创建密钥](https://docs.amazonaws.cn/secretsmanager/latest/userguide/create_secret.html)。
+ 在[将 Apache Airflow 连接和变量移动至 Amazon Secrets Manager](https://www.amazonaws.cn/blogs/opensource/move-apache-airflow-connections-variables-aws-secrets-manager/)中，使用 Python 脚本将大量 Apache Airflow 变量和连接迁移到 Secrets Manager。

## 接下来做什么？

+ 要了解如何生成令牌以访问 Apache Airflow UI，请参阅 [访问 Apache Airflow](access-airflow-ui.md)。