Как использовать перехватчики подключения с 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,
)
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.