Как использовать перехватчики подключения с KubernetesPodOperator в качестве переменных среды в Apache Airflow в GCP Cloud Composer

Я хочу использовать подключения, сохраненные в airflow в задаче который использует KubernetesPodOperator.

При разработке изображения я использовал переменные среды для передачи информации о подключении к базе данных в контейнер, но в производственной среде базы данных сохранены как перехватчики подключения.

Как лучше всего извлечь информацию о подключении к базе данных и передать ее в контейнер?

env_vars = {'database_usr': 'xxx', 'database_pas': 'xxx'}
KubernetesPodOperator(
        dag=dag,
        task_id="example-task",
        name="example-task",
        namespace="default",
        image="eu.gcr.io/repo/image:tag",
        image_pull_policy="Always",
        arguments=["-v", "image-command", "image-arg"],
        env_vars=env_vars,
    )

person wab    schedule 16.03.2020    source источник


Ответы (1)


Мое текущее решение - получить переменные из соединения с помощью BaseHook:

from airflow.hooks.base_hook import BaseHook


def connection_to_dict(connection_id):
    """Returns connection params from Airflow as a dictionary.

    Parameters
    ----------
    connection_id : str
        Name of the connection in Airflow, e.g. `mysql_default`

    Returns
    -------
    dict
        Unencrypted values.
    """
    conn_obj = BaseHook.get_connection(connection_id)
    d = conn_obj.__dict__
    if ('is_encrypted', True) in d.items():
        d['password'] = conn_obj.get_password()
    return d

а затем передать их как переменные среды оператору модуля Kubernetes.

person wab    schedule 17.03.2020
comment
Проблема в том, что ваши учетные данные для подключения будут четко доступны из пользовательского интерфейса воздушного потока. Фактически, вы можете увидеть все переменные среды в деталях экземпляра задачи. - person Woody; 14.06.2021