Apache Airflow iş akışlarını planlamak ve izlemek için kullanılan open source bir platformdur. Apache firması tarafından 2015 yılında ilk sürümü yayınlanmıştır. Python uyumlu olması basit bir web arayüzüne sahip olması önemli özelliklerindendir, Python projelerinin iş akışlarınının düzenlenmesinde çok büyük kolaylık sağlamaktadır.
Kurulum:
Apache Airflow kurulacak makinede Python 3.6 olmalıdır eğer python daha düşük sürümü ile çalışan bir sunucunuz varsa virtual env ile kurulum yapılması önerilmektedir.
Ben bu makalemde apache airflow kurulumunda postgresql kullanacağım ve authentication için ise ldap entegrasyonu kullanacağım.
Distro olarak Sles 15 Sp3 kullandım
Apache Airflow;
PostgreSQL, MySQL SQLite ve MS SQL desteklemektedir.
https://airflow.apache.org/docs/apache-airflow/stable/installation/prerequisites.html
Kuruluma başlamadan önce aşağıdaki komut ile airflow home folderını belirtiyoruz,
Eğer yüklü değilse python3 ü yükleyelim
Mümkünse 3.6 olması tercih edilir
zypper in python3
export AIRFLOW_HOME=~/airflow
pip3 install apache-airflow
pip3 install typing_extensions
Postgresql kullanacağım için aşağıdaki modülüde kurmam gerekiyor,
pip3 install psycopg2
Resim-1
PostgreSQL Kurulumu
Airflow kurulumu sonrasında postgresql kurulumuna geçelim
zypper in postgresql13-server ( Sles)Servisi kontrol edelim,
systemctl status postgresql.service
İlgili confa girelim distroya göre pathi değişiklik gösterebilir,
/var/lib/pgsql/data/postgresql.conf
Listen_adress kısmını bulup aşağıdaki gibi değiştirelim.
listen_addresses = ‘*’
Resim-2
Ardından aşağıdaki conf dosyasına girelim,
/var/lib/pgsql/data/pg_hba.conf
En alttaki satırları aşağıdaki gibi ayarlayalım,
Resim-3
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all peer
#host replication all 127.0.0.1/32 ident
#host replication all ::1/128 ident
#local all postgres peer
local all postgres peer
local postgres omi md5
local all all md5
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
kaydet de ve çık…
systemctl start postgresql.service
komutu ile servisi başlatalım
Resim-4
Ardından postgres userına geçiş yapalım
su – postgres
ardından psql komutu ile sql cli a geçilir
Resim-5
Aşağıdaki komut ile airflow için db oluşturulur
postgres=# create database airflow_db;
CREATE DATABASE
Sonra user
create user airflowuserismi with encrypted password ‘şifreneolacaksa’;
CREATE ROLE
Yetki veriyoruz
grant all privileges on database airflow_db to airflow;
GRANT
\q komutu ile çıkıyoruz
Kontrol ediyoruz
psql -U airflow -h localhost -d airflow_db
eğer hata almadan aşağıdaki gibi çıktı geliyorsa database oluşmuş demektir,
Resim-6
Airflow Ayarlanması
Şimdi airflow ayarlarını yapılandırmaya gelelim,
Airflow home folderına gelelim
Airflow home folderında ilgili folderlarında oluşturulduğundan emin olalım
dags logs scripts
eğer yoksa
mkdir dags logs scripts
komutu ile oluşturalım
Ardından
airflow.cfg dosyasını açalım
Önemli olan satırları aşağıda yazıyorum bunları değiştirin diğerleri aynı kalabilir
dags_folder = /opt/airflow/dags (sizde hangi folder ise )
executor = LocalExecutor ( Bu çok önemli aynı anda parallel işlemler yaptırmak istiyorsak Localexecutor olmalı)
default_timezone = Europe/Istanbul ( Saat ayarları)
sql_alchemy_conn = postgresql+psycopg2://airflowdbuser:airflowdbşifreniz@localhost/ airflow_db
(postgresql adımında oluşturduğumuz airflowdb userı ve şifresini Kırmızı ile belirttiğimi alanda yazıyoruz)
base_log_folder = /root/airflow/logs (Logları nereye yazdırmak istiyorsak)
web_server_host = sunucu ip adresiniz
web_server_port = hangiporttan erişmek istiyorsanız default 8080
[smtp] sekmesinde mail attıracağınız host sunucunun kendisi veya relay bir host serverınız varsa ayarlayabilirsiniz.
Resim-7
LDAP Entegrasyonu
Son ayar olarak firmamızda active directory yapımız varsa kullanıcıların yetkilerini AD üstündeki gruplara göre verebiliyoruz , aşağıdaki yapılandırmayı yapmamız gerekmektedir.
Öncesinde
gcc.x86_64 , python3-devel, openldap-devel paketlerini kurmamız gerekiyor.
Son olarak ilgili paketide kuralım
python -m pip install python-ldap
Airflow home klasörüne gelelim “webserver_config.py” dosyasına aşağıdaki satırları ekleyelim
import os kısmından sonra aşağıdaki satırları ekleyelim
from airflow import configuration as conf
from flask_appbuilder.security.manager import AUTH_LDAP
basedir = os.path.abspath(os.path.dirname(__file__)) satırından sonra aşağıdaki satırı ekleyelim
SQLALCHEMY_DATABASE_URI = conf.get(‘core’, ‘SQL_ALCHEMY_CONN’)
Resim-8
Dosyanın en altına gelelim ve aşağıdaki satırları ekleyelim bu satırları aynen yazdığım gibi eklemeniz gerekmektedir,(Not bu işlemde AD üstünden bütün userları görebilen read only bir bind user kullanmamız gerekecektir.)
CSRF_ENABLED = True
AUTH_TYPE = AUTH_LDAP
AUTH_LDAP_SERVER = “ldap://ADdomainadresiniz”
AUTH_LDAP_USE_TLS = False
AUTH_LDAP_ALLOW_SELF_SIGNED = False
AUTH_ROLE_ADMIN = ‘Admin’
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = “Viewer”
AUTH_LDAP_SEARCH = “DC=abc,DC=com,DC=tr” (Burası örnek verilmiştir , Search base olarak AD hesabınızın en tepesinide seçebilirsiniz istediğiniz bölümüde , abc.com.tr örnek olması açısından yazılmıştır.)
AUTH_LDAP_UID_FIELD = “sAMAccountName”
# For a typical OpenLDAP setup (where LDAP searches require a special account):
# The user must be the LDAP USER as defined in LDAP_ADMIN_USERNAME
AUTH_LDAP_BIND_USER = “CN=Readonlybelirlediğinizuser,OU=Bpp_Prx_Ftp_ID,OU=abckullanıcıları,DC=abc,DC=com,DC=tr”(AD üstünde read only bir hesabınızın DN ni buraya giriyoruz)
AUTH_LDAP_BIND_PASSWORD = “Şifre”(read only hesabın şifresi)
#a mapping from LDAP DN to a list of FAB roles
AUTH_ROLES_MAPPING = {
“CN=VM Admin,OU=Teknoloji,OU=Gruplar,OU=Gruplar,DC=abc,DC=com,DC=tr”: [“Admin”],
“CN=Standart Users,OU=User,OU=Gruplar,DC=abc,DC=com,DC=tr”: [“User”],
} (Bu kısımda hangi gruplara hangi yetkiyi verecekseniz o grupların DN lerini örnekteki gibi girmelisiniz)
# the LDAP user attribute which has their role DNs
AUTH_LDAP_GROUP_FIELD = “memberOf”
# if we should replace ALL the user’s roles each login, or only on registration
AUTH_ROLES_SYNC_AT_LOGIN = True
# force users to re-auth after 30min of inactivity (to keep roles in sync)
Ayarları bu şekilde yapıp kaydedin , daha sonra ilgili komutla airflow u çalıştırıyoruz,
airflow db init
Ardından webarayüz ile beraber uygulamayı başlatalım.
nohup airflow webserver -p Port Numarasını Yazın > /opt/airflow/logs/airflow_web.err.log 2>&1 &
(arka planda çalışmasını istediğim için böyle çalıştırdım.)
Web arayüzden kontrol edelim
Resim-9
Arayüz geldi
Şimdi AD hesabımız ile giriş yapalım.
Gördüğünüz gibi arayüzümüz de geldi.
Resim-10
Ayrıca schedulerıda çalıştırmayı unutmayalım.
nohup airflow scheduler > /opt/airflow/logs/airflow_scheduler.err.log 2>&1 &’
Bu şekilde yine arka planda çalışmasını ve logları başka bir yere dump etmesini sağladık.
Makalemizde neler yaptık;
- Airflow kurulumunu yaptık
- Postgresql kurulumunu yaptık
- Airflow için database oluşturduk
- Airflow için ayarları yaptık
- Ldap entegrasyonu için ayarlamaları yaptık
- Apache Airflowu çalıştırdık.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
TAGs: apache airflow nedir, airflow nedir, airflow kurulumu, apache airflow kurulumu