Airflow Pipeline 만들기 - Email 보내기

bradley·2022년 8월 29일
2

Airflow

목록 보기
7/16
post-thumbnail

개요


Pipeline을 구축할 때 고려해야 할 사항은 Pipeline이 실패했다면 빠르게 실패를 캐치하고 에러를 분석하는 것이다. 만약 Pipeline이 정상적으로 실행되었다하더라도 예기치 않은 데이터가 적재될 경우도 있으며, 시스템이 에러를 발생시키도록 처리하기 힘든 데이터들도 있다. 이럴 때는 적재된 데이터에 대해 육안으로 확인해야 한다.
이러한 이유들로 인해 우리는 Pipeline이 실행된 뒤에 그 결과를 알림받을 필요가 있다.
따라서 Airflow로 메일을 보내는 방법에 대해 알아본다.

메일의 내용 구성은 Pipeline의 결과 상태값만 보낼 수도 있고, 데이터를 Grid 형태로 포함시킬 수도 있고, 대시보드의 스냅샷을 담을 수도 있다.
지금은 메일을 보내는 방법에 대해서만 알아볼 예정이며, Outlook이나 사내 그룹웨어 메일 등을 사용하겠지만 간단하게 Gmail로 메일을 보내보도록 한다.

사전 설정


구글 설정

구글 가이드
https://support.google.com/mail/answer/7126229?hl=ko#zippy=

IMAP 켜기

Gmail로 들어간 뒤 우측 상단에 [설정(톱니바퀴)] - [모든 설정 보기] 클릭

[전달 및 POP/IMAP] 탭의 [IMAP 액세스]에서 IMAP 사용 선택 후 [변경사항 저장]

SMTP 비밀번호 설정

구글 계정에 들어가 [보안] - [Google에 로그인] - [2단계 인증]을 클릭하여 가이드에 따라 인증을 해준다.

[앱 비밀번호]가 활성화되면 클릭

메일을 선택하고 기기를 선택한다.

16자리 앱 비밀번호가 생성되면 잘 보관한다.

Airflow SMTP 설정

Docker-Compose를 이용하고 있다면 다음과 같이 docker-compose.yaml에 환경 변수들을 추가한다.

airflow.cfg를 이용하려면 volume으로 주어 사용해야 한다.

  • AIRFLOW__SMTP__SMTP_HOST : 'smtp.gmail.com'
  • AIRFLOW__SMTP__SMTP_USER : 이메일 계정
  • AIRFLOW__SMTP__SMTP_PASSWORD : 구글에서 발급받은 16자리 앱 비밀번호(공백없이)
  • AIRFLOW__SMTP__SMTP_PORT : 587
  • AIRFLOW__SMTP__SMTP_MAIL_FROM : 이메일 계정
  • 나머지 환경 변수 : default 값으로도 충분하니 커스텀이 필요하지 않으면 설정이 필요없다.

Airflow 환경변수 가이드
https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#smtp

DAG 만들기


아래 모듈을 Import해준다.
from airflow.operators.email import EmailOperator

send_to_gmail.py

from datetime import datetime

from airflow import DAG
from airflow.operators.email import EmailOperator

with DAG(
    'send_to_gmail',
    start_date = datetime(2022, 1, 1),
    schedule_interval = None
) as dag:

    email = EmailOperator(
        task_id = 'send_to_gmail',
        to = '보낼 메일주소',
        subject = 'Airflow Test 메일입니다',
        html_content = """
            이 메일은 테스트 메일입니다.<br/><br/>
            
            {{ ds }}<br/>
        """
    )

DAG 구조


Task는 다음과 같다.

실행 결과


DAG를 실행하면 다음과 같이 메일이 정상적으로 오는 것을 확인할 수 있다.

profile
데이터 엔지니어링에 관심이 많은 홀로 삽질하는 느림보

0개의 댓글