我的 DAG 总结:
我正在使用 SSH Operator 通过 SSH 连接到 EC2 实例并运行一个 JAR 文件,该文件将连接到多个数据库。我已在 DAG 文件中声明了 Airflow Connection,并且能够将变量传递到 EC2 实例中。正如您从下面看到的,我将属性传递到 JAVA 命令中。
Airflow version - airflow-1-10.7
Package installed - apache-airflow[crypto]
from airflow import DAG
from datetime import datetime, timedelta
from airflow.contrib.hooks.ssh_hook import SSHHook
from airflow.contrib.operators.ssh_operator import SSHOperator
from airflow.hooks.base_hook import BaseHook
from airflow.models.connection import Connection
ssh_hook = SSHHook(ssh_conn_id='ssh_to_ec2')
ssh_hook.no_host_key_check = True
redshift_connection = BaseHook.get_connection("my_redshift")
rs_user = redshift_connection.login
rs_password = redshift_connection.password
mongo_connection = BaseHook.get_connection("my_mongo")
mongo_user = mongo_connection.login
mongo_password = mongo_connection.password
default_args = {
'owner': 'AIRFLOW',
'start_date': datetime(2020, 4, 1, 0, 0),
'email': [],
'retries': 1,
}
dag = DAG('connect_to_redshift', default_args=default_args)
t00_00 = SSHOperator(
task_id='ssh_and_connect_db',
ssh_hook=ssh_hook,
command="java "
"-Drs_user={rs_user} -Drs_pass={rs_pass} "
"-Dmongo_user={mongo_user} -Dmongo_pass={mongo_pass} "
"-jar /home/airflow/root.jar".format(rs_user=rs_user,rs_pass=rs_pass,mongo_user=mongo_user,mongo_pass=mongo_pass),
dag=dag)
t00_00
问题
rs_pass,mongo_pass
的值将在 Rendered_Template/Airflow 日志中公开,这不好,我希望有一个解决方案可以使用 SSH Operator 从日志和渲染模板中隐藏所有这些敏感信息。
到目前为止,我已尝试将airflow.cfg 中的日志详细信息最小化为ERROR,但它仍然显示在Rendered_Template 中。
请赐教。
谢谢
您可以使用 jinja 模板作为用户名和密码。密码将被自动屏蔽。您可以在此处
找到如何模板连接的文档您的代码将如下所示:
rs_user = "{{ conn['my_redshift'].login }}"
rs_password = "{{ conn['my_redshift'].password }}"
mongo_user = "{{ conn['my_mongo'].login }}"
mongo_password = "{{ conn['my_mongo'].password }}"