[Airflow] Bash Operator로 쉘 스크립트 파일 실행하기

2024. 7. 19. 16:47·Minding's Programming/Airflow
728x90
반응형

쉘 스크립트는?

  • Unix/Linux Shell 명령을 이용해 만들어지고 인터프리터에 의해 한 줄씩 처리되는 파일
    (ex. 컴파일 방식: C, Java / 인터프리터 방식: Python, Shell)
  • echo, mkdir 등 기본적인 쉘 명령어를 입력해 작성하며, 변수를 입력받거나 for/if문 및 함수도 사용 가능하다.
  • 확장자가 없어도 동작하지만 주로 파일명에 .sh 확장자를 붙임

 

왜 쉡 스크립트가 필요한가?

  • 쉘 명령어를 이용해 복잡한 로직을 처리하는 경우 함수화하여 간단히 하기 위해
    (ex. sftp를 통해 파일 받은 후 DB에 Insert & tar.gz로 압축해두기)
  • 쉘 명령어 재사용을 위해서

 

Worker 컨테이너에서 쉘 스크립트를 수행하려면?

  • 일반적으로 컨테이너에서 쉘 스크립트를 이용하지 못하는 이유
    • 컨테이너는 외부의 파일을 인식할 수 없음
    • 컨테이너 내 파일을 만들어줄 경우, 재시작시 파일이 사라짐

 

  • 해결 방법
    • /plugins 폴더 내 쉘 스크립트를 저장해 지워지지 않고 사용할 수 있도록 한다.
    • Airflow에서도 커스텀한 py파일 또는 sh파일은 해당 폴더를 이용하라고 권장.

 

Bash Operator로 쉘 스크립트 파일 실행시키기

FRUIT=$1
if [ $FRUIT == APPLE ];then
	echo "You selected Apple!"
elif [ $FRUIT == ORANGE ];then
	echo "You selected Orange!"
elif [ $FRUIT == GRAPE ];then
	echo "You selected Grape!"
else
	echo "You selected other Fruit!"
fi

 

위 코드의 간단한 sh 파일을 DAG 파일을 만들어서 실행시켜 보았다.

* 주의할 점: airflow를 실행시키기 전 chmod를 통해 해당 sh파일의 실행 권한을 먼저 설정해주어야 한다.

# 해당 파일이 있는 디렉토리 진입 후
chmod 777 select_fruit.sh

 

from airflow import DAG
import pendulum
import datetime
from airflow.operators.bash import BashOperator

with DAG(
    dag_id="dags_bash_select_fruit",
    schedule="10 0 * * 6#1", # 첫 번째 토요일 0시 10분마다
    start_date=pendulum.datetime(2023, 3, 1, tz="Asia/Seoul"),
    catchup=False
) as dag:
    
    t1_orange = BashOperator(
        task_id="t1_orange",
        bash_command="/opt/airflow/plugins/shell/select_fruit.sh ORANGE",
    )

    t2_avocado = BashOperator(
        task_id="t2_avocado",
        bash_command="/opt/airflow/plugins/shell/select_fruit.sh AVOCADO",
    )

    t1_orange >> t2_avocado

위와 같이 DAG 파일을 만든 후 이전에 했던 방식과 똑같이 Task를 실행시켜준다.

 

로그를 확인해보면 정상적으로 실행된 것을 확인할 수 있다.

728x90

'Minding's Programming > Airflow' 카테고리의 다른 글

[Airflow] Python Operator 사용과 Python Decorator  (0) 2024.07.22
[Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용)  (0) 2024.07.19
[Airflow] DAG 내 task 연결하기 (순서 지정)  (0) 2024.07.19
[Airflow/Cron] Cron 스케줄 개념 정리  (0) 2024.07.19
[Airflow] Airflow DAG 만들기 & DAG 디렉토리 셋팅  (0) 2024.07.19
'Minding's Programming/Airflow' 카테고리의 다른 글
  • [Airflow] Python Operator 사용과 Python Decorator
  • [Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용)
  • [Airflow] DAG 내 task 연결하기 (순서 지정)
  • [Airflow/Cron] Cron 스케줄 개념 정리
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    KalmanFilter
    넘파이
    pygame
    mlb stats api
    에어플로우
    딥러닝
    django python
    칼만필터
    데이터분석
    칼만필터는어렵지않아파이썬
    KBO
    칼만필터는어렵지않아python
    django
    Python
    파이게임
    머신러닝
    FastAPI
    프로그래머스
    파이썬
    질롱코리아
    메이저리그
    Airflow
    게임개발
    코딩테스트
    데이터 엔지니어
    야구
    칼만필터는어렵지않아
    파이썬게임개발
    MLB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Airflow] Bash Operator로 쉘 스크립트 파일 실행하기
상단으로

티스토리툴바