airflow docker-compose.yml 中的连接管理根本不起作用?
Connection management in airflow docker-compose.yml doesn't work at all?
根据airflow connection management page,我们可以使用环境变量来创建连接:
export AIRFLOW_CONN_MY_PROD_DATABASE='my-conn-type://login:password@host:port/schema?param1=val1¶m2=val2'
所以,我下载了官方docker-compose.yml
:
$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.0/docker-compose.yaml'
并添加如下连接的环境变量:
...
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¶m2=val2
52 AIRFLOW__CORE__EXECUTOR: CeleryExecutor
...
然后,我使用 docker-compose up
加载所有容器并可以访问 airflow-worker
服务:
$ docker-compose exec airflow-worker /bin/bash
并查看所有连接列表:
airflow@52d9c6ab9309:/opt/airflow$ airflow connections list
但是它说:
No data found
我是不是漏掉了什么?
Airflow 仅列出来自底层 Metastore 的连接。因此,来自环境变量或不同机密后端(例如 Vault)的连接将不会显示在 CLI 的 Airflow UI/listed 中。
要检查连接是否有效,您可以打开 Python 终端并 运行:
from airflow.hooks.base import BaseHook
conn = BaseHook.get_connection("my_prod_db")
# now you can print e.g. print(conn.host)
根据airflow connection management page,我们可以使用环境变量来创建连接:
export AIRFLOW_CONN_MY_PROD_DATABASE='my-conn-type://login:password@host:port/schema?param1=val1¶m2=val2'
所以,我下载了官方docker-compose.yml
:
$ curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.2.0/docker-compose.yaml'
并添加如下连接的环境变量:
...
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¶m2=val2
52 AIRFLOW__CORE__EXECUTOR: CeleryExecutor
...
然后,我使用 docker-compose up
加载所有容器并可以访问 airflow-worker
服务:
$ docker-compose exec airflow-worker /bin/bash
并查看所有连接列表:
airflow@52d9c6ab9309:/opt/airflow$ airflow connections list
但是它说:
No data found
我是不是漏掉了什么?
Airflow 仅列出来自底层 Metastore 的连接。因此,来自环境变量或不同机密后端(例如 Vault)的连接将不会显示在 CLI 的 Airflow UI/listed 中。
要检查连接是否有效,您可以打开 Python 终端并 运行:
from airflow.hooks.base import BaseHook
conn = BaseHook.get_connection("my_prod_db")
# now you can print e.g. print(conn.host)