有没有一种方法可以通过Airflow API创建/修改连接

JCh*_*hao 12 python airflow

通过Admin -> Connections,我们可以创建/修改连接的参数,但是我想知道是否可以通过API进行相同的操作,以便可以以编程方式设置连接

airflow.models.Connection似乎它只处理实际连接到实例,而不是将其保存到列表中。似乎应该已经实现了一个功能,但是我不确定在哪里可以找到该特定功能的文档。

mad*_*ad_ 19

连接实际上是一个模型,可以用来查询和插入新连接

from airflow import settings
from airflow.models import Connection
conn = Connection(
        conn_id=conn_id,
        conn_type=conn_type,
        host=host,
        login=login,
        password=password,
        port=port
) #create a connection object
session = settings.Session() # get the session
session.add(conn)
session.commit() # it will insert the connection object programmatically.
Run Code Online (Sandbox Code Playgroud)

  • 无论如何要先列出连接然后检查连接是否已经存在? (11认同)

Bru*_*pos 15

首先检查连接是否存在,然后使用以下命令创建新连接from airflow.models import Connection

import logging
from airflow import settings
from airflow.models import Connection

def create_conn(conn_id, conn_type, host, login, pwd, port, desc):
    conn = Connection(conn_id=conn_id,
                      conn_type=conn_type,
                      host=host,
                      login=login,
                      password=pwd,
                      port=port,
                      description=desc)
    session = settings.Session()
    conn_name = session.query(Connection).filter(Connection.conn_id == conn.conn_id).first()

        if str(conn_name) == str(conn.conn_id):
            logging.warning(f"Connection {conn.conn_id} already exists")
            return None

    session.add(conn)
    session.commit()
    logging.info(Connection.log_info(conn))
    logging.info(f'Connection {conn_id} is created')
    return conn
Run Code Online (Sandbox Code Playgroud)


Tay*_*ton 8

如果需要在Python / Airflow代码之外通过bash,在Dockerfile等中进行连接,还可以从Airflow CLI添加,删除和列出连接。

airflow connections --add ...
Run Code Online (Sandbox Code Playgroud)

用法:

airflow connections [-h] [-l] [-a] [-d] [--conn_id CONN_ID]
                    [--conn_uri CONN_URI] [--conn_extra CONN_EXTRA]
                    [--conn_type CONN_TYPE] [--conn_host CONN_HOST]
                    [--conn_login CONN_LOGIN] [--conn_password CONN_PASSWORD]
                    [--conn_schema CONN_SCHEMA] [--conn_port CONN_PORT]
Run Code Online (Sandbox Code Playgroud)

https://airflow.apache.org/cli.html#connections

CLI当前似乎不支持修改现有连接,但是GitHub上存在活动的开放PR,这是一个Jira问题。


Tam*_*lyn 5

您可以使用连接 URI格式使用环境变量填充连接

\n
\n

环境变量命名约定为 AIRFLOW_CONN_<conn_id>,全部大写。

\n

因此,如果您的连接 ID 是 my_prod_db,那么变量名称应该是 AIRFLOW_CONN_MY_PROD_DB。

\n
\n
\n

一般来说,Airflow\xe2\x80\x99s URI 格式如下:

\n
my-conn-type://my-login:my-password@my-host:5432/my-schema?param1=val1&param2=val2\n
Run Code Online (Sandbox Code Playgroud)\n
\n

请注意,以这种方式注册的连接不会显示在 Airflow UI 中。

\n