设置配置选项
第一次运行 Airflow 时,它会在你的 $AIRFLOW_HOME 目录(默认是 ~/airflow)中创建一个名为 airflow.cfg 的文件。这样做是为了方便“玩转”Airflow 配置。
但是,对于生产环境,建议使用命令行生成配置。
airflow config list --defaults
此命令会生成输出,你可以将其复制到配置文件中并进行编辑。
它将包含所有默认配置选项及示例,并以注释的形式呈现,这样你只需取消注释并修改想要更改的选项。通过这种方式,你可以轻松追踪所有已从默认值修改的配置选项,并在 Airflow 新版本发布时轻松升级安装,自动使用已更改的默认值。
你可以将其重定向到你的配置文件并进行编辑。
airflow config list --defaults > "${AIRFLOW_HOME}/airflow.cfg"
你也可以使用以下格式通过环境变量设置选项: AIRFLOW__{SECTION}__{KEY}(注意双下划线)。
例如,元数据数据库的连接字符串可以在 airflow.cfg 中这样设置。
[database]
sql_alchemy_conn = my_conn_string
或通过创建相应的环境变量。
export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=my_conn_string
请注意,当节名称中包含点(.)时,设置环境变量时必须将其替换为下划线。例如,假设的节 providers.some_provider。
[providers.some_provider]
this_param = true
export AIRFLOW__PROVIDERS_SOME_PROVIDER__THIS_PARAM=true
你也可以在运行时通过在键后添加 _cmd 来获取连接字符串,如下所示。
[database]
sql_alchemy_conn_cmd = bash_command_to_run
你也可以在运行时通过在键后添加 _secret 来获取连接字符串,如下所示。
[database]
sql_alchemy_conn_secret = sql_alchemy_conn
# You can also add a nested path
# example:
# sql_alchemy_conn_secret = database/sql_alchemy_conn
这将从密钥后端(例如 Hashicorp Vault)获取配置选项。更多细节请参见 密钥后端。
以下配置选项支持 _cmd 和 _secret 形式。
sql_alchemy_conn在[database]节fernet_key在[core]节broker_url在[celery]节flower_basic_auth在[celery]节result_backend在[celery]节password在[atlas]节smtp_password在[smtp]节secret_key在[api]节
`_cmd` 配置选项也可以像普通配置选项一样通过相应的环境变量进行设置。例如:
export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD=bash_command_to_run
类似地,`_secret` 配置选项也可以通过相应的环境变量进行设置。例如:
export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_SECRET=sql_alchemy_conn
注意
配置选项必须遵循密钥后端中定义的配置前缀命名约定。这意味着 sql_alchemy_conn 并未使用连接前缀,而是使用配置前缀。例如,它应命名为 airflow/config/sql_alchemy_conn。
这样做的目的在于不在机器上以明文文件形式存储密码。
所有配置选项的通用优先级顺序如下:
通过环境变量设置(
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN)通过命令环境变量设置(
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD)通过密钥环境变量设置(
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_SECRET)在
airflow.cfg中设置在
airflow.cfg中使用命令在
airflow.cfg中使用密钥Airflow 的内置默认值
注意
对于 Airflow 版本 >= 2.2.1 且 < 2.3.0,Airflow 的内置默认值在某些情况下会优先于 airflow.cfg 中的命令和密钥。
你可以使用 airflow config list 命令查看当前配置。
如果只想查看单个选项的值,可以使用 airflow config get-value 命令,如下例所示。
$ airflow config get-value core executor
LocalExecutor
注意
欲了解更多配置选项信息,请参见 配置参考
注意
关于 Python 和 Airflow 如何管理模块的详细信息,请参见 模块管理。
注意
不同的 Airflow 组件可能需要不同的配置参数。为了提高安全性,请只在需要的组件上限制敏感配置,而不是在所有组件之间共享所有配置。有些值必须在特定组件之间保持一致——例如,JWT 签名密钥必须在生成和验证令牌的组件之间匹配。然而,像数据库连接字符串、Fernet 密钥以及密钥后端凭证等敏感参数应仅提供给实际需要它们的组件。
对于安全敏感的部署,请通过针对单个组件的环境变量传递配置值。有关限制配置参数的详细指南,请参见 Airflow 安全模型。
确保运行 Airflow 组件的所有机器时间同步(例如使用 ntpd),否则在访问日志或进行 API 调用时可能会出现“forbidden”错误。
配置本地设置
某些 Airflow 配置需要通过本地设置进行配置,因为它们需要在 Airflow 初始化时修改执行的代码。通常在详细文档中会说明可以在哪里配置这些本地设置——通常在 airflow_local_settings.py 文件中完成。
你应当创建一个 airflow_local_settings.py 文件,并将其放置在 sys.path 中的某个目录,或放在 $AIRFLOW_HOME/config 文件夹下。(Airflow 在初始化时会将 $AIRFLOW_HOME/config 加入 sys.path)从 Airflow 2.10.1 开始,$AIRFLOW_HOME/dags 文件夹在初始化时不再被加入 sys.path,因此该文件夹中的本地设置将不会被导入。请确保 airflow_local_settings.py 位于初始化期间属于 sys.path 的路径中,例如 $AIRFLOW_HOME/config。有关此更改的更多背景,请参见 邮件列表公告。
这里可以看到此类本地设置的示例。
你可以通过这种方式配置的示例设置