设置配置选项¶
首次运行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)中检索配置选项。详情请参阅 Secrets 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
注意
配置选项必须遵循密钥后端中定义的配置前缀命名约定。这意味着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.cfgAirflow的内置默认值
注意
对于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,它应该在Webserver和Worker上保持一致,以便Webserver能够从Worker获取日志。
webserver密钥还用于在检索日志时授权对Celery工作节点的请求。不过,使用该密钥生成的令牌有效期较短——请确保运行airflow组件的所有机器上的时间保持同步(例如使用ntpd),否则在访问日志时可能会遇到"禁止访问"错误。
配置本地设置¶
部分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。
如需了解此变更的更多背景信息,请参阅邮件列表公告。
你可以在这里查看此类本地设置的示例:
你可以通过这种方式配置的示例设置:
配置Airflow Webserver的Flask应用¶
Airflow使用Flask来渲染网页用户界面。当您初始化Airflow网页服务器时,会基于airflow.cfg文件中的webserver部分使用预定义的配置。您可以通过在$AIRFLOW_HOME目录下的webserver_config.py文件中添加Flask配置来覆盖这些设置并添加任何额外的配置。网页服务器会自动加载这个文件。
例如,如果您希望将速率限制策略更改为“滑动窗口”,可以将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")