ایرفلو ابزاری هست برای ایجاد پایپلاین برای اجرای سرویس ها و مدیریت آنها و زمان بندی کردن اجرای آنها .

چند بخش اصلی ایرفلو:

  • init - اینیت کردن ساختار دیتابیس و فولدر بندی
  • scheduler - زمان بندی سرویس ها و اجرای تریگر
  • triggerer وظیفه ی فرا خوانی ورکر ها
  • worker - اصلی ترین بخش ایرفلو، وظیفه ی ترجمه ی اپراتور ها و اجرای آن ها را با استفاده از celery دارد
  • webserver - وظیفه ی این سرویس، نمایش گرافیکی و ایجاد رابط کاربر است
  • postgres اطلاعات درونش ‌خیره می شه
  • redis کش
  • cli رابط کاربری برای ترمینال

حتما در نسخه های داکری از اسلیم یا پایتونی استفاده نشو د و تنها از ایمیج هایی که فقط ایر فلو دارند استفاده شود مانند

image: apache/airflow:2.5.3

DAG

  • schedule_interval زمان بندی اجرای تسک است و با datedelta - crontab می شه تنظیم کنیم

  • start_date تاریخ شروع تسک

ترتیب اجام تسک ها را می تونیم با << نمایش بدیم

docker operator

یکی از مهم ترین اپراتور ها برای اجرای تسک است

توجه شود داکر اپراتور ، سرویس ها را از داکر کامپوز نمی خونه ،‌بلکه خودش می تونه stand alone یک ایمیج رو ران کنه ، و مانند داکر کامپوز که مقادیر داکر رو میگیره ، به DockerOperator هم باید مقادیر رو بدیم :

  • task_id - هر اپراتور یک شناسه دارد
  • image - نام و تگ ایمیج
  • container_name - نامی که قراره ساخته بشه، بهتره با نام هایی که داکر کامپوز شاید بسازه ، یکی نباشه
  • do_xcom_push پیام ها رو توی یه تیبل میریزه - بولیین
  • command
  • mounts - مانند ، والیوم است ، سورس و تارگت می گیرد
            mounts=[Mount(
      		source="/usr/local/projects/news_fetcher/config.json",
      		target="/app/config.json",
      		type="bind")]
    
  • network_mode - توجه شود در صورتی که بخوهایم از شبکه ی داکر کامپوز استفاده کنیم ، ابتدا باید لیست نتورک های داکر را گرفت ، سپس اونی که شبیه به اسم دایرکتوری است را بزاریم

postgres operator

ابتدا باید یک کانکشن ساخت : در صفحه وب سرور - در منوی ادمین - در بخش کانکشن

توجه شود باید کانکشنی ست کنیم که در نتورک خود ایرفلو باشد . و در نهایت نام کانکشن باید در اوپراتور داده شود :

‍‍```
remove_expire_link = PostgresOperator(
task_id="news_postgres",
	postgres_conn_id="postgres_default",
sql="""
```