이번에는 Xcom을 이용해서 email을 전송하는 실습을 해볼까 합니다.
Pyython Operator의 결과값을 이용해서 Email 을 전송하는데, 중간에 Xcom을 사용해보려고 합니다.
먼저 (Python → Email 오퍼레이터 Xcom 전달)을 하기 위해서
Email 오퍼레이터는 어떤 파라미터에 Template를 쓸 수 있는지 알아봐야 합니다.
공식문서를 참고해보면, 'to', 'subject', 'html_content', 'files' 파라미터가 템플릿 문법을 적용할 수 있는 변수들입니다.
이 중에서 실습은 'subject'와 'html_content' 의 두 가지 필드에 템플릿 문법을 사용해보겠습니다.
@task(task_id='find_dog_task')
def dog_find(**kwargs):
from random import choice
# choice라는 함수는 리스트나 튜플 아니면 스트링 중에 아무값이나 꺼낼 수 있도록 하는 함수입니다.
return choice(['Dachshund','Golden Retriever'])
send_email = EmailOperator(
task_id='send_email',
to = 'hockey9322@naver.com'
subject = '{{ data_interval_end | ds }} dog_find 처리결과',
html_content = '{{ data_intrval_end | ds }} 처리 결과 <br>
알루는 {{ ti.xcom_pull(task_ids="find_dog_task")}} 입니다. <br>'
)
해당 코드를 dags폴더에 dags_python_email_operator.py라는 파일을 생성해 붙여줍니다.
from airflow import DAG
import pendulum
import datetime
from airflow.decorators import task
from airflow.operators.email import EmailOperator
with DAG(
dag_id = "dags_python_email_operator",
schedule="0 8 1 * *",
start_date=pendulum.datetime(2023, 8, 1, tz="UTC"),
catchup=False
) as dag:
@task(task_id='find_dog_task')
def dog_find(**kwargs):
from random import choice
# choice라는 함수는 리스트나 튜플 아니면 스트링 중에 아무값이나 꺼낼 수 있도록 하는 함수입니다.
return choice(['Dachshund','Golden Retriever'])
send_email = EmailOperator(
task_id='send_email',
to = 'hockey9322@naver.com',
subject = '{{ data_interval_end | ds }} dog_find 처리결과',
html_content = '{{ data_intrval_end | ds }} 처리 결과 <br> 알루는 {{ ti.xcom_pull(task_ids="find_dog_task")}} 입니다. <br>'
)
dog_find() >> send_email
이제, email operator가 제대로 작동됐는지 airflow를 통해 확인해보겠습니다.
find_dog_task의 Xcom을 확인해보면 아래와 같습니다.
Golden Retriever가 choice함수를 통해 선택된 것을 알 수 있습니다.
이메일도 제대로 왔는지 확인해보면 아래와 같습니다.
subject 와 html_content 의 두 가지 필드에 템플릿 문법이 잘 적용된 것을 확인할 수 있습니다.
알루는 닥스훈트니까 다시한번 dag을 실행시켜보록 하겠습니다. 4번째만에 닥스훈트가 나왔습니다!
이상으로, PythonOperator의 결과값을 이용해서 이메일을 전송해보는 실습을 해봤습니다. 이메일 오퍼레이터를 쓸 때, 어떻게 Xcom 데이터를 가지고 오는 것이 궁금하다면, 먼저 template문법을 지원하고 있는 파라미터를 확인하고, 그에 맞게 템플릿 문법을 적용한 후 코드를 작성하면 됩니다!
'컴퓨터 공부 > 💿 Airflow' 카테고리의 다른 글
[Airflow] BranchPython 오퍼레이터로 분기처리하기 (0) | 2023.08.29 |
---|---|
[Airflow] 전역 공유변수 Variable (0) | 2023.08.29 |
[Airflow] Python & Bash 오퍼레이터 with Xcom (0) | 2023.08.29 |
[Airflow] Bash Operator에서 Xcom 사용 (0) | 2023.08.29 |
[Airflow] Python Operator에서 Xcom 사용 (0) | 2023.08.28 |