设置配置选项¶
首次运行 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
这将从 Secret Backends(例如 Hashicorp Vault)检索配置选项。有关更多详细信息,请参阅Secret Backends。
以下配置选项支持此 _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
在[webserver]
部分中
_cmd
配置选项也可以使用相应的环境变量进行设置,就像通常的配置选项一样。例如
export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD=bash_command_to_run
类似地,_secret
配置选项也可以使用相应的环境变量进行设置。例如
export AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_SECRET=sql_alchemy_conn
注意
配置选项必须遵循 Secret Backend 中定义的配置前缀命名约定。这意味着 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
SequentialExecutor
注意
有关配置选项的更多信息,请参阅配置参考
注意
有关 Python 和 Airflow 如何管理模块的详细信息,请参阅模块管理。
注意
在所有 Airflow 组件中使用相同的配置。虽然每个组件并不需要所有配置,但有些配置需要相同,否则它们将无法按预期工作。一个很好的例子是secret_key,它在 Web 服务器和 Worker 上应该相同,以允许 Web 服务器从 Worker 获取日志。
Web 服务器密钥还用于在检索日志时授权对 Celery worker 的请求。但是,使用密钥生成的令牌的有效期很短 - 确保运行 Airflow 组件的所有机器上的时间同步(例如使用 ntpd),否则在访问日志时可能会收到“禁止”错误。
配置本地设置¶
某些 Airflow 配置是通过本地设置配置的,因为它们需要更改在 Airflow 初始化时执行的代码。通常,在详细文档中会提到可以在哪里配置此类本地设置 - 这通常在 airflow_local_settings.py
文件中完成。
您应该创建一个 airflow_local_settings.py
文件,并将其放在 sys.path
中的目录或 $AIRFLOW_HOME/config
文件夹中。(Airflow 在初始化时会将 $AIRFLOW_HOME/config
添加到 sys.path
中)
您可以在此处查看此类本地设置的示例
您可以通过这种方式配置的示例设置
为 Airflow Web 服务器配置 Flask 应用程序¶
Airflow 使用 Flask 渲染 Web UI。当您初始化 Airflow Web 服务器时,将使用预定义的配置,该配置基于 airflow.cfg
文件的 webserver
部分。但是,您可以通过将 Flask 配置添加到 $AIRFLOW_HOME
目录中的 webserver_config.py
文件中来覆盖这些设置并添加任何额外的设置。Web 服务器会自动加载此文件。
例如,如果您想将速率限制策略更改为“移动窗口”,则可以将 RATELIMIT_STRATEGY
设置为 moving-window
。
您还可以直接增强/修改底层的 Flask 应用程序,因为应用程序上下文被推送到 webserver_config.py
from flask import current_app as app
@app.before_request
def print_custom_message() -> None:
print("Executing before every request")