Pipeline을 구축할 때 고려해야 할 사항은 Pipeline이 실패했다면 빠르게 실패를 캐치하고 에러를 분석하는 것이다. 만약 Pipeline이 정상적으로 실행되었다하더라도 예기치 않은 데이터가 적재될 경우도 있으며, 시스템이 에러를 발생시키도록 처리하기 힘든 데이터들도 있다. 이럴 때는 적재된 데이터에 대해 육안으로 확인해야 한다.
이러한 이유들로 인해 우리는 Pipeline이 실행된 뒤에 그 결과를 알림받을 필요가 있다.
따라서 Airflow로 메일을 보내는 방법에 대해 알아본다.
메일의 내용 구성은 Pipeline의 결과 상태값만 보낼 수도 있고, 데이터를 Grid 형태로 포함시킬 수도 있고, 대시보드의 스냅샷을 담을 수도 있다.
지금은 메일을 보내는 방법에 대해서만 알아볼 예정이며, Outlook이나 사내 그룹웨어 메일 등을 사용하겠지만 간단하게 Gmail로 메일을 보내보도록 한다.
구글 가이드
https://support.google.com/mail/answer/7126229?hl=ko#zippy=
Gmail로 들어간 뒤 우측 상단에 [설정(톱니바퀴)] - [모든 설정 보기] 클릭
[전달 및 POP/IMAP] 탭의 [IMAP 액세스]에서 IMAP 사용 선택 후 [변경사항 저장]
구글 계정에 들어가 [보안] - [Google에 로그인] - [2단계 인증]을 클릭하여 가이드에 따라 인증을 해준다.
[앱 비밀번호]가 활성화되면 클릭
메일을 선택하고 기기를 선택한다.
16자리 앱 비밀번호가 생성되면 잘 보관한다.
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
: 이메일 계정Airflow 환경변수 가이드
https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#smtp
아래 모듈을 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/>
"""
)
Task는 다음과 같다.
DAG를 실행하면 다음과 같이 메일이 정상적으로 오는 것을 확인할 수 있다.