【问题标题】:Apache Airflow Bash Operator with environment variable具有环境变量的 Apache Airflow Bash Operator
【发布时间】:2021-03-24 15:32:17
【问题描述】:

我在 /etc/sysconfig/airflow 中配置了环境变量

PASSWORD=pass123

我希望能够在 BashOperator 的 Bash 命令中使用它,这样密码就不会在 Airflow UI 或日志中显示。然后该变量将在 DAG 任务中使用,如下所示。

con = 'username/$PASSWORD@//ex01-db.mybiz.com:1521/dwh'

sqlcl_cmd = f"""/oracle/sqlcl/bin/sql -s {con} > /data/tmp/extract.csv <<EOF
SET SQLFORMAT CSV
SET FEEDBACK OFF
SET TERMOUT OFF
SET ECHO OFF
SELECT * FROM ORDER.DAILY_SALES;
EXIT
EOF
"""

BashOperator(
    task_id = 'extract_order',
    bash_command = sqlcl_cmd,
    dag = dag
)

但是,观察到变量$PASSWORD 没有被 Bash 扩展,导致错误。如何在 BashOperator 中正确使用环境变量传递给bash_command

【问题讨论】:

  • 您可能需要在分配con='...'(第一行代码)中删除= 运算符周围的空格,并在脚本中写入${con} 而不是{con}。跨度>
  • 如果您使用 systemd 运行,stackoverflow.com/questions/47195896/…?如果你没有运行 systemd,airflow.apache.org/docs/apache-airflow/stable/howto/…?这有帮助吗?
  • @Emma 将隐藏代码的 Airflow UI 密码,但仍会在日志中显示
  • 环境变量将显示在日志中。日志中的屏蔽不是开箱即用的功能,但可以解决。这是解决示例:stackoverflow.com/questions/48380452/…。否则,我想您将需要 aws kms 之类的东西。
  • 原来的问题是环境变量没有扩展。如果您想询问有关日志中的屏蔽,建议您编辑标题和描述。

标签: bash airflow


【解决方案1】:

首先,测试您的气流用户是否有权访问该变量。 '回声$密码'。如果您不想在日志中显示 $PASSWORD,可以暂时更改它。

如果是这样,那么您可以在 bash 任务中传递带有参数的 con,您可以在此处看到:https://airflow.apache.org/docs/apache-airflow/1.10.2/tutorial.html

con = 'username/$PASSWORD@//ex01-db.mybiz.com:1521/dwh'

sqlcl_cmd = f"""/oracle/sqlcl/bin/sql -s {{params.con}} > /data/tmp/extract.csv <<EOF
SET SQLFORMAT CSV
SET FEEDBACK OFF
SET TERMOUT OFF
SET ECHO OFF
SELECT * FROM ORDER.DAILY_SALES;
EXIT
EOF
"""

BashOperator(
    task_id = 'extract_order',
    params={'con': con},
    bash_command = sqlcl_cmd,
    dag = dag
)

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2021-05-28
    • 2018-11-07
    • 1970-01-01
    • 2018-11-27
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多