管理 Apache Airflow 中的变量

2025年6月11日 | 阅读4分钟

引言

Apache Airflow 提供了一种使用变量存储和检索配置值的方法。 当您需要存储动态或特定于环境的值(例如 API 密钥、数据库连接字符串或配置设置)时,这些变量非常有用。 变量允许更好的灵活性和安全性,而不是将这些值硬编码到 DAG 中。

Airflow 变量可以通过多种方法进行管理,包括

  • Airflow UI
  • CLI
  • Airflow REST API
  • 环境变量
  • 后端存储解决方案,例如 AWS Secrets Manager 或 HashiCorp Vault

将变量存储在环境变量中

存储 Apache Airflow 变量的推荐方法之一是使用环境变量。 这种方法简化了配置管理,增强了安全性,并允许将动态值注入到 DAG 中,而无需修改代码或与 Airflow UI 交互。

为什么使用环境变量?

将变量存储在环境变量中具有多个优点

  • 安全性:避免将敏感数据存储在 Airflow 元数据数据库中。
  • 可移植性:易于在不同环境(例如,开发、暂存、生产)之间迁移配置。
  • 自动化:能够与 CI/CD 管道集成以实现自动化部署。
  • 易于配置:这可以通过系统配置文件、.env 文件或容器编排器(如 Docker 和 Kubernetes)在外部进行管理。

如何在环境变量中存储变量

Airflow 提供了一种内置方法,可以通过环境变量定义变量,遵循特定的命名约定。

命名约定

每个变量应以 AIRFLOW_VAR_ 为前缀,后跟大写的变量名。 语法是

AIRFLOW_VAR_<VARIABLE_NAME>

其中

  • AIRFLOW_VAR_ 是必需的前缀。
  • <VARIABLE_NAME> 是变量的实际名称,以大写形式书写。

在不同环境中设置环境变量

在本地系统 (Linux/macOS) 中设置变量

您可以使用终端会话中的 export 命令来设置环境变量

为了使这些更改在重启后仍然有效,请将它们添加到您的 shell 配置文件(~/.bashrc 或 ~/.zshrc)中

在本地系统 (Windows) 中设置变量

在 Windows 上,使用 set 命令

要验证变量是否已设置,请使用

在 Docker 中设置环境变量

如果在 Docker Compose 中运行 Airflow,请在 docker-compose.yml 文件中的 environment 部分下定义变量

或者,您可以使用 .env 文件

.env 文件

在 Kubernetes 中设置环境变量

如果在 Kubernetes 上运行 Airflow,请在 ConfigMap 或 Secret 中定义变量。

示例 ConfigMap:

将 ConfigMap 挂载到 Airflow 部署

在 Airflow DAG 中访问环境变量

设置环境变量后,可以使用 airflow.models.Variable 中的 Variable.get() 方法在 DAG 中访问它。

注意:由于 Airflow 会自动将环境变量映射到变量,因此您无需在 Airflow 元数据数据库中定义它们。

管理环境变量的最佳实践

  1. 不要在 DAG 中硬编码敏感数据
    • 始终使用环境变量或秘密管理系统,而不是直接在 DAG 文件中写入秘密。
  2. 使用秘密管理服务以提高安全性
    • 考虑使用 AWS Secrets Manager、HashiCorp Vault 或 Google Secret Manager 来存储敏感信息。
  3. 限制对环境变量的访问
    • 确保只有授权用户和进程才能读取或修改环境变量。
  4. 在 .env 文件中加密敏感变量
    • 如果使用 .env 文件,请考虑对其进行加密或将其存储在安全位置。
  5. 使用基于角色的访问控制 (RBAC)
    • 限制对需要它的用户的 Airflow UI 和 API 访问权限。

保护变量

由于变量通常存储敏感信息(如 API 密钥、凭据和令牌),因此保护它们至关重要。

使用环境变量而不是元数据数据库

  • 默认情况下,Airflow 将变量存储在元数据数据库中,这意味着可以通过 UI 或 API 访问它们。
  • 将它们存储在环境变量中可以使它们远离数据库。

使用秘密管理系统

  • 考虑使用专用的 Secrets Manager,而不是将秘密存储在 Airflow 变量中,例如
    • AWS Secrets Manager
    • HashiCorp Vault
    • Google Cloud Secret Manager
    • Azure Key Vault
  • Airflow 通过 Secrets Backends 支持这些服务。

启用基于角色的访问控制 (RBAC)

  • 如果使用 Airflow UI,请通过 RBAC 策略限制对变量的访问,以防止未经授权的用户查看或修改它们。

使用加密连接

  • 确保您的 Airflow 元数据数据库和任何外部秘密存储都使用 SSL/TLS 加密

限制对 Airflow 配置文件的访问

  • 确保未经授权的用户无法读取 airflow.cfg 文件和任何环境变量设置。 使用正确的文件权限

在 UI 中屏蔽敏感变量

  • Airflow >= 1.10.10 允许通过设置在 UI 中屏蔽敏感变量
  • 您还可以在 airflow.cfg 中启用敏感变量屏蔽

审计日志和监控

  • 启用变量访问和更改的日志记录。
  • 监控访问模式以查找未经授权的检索。

在 Apache Airflow 中有效管理变量对于安全性和可维护性至关重要。 将变量存储在环境变量中有助于将敏感信息保留在元数据数据库之外,同时使用 Secrets Managers、RBAC 和加密对其进行保护可增强安全性。 通过遵循最佳实践,您可以防止 Airflow 环境中关键配置的泄漏和未经授权的访问。