气流:使用环境变量时未创建连接

Airflow: connection is not being created when using environment variables

我想在不使用 Airflow UI 的情况下创建 Mongo 连接(默认情况除外)。

我读自 Airflow documentation:

Connections in Airflow pipelines can be created using environment variables. The environment variable needs to have a prefix of AIRFLOW_CONN_ for Airflow with the value in a URI format to use the connection properly.

When referencing the connection in the Airflow pipeline, the conn_id should be the name of the variable without the prefix. For example, if the conn_id is named postgres_master the environment variable should be named AIRFLOW_CONN_POSTGRES_MASTER (note that the environment variable must be all uppercase).

我在使用 Puckel docker image 时尝试应用它。

这是 docker 使用该图像合成的:

version: '2.1'
 services:
    postgres:
        image: postgres:9.6
        environment:
            - POSTGRES_USER=airflow
            - POSTGRES_PASSWORD=airflow
            - POSTGRES_DB=airflow

    webserver:
        image: puckel/docker-airflow:1.10.6
        restart: always
        depends_on:
            - postgres
        environment:
            - LOAD_EX=n
            - EXECUTOR=Local
            - AIRFLOW_CONN_MY_MONGO=mongodb://mongo:27017
        volumes:
            - ./src/:/usr/local/airflow/dags
            - ./requirements.txt:/requirements.txt
        ports:
            - "8080:8080"
        command: webserver
        healthcheck:
            test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
            interval: 30s
            timeout: 30s
            retries: 3

请注意 AIRFLOW_CONN_MY_MONGO=mongodb://mongo:27017 行,我按照 Airflow 文档的建议在其中传递了环境变量。

这里的问题是,当我在 UI 中列出连接时,没有创建 my_mongo 连接。

有什么建议吗?谢谢!

我读了 Puckel issue,他们提到连接已创建,但未显示在 UI 中。我对其进行了测试,实际上在 DAG 中使用时连接有效。

当您使用环境变量创建连接时,连接不会列在 UI 中。

原因:

  • Airflow 支持通过环境变量为 DAG 中的临时作业创建连接
  • UI 中的连接实际上保存在数据库中并从中检索。由 Env vars 创建的那些不存储在 DB

如何测试我的连接?

  • 创建示例 DAG 并使用您的连接到 运行 示例作业。它应该可以正常工作。