通过Admin -> Connections
,我们能够创建/修改连接的参数,但是我想知道是否可以通过API进行同样的操作,以便可以以编程方式设置连接
airflow.models.Connection
似乎只处理实际连接到实例,而不是将其保存到列表中。似乎应该执行一个功能,但是我不确定在哪里可以找到该特定功能的文档。
答案 0 :(得分:9)
连接实际上是一个模型,您可以用来查询和插入新的连接
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.
答案 1 :(得分:3)
如果需要在Python / Airflow代码之外通过bash,在Dockerfile等中进行连接,还可以从Airflow CLI添加,删除和列出连接。
airflow connections --add ...
用法:
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]
https://airflow.apache.org/cli.html#connections
CLI当前似乎不支持修改现有连接,但是在GitHub上具有有效的开放PR的情况下存在一个Jira问题。
答案 2 :(得分:1)
使用from airflow.models import Connection
创建新的连接后,首先检查连接是否存在:
def create_conn(conn_id, conn_type, host, login, password, port):
conn = Connection(
conn_id=conn_id,
conn_type=conn_type,
host=host,
login=login,
password=password,
port=port
)
session = settings.Session()
conn_name = session\
.query(Connection)\
.filter(Connection.conn_id == conn.conn_id)\
.first()
if str(conn_name) == str(conn_id):
return logging.info(f"Connection {conn_id} already exists")
session.add(conn)
session.commit()
logging.info(Connection.log_info(conn))
logging.info(f'Connection {conn_id} is created')
答案 3 :(得分:0)
您可以使用populate connections using environment variables格式connection URI。
环境变量的命名约定为AIRFLOW_CONN_
,全部为大写。 因此,如果您的连接ID为my_prod_db,则变量名称应为AIRFLOW_CONN_MY_PROD_DB。
通常,Airflow的URI格式如下:
my-conn-type://my-login:my-password@my-host:5432/my-schema?param1=val1¶m2=val2
请注意,以这种方式注册的连接不会显示在Airflow UI中。