设置配置选项

第一次运行 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 版本

  • [database] 部分中的 sql_alchemy_conn

  • [core] 部分中的 fernet_key

  • [celery] 部分中的 broker_url

  • [celery] 部分中的 flower_basic_auth

  • [celery] 部分中的 result_backend

  • [atlas] 部分中的 password

  • [smtp] 部分中的 smtp_password

  • [webserver] 部分中的 secret_key

也可以使用相应的环境变量来设置 _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

这背后的想法是不将密码以纯文本形式存储在框中。

所有配置选项的通用优先级顺序如下

  1. 设置为环境变量 (AIRFLOW__DATABASE__SQL_ALCHEMY_CONN)

  2. 设置为命令环境变量 (AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_CMD)

  3. 设置为秘密环境变量 (AIRFLOW__DATABASE__SQL_ALCHEMY_CONN_SECRET)

  4. airflow.cfg 中设置

  5. airflow.cfg 中的命令

  6. airflow.cfg 中的密钥

  7. 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,它应该在 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 来呈现 Web UI。 初始化 Airflow Webserver 时,会使用基于 airflow.cfg 文件的 webserver 部分的预定义配置。 但是,你可以通过将 Flask 配置添加到 $AIRFLOW_HOME 目录中的 webserver_config.py 文件来覆盖这些设置并添加任何额外的设置。 此文件由 Webserver 自动加载。

例如,如果你想将速率限制策略更改为“移动窗口”,你可以将 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")

这个条目对您有帮助吗?