from airflow.decorators import dag, task
from datetime import datetime
import boto3
import time
default_args = {
'owner': 'jinwoo',
'start_date': datetime(2024, 12, 3), # 시작 날짜
'provide_context': False,
}
def tableList_trigger_glue_job(crawler_name):
glue_client = boto3.client('glue', region_name='ap-northeast-2')
response = glue_client.start_crawler(Name=crawler_name)
# Crawler 실행 완료를 기다림
while True:
response = glue_client.get_crawler(Name=crawler_name)
crawler_state = response['Crawler']['State']
print(crawler_state)
if crawler_state == 'READY':
print(f'Glue Crawler {crawler_name} executed successfully!')
break
elif crawler_state in ['RUNNING', 'STOPPING']:
print(f'Glue Crawler {crawler_name} is still running. Current state: {crawler_state}')
time.sleep(60)
elif crawler_state in ['FAILED', 'STOPPED']:
print(f'Glue Crawler {crawler_name} execution FAILED or STOPPED.')
raise
@dag(
schedule_interval=None,
default_args=default_args,
max_active_runs=1,
catchup=False,
tags=['test']
)
def hello_dag():
@task
def trigger_glue_job():
crawler_name = 'glue_crawler'
tableList_trigger_glue_job(crawler_name)
trigger_glue_job()
dag = hello_dag()