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

Vla*_*ghe 5 bash airflow google-cloud-composer

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

这是一个简单的例子greeter.sh

#!/bin/bash
echo "Hello, $1!"
Run Code Online (Sandbox Code Playgroud)

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

bash greeter.sh world
> Hello, world!
Run Code Online (Sandbox Code Playgroud)

我们来写一个简单的 DAG:

#!/bin/bash
echo "Hello, $1!"
Run Code Online (Sandbox Code Playgroud)

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

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

如何使我的文件可供 Airflow 使用?

Vla*_*ghe 8

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

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

要获取存储在以下位置的脚本的正确地址dags_folder/

import os

DAGS_FOLDER = os.environ["DAGS_FOLDER"]
file = f"{DAGS_FOLDER}/greeter.sh"
Run Code Online (Sandbox Code Playgroud)