气流 docker-compose.yml 中的连接管理根本不起作用?

use*_*632 1 docker docker-compose airflow

根据airflow连接管理页面,我们可以使用环境变量来创建连接:

export AIRFLOW_CONN_MY_PROD_DATABASE='my-conn-type://login:password@host:port/schema?param1=val1&param2=val2'
Run Code Online (Sandbox Code Playgroud)

所以,我下载了官方的docker-compose.yml

$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.0/docker-compose.yaml'
Run Code Online (Sandbox Code Playgroud)

并添加了连接的环境变量,如下所示:

...

 47   image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.2.0}
 48   # build: .
 49   environment:
 50     &airflow-common-env
 51     AIRFLOW_CONN_MY_PROD_DB: my-conn-type://login:password@host:port/schema?param1=val1&param2=val2
 52     AIRFLOW__CORE__EXECUTOR: CeleryExecutor

...
Run Code Online (Sandbox Code Playgroud)

然后,我使用以下方式加载所有容器docker-compose up并有权访问airflow-worker服务:

$ docker-compose exec airflow-worker /bin/bash
Run Code Online (Sandbox Code Playgroud)

并查看所有连接列表:

airflow@52d9c6ab9309:/opt/airflow$ airflow connections list
Run Code Online (Sandbox Code Playgroud)

但它说:

No data found
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Bas*_*lak 6

Airflow 仅列出来自底层元存储的连接。因此,来自环境变量或不同机密后端(例如 Vault)的连接将不会显示在 Airflow UI 中/由 CLI 列出。

要检查连接是否有效,您可以打开 Python 终端并运行:

from airflow.hooks.base import BaseHook
conn = BaseHook.get_connection("my_prod_db")

# now you can print e.g. print(conn.host)
Run Code Online (Sandbox Code Playgroud)