Airflow Connections配置
外观
Airflow Connections配置[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Airflow Connections 是Apache Airflow中用于管理与外部系统通信的认证凭据和连接参数的机制。通过定义Connection,用户可以安全地存储数据库、API、云服务等外部资源的访问信息(如主机名、端口、用户名、密码等),而无需在DAG代码中硬编码敏感数据。Airflow将这些连接信息存储在元数据数据库中,并通过唯一的conn_id进行引用。
核心概念[编辑 | 编辑源代码]
- Conn_id: 连接的唯一标识符,在DAG中通过此ID引用连接。
- Conn_type: 连接类型(如`postgres`、`http`、`s3`等),决定Airflow如何与目标系统交互。
- Host、Port、Login、Password等: 根据连接类型动态变化的参数。
- Extra: JSON格式的额外配置参数(如SSL选项、API密钥等)。
配置方法[编辑 | 编辑源代码]
1. 通过Airflow UI配置[编辑 | 编辑源代码]
在Web界面中导航至 Admin → Connections,点击"+"按钮创建新连接:
2. 通过环境变量配置[编辑 | 编辑源代码]
Airflow支持通过环境变量命名约定自动创建连接,变量格式为:
AIRFLOW_CONN_{CONN_ID}=conn_type://login:password@host:port
示例:
export AIRFLOW_CONN_MY_DB="postgres://user:password@localhost:5432/mydb"
3. 通过代码配置(不推荐生产环境使用)[编辑 | 编辑源代码]
使用`airflow.models.Connection`类动态创建连接:
from airflow import settings
from airflow.models import Connection
conn = Connection(
conn_id="my_api_conn",
conn_type="http",
host="https://api.example.com",
port=443,
extra={"api_key": "secret_key"}
)
session = settings.Session()
session.add(conn)
session.commit()
实际案例[编辑 | 编辑源代码]
案例1:连接PostgreSQL数据库[编辑 | 编辑源代码]
在DAG中使用`PostgresOperator`时引用已配置的连接:
from airflow.providers.postgres.operators.postgres import PostgresOperator
query_task = PostgresOperator(
task_id="run_query",
postgres_conn_id="my_postgres_conn", # 引用conn_id
sql="SELECT * FROM sales WHERE date > '2023-01-01';"
)
案例2:使用SSH连接执行远程命令[编辑 | 编辑源代码]
配置SSH连接后,通过`SSHOperator`调用:
from airflow.providers.ssh.operators.ssh import SSHOperator
remote_task = SSHOperator(
task_id="run_remote_script",
ssh_conn_id="my_ssh_server", # 包含用户名/密钥的SSH连接
command="/opt/scripts/start_etl.sh"
)
高级配置技巧[编辑 | 编辑源代码]
- 加密敏感字段: 使用Airflow的加密功能隐藏密码(需配置`fernet_key`)。
- 动态连接生成: 通过`Connection`类在运行时动态创建连接(适用于多租户场景)。
- 连接测试: 使用`airflow connections test my_conn_id`命令验证连接有效性。
常见问题[编辑 | 编辑源代码]
问题 | 解决方案 |
---|---|
连接测试通过但DAG运行失败 | 检查执行环境的网络隔离或权限 |
环境变量未生效 | 确认变量名格式正确且Airflow服务已重启 |
Extra字段解析错误 | 确保JSON格式合法(如双引号而非单引号) |
数学表达(可选)[编辑 | 编辑源代码]
连接参数验证时可能涉及超时计算:
总结[编辑 | 编辑源代码]
Airflow Connections是解耦敏感信息与代码的关键组件,支持多种配置方式以适应不同场景。通过合理管理连接,可以实现:
- 安全性提升(避免密码硬编码)
- 维护便利性(集中修改连接参数)
- 环境隔离(为开发/生产使用不同conn_id)