【问题标题】:How to use connection hooks with `KubernetesPodOperator` as environment variables on Apache Airflow on GCP Cloud Composer如何在 GCP Cloud Composer 上的 Apache Airflow 上使用带有“KubernetesPodOperator”的连接钩子作为环境变量
【发布时间】:2020-03-16 17:34:21
【问题描述】:

我想在使用KubernetesPodOperator 的任务中使用connections saved in airflow

在开发映像时,我使用环境变量将数据库连接信息传递给容器,但生产环境将数据库保存为连接挂钩。

提取数据库连接信息并将其传递给容器的最佳方法是什么?

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,
    )

【问题讨论】:

    标签: kubernetes airflow google-cloud-composer kubernetes-operator


    【解决方案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 pod 操作员。

    【讨论】:

    • 问题是您的连接凭据将可以从气流 UI 清楚地访问。其实你可以在任务实例详情中看到所有的环境变量
    • 能否请您提供如何将连接作为环境变量传递?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2021-05-03
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多