ติดตั้ง Docker
ติดตั้ง Docker Desktop หรือ Docker Engine ที่มี Compose V2 และจัดสรร RAM อย่างน้อย 4 GB
DATA ENGINEERING · WORKFLOW ORCHESTRATION
Apache Airflow เปลี่ยน workflow ให้เป็นกราฟแบบมีทิศทางและไม่มีวงรอบ แต่ละ task มีสถานะที่ตรวจสอบได้ dependency กำหนดว่างานใดไปต่อได้ และ scheduler ประสานการทำงานโดยไม่ซ่อนหลักฐาน
warin/Airflow2026INTERACTIVE DAG SIMULATOR
แบบจำลองใน browser ไม่ได้รัน Airflow จริง แต่แยกตรรกะ dependency ให้เห็นชัดก่อนเปิด UI จริงใน Docker
REAL AIRFLOW · DOCKER COMPOSE
ชุดดาวน์โหลดมี Compose, PostgreSQL, LocalExecutor, DAG สำหรับ Airflow 3 สองตัว สคริปต์เปิด/ปิด และคู่มือสำหรับการสอน
ติดตั้ง Docker Desktop หรือ Docker Engine ที่มี Compose V2 และจัดสรร RAM อย่างน้อย 4 GB
docker compose up airflow-initรอจน container สำหรับ initialize จบด้วยรหัส 0
docker compose up -dhttp://localhost:8080 · airflow / airflow
Trigger teaching_etl แล้วดู Graph, Grid, task log, retry และค่า XCom
SYSTEM ARCHITECTURE
อ่านไฟล์ Python และสร้างโครงสร้าง workflow หาก syntax ผิด DAG อาจไม่ปรากฏ
ประเมิน dependency และสถานะ ก่อนส่ง task instance ที่พร้อมให้ executor
รันหลาย task process บนเครื่องเดียว เหมาะกับชุดสอนนี้ ไม่ใช่ distributed cluster
เก็บ DAG run, task state, schedule, connection และ metadata ของ XCom ซึ่งเป็นหลักฐานเบื้องหลัง UI
ให้บริการ web UI และ API ที่พอร์ต 8080 ห้ามเปิด credential สำหรับชั้นเรียนสู่สาธารณะ
รอ deferrable task อย่างมีประสิทธิภาพโดยไม่ยึด worker slot
MANUAL DAILY INGESTION · OPEN-METEO → POSTGRESQL
กด Trigger DAG แล้วกำหนด data_date เพื่อดู Extract → Validate → Load โดย UPSERT ทำให้รันวันเดิมซ้ำได้อย่างปลอดภัย
@dag(
dag_id="daily_weather_to_postgres",
schedule=None, # manual trigger only
params={"data_date": Param("2026-08-01", format="date")},
)
def daily_weather_to_postgres():
row = validate(extract()) # download one day from Open-Meteo
load(row) # UPSERT into teaching_daily_weatherAIRFLOW 3 · TASKFLOW API
ค่าที่ return กลายเป็น XCom reference การเรียกฟังก์ชันที่มี decorator จึงนิยาม task แทนการรัน Python ทันที
from airflow.sdk import dag, task
@dag(schedule=None, start_date=..., catchup=False)
def teaching_etl():
@task
def extract() -> list[dict]: ...
@task
def summarize(rows: list[dict]) -> dict: ...
rows = extract()
summarize(rows) # XComArg wires the dependency
teaching_etl()TEACHING SEQUENCE
ทำนาย task ที่พร้อมรันก่อนกดขั้นถัดไป
เปลี่ยนข้อมูลและตรวจสายสัมพันธ์ผ่าน XCom
บังคับให้ล้มเหลวหนึ่งครั้งแล้วอธิบาย retry
เปลี่ยนคะแนน branch และระบุ task ที่ถูก skipped
เพิ่ม cron schedule แล้วแยก logical date จากเวลาจริง
วินิจฉัย DAG ที่หายด้วย parser error และ container log
credential และ secret ในชุดนี้ตั้งใจทำให้ง่าย โปรดเปิดเฉพาะ localhost ระบบ production ต้องออกแบบ secret, TLS, authentication, backup, monitoring และ executor/deployment model อย่างจริงจัง