将所有气流连接导出到新环境

psy*_*der 9 airflow

我正在尝试将所有现有的气流连接迁移到新的气流。

我正在查看 cli options airflow connections --help,它提供了一个列表选项,但没有提供导出/导入到/从 json 格式的选项。

有没有办法通过 cli/airflow ui 跨多个气流迁移连接?

bos*_*jak 10

您可以直接连接到 Airflow 元数据库并转储这些连接,然后将它们加载到单独的数据库中。但是,如果你想自动化这样的事情,你可以通过将它们转储到 CSV 文件来开始:

from airflow.utils import db
from airflow.models import Connection
import csv

outfile = open('myconnections.csv', 'w')
outcsv = csv.writer(outfile)

with db.create_session() as session:
    connections = session.query(Connection).all()

conn_list = [
    [getattr(c, column.name) for column in Connection.__mapper__.columns]
    for c in connections
]
outcsv.writerows(conn_list)
outfile.close()
Run Code Online (Sandbox Code Playgroud)

之后,您可以手动或使用类似的脚本将其加载到新数据库中。

重要提示:如果您启用了加密,为这些连接存储的密码将被加密,当您将它们加载到新数据库时,您必须使用相同的 fernet 密钥,否则您将无法解密它们。


小智 7

这将允许您导出所有连接,以便可以通过 CLI ( https://airflow.apache.org/docs/stable/howto/connection/index.html#creating-a-connection-from -the-cli)。无论您现有的安装在哪里,都可以在 Python 中运行它:

from airflow.hooks.base_hook import BaseHook

for c in ['my', 'list', 'of', 'connections']:
    conn = BaseHook.get_connection(c)
    print("airflow connections --add \\ \n \
    --conn_id '{conn_id}' \\ \n \
    --conn_type '{conn_type}' \\ \n \
    --conn_host '{conn_host}' \\ \n \
    --conn_schema '{conn_schema}' \\ \n \
    --conn_login '{conn_login}' \\ \n \
    --conn_password '{conn_password}' \\ \n \
    --conn_port '{conn_port}' \\ \n \
    --conn_extra '{conn_extra}' \\".format(
        conn_id=conn.conn_id,
        conn_type=conn.conn_type,
        conn_host=conn.host,
        conn_schema=conn.schema,
        conn_login=conn.login,
        conn_password=conn.password,
        conn_port=conn.port,
        conn_extra=conn.extra,
    ))
Run Code Online (Sandbox Code Playgroud)

这也输出解密的密码。在 Airflow 1.10.12 上测试和工作。