在Google Cloud Composer上使用Airflow运行shell脚本文件



我有几个多用途shell脚本存储在.sh文件中。我的意图是在Cloud Composer上构建一些Airflow DAG,以利用这些脚本。DAG主要由BashOperators组成,它们用特定的参数调用脚本。

这里有一个简单的例子,greeter.sh:

#!/bin/bash
echo "Hello, $1!"

我可以像这样在本地运行它:

bash greeter.sh world
> Hello, world!

让我们写一个简单的DAG:

# import and define default_args
dag = DAG('bash_test',
description='Running a local bash script',
default_args=default_args,
schedule_interval='0,30 5-23 * * *',
catchup=False,
max_active_runs=1)
bash_task = BashOperator(
task_id='run_command',
bash_command=f"bash greeter.sh world",
dag=dag
)

但是把脚本greeter.sh放在哪里呢?我试着把它放在dags/文件夹和data/文件夹中,放在一级或嵌套在dependencies/目录中。我还尝试将地址写为./greeter.sh。毫无意义:我永远找不到文件。

我还尝试使用sh来代替bash,但我得到了一个不同的错误:sh: 0: Can't open greeter.sh。但当文件不在时也会出现此错误,所以这是相同的问题。与任何运行chmod +rx的尝试相同。

如何将我的文件提供给Airflow?

对这个问题的评论揭示了答案。

dags_folder的地址存储在DAGS_FOLDER环境变量中。

为存储在dags_folder/中的脚本获取正确地址:

import os
DAGS_FOLDER = os.environ["DAGS_FOLDER"]
file = f"{DAGS_FOLDER}/greeter.sh"

最新更新