# ============================================================================= # eBdesk SiCABE — dependensi top-level image Airflow (strategi S1: satu env) # ============================================================================= # File ini adalah SUMBER (input) untuk `uv pip compile`. Jangan tambahkan pin # hasil ke sini — hasilnya ada di requirements.lock. # # Regenerasi lock (lihat juga header deploy/docker/airflow/Dockerfile): # docker run --rm -v "$PWD/deploy/docker/airflow:/w" apache/airflow:3.3.1-python3.11 \ # bash -lc 'pip -q install uv && uv pip compile /w/requirements.in --output-file /w/requirements.lock' # # ✅ Extra `[airflow]` WAJIB dipakai sejak OpenMetadata 2.0.2. # Di OM 1.13.x extra itu mem-pin `apache-airflow==3.2.1` sehingga menurunkan # Airflow; di OM 2.0.2 extra yang sama mem-pin `apache-airflow==3.3.1` — sama # persis dengan versi terbaru dan base image kita. Diuji di experiments/om20x. # ============================================================================= apache-airflow==3.3.1 # Provider Airflow yang dipakai DAG / konektor apache-airflow-providers-trino apache-airflow-providers-amazon apache-airflow-providers-http # WAJIB: Postgres adalah metadata DB Airflow (postgresql+psycopg2://) — tanpa # driver-nya container gagal start. Base `slim` TIDAK membawanya. apache-airflow-providers-postgres # ─── PIN WAJIB: melindungi plugin OpenMetadata dari kerusakan SENYAP ───────── # SQLAlchemy 2.1 mematahkan rantai: # flask_appbuilder -> sqlalchemy_utils -> sqlalchemy.orm.attributes # AttributeError: module 'sqlalchemy.orm.attributes' has no attribute # 'ScalarAttributeImpl' # Akibatnya plugin `openmetadata-managed-apis` GAGAL DIMUAT saat Airflow start # (log hanya berbunyi "Failed to import plugin openmetadata_managed_apis"), # sehingga tombol "Test Connection" dan jalur pipeline service client # (docs/sicabe-install-phases-detail.md §8.11) mati — dengan pesan yang TIDAK # menyebut SQLAlchemy sama sekali. # Lock saat ini memakai 2.0.54 HANYA karena di-resolve ketika 2.1 belum ada; # tanpa pin ini, regenerasi lock berikutnya akan menarik 2.1.x dan mematahkannya. # ⚠️ Berkas constraints RESMI Airflow pun TIDAK mem-pin sqlalchemy — jadi hanya # pin eksplisit inilah yang melindungi. # Ditemukan & dibuktikan di experiments/airflow332 — lihat reviews/sicabe-18. sqlalchemy<2.1 # Transformasi & data quality # dbt-core<1.12: 1.12.x menarik `dbt-core-experimental-parser` yang sdist-only # (tanpa wheel) sehingga memaksa build dari source. 1.11.x tidak. dbt-core<1.12 dbt-trino>=1.8,<2.0 great_expectations>=1.0,<2.0 # Metadata ingestion # WAJIB sama dengan versi server OpenMetadata (deploy/ = 2.0.2). # Extra `[airflow]` membawa plugin-side deps + provider elasticsearch/opensearch. # Extra `[pii-processor]` (presidio + spacy) dibutuhkan agar DAG yang DIBANGKITKAN # plugin OpenMetadata untuk pipeline TestSuite bisa diimpor Airflow: DAG tsb # mengimpor workflow ingestion yang menyentuh presidio_analyzer. Tanpa extra ini # deploy pipeline gagal dengan: # Failed to import dag_file [.../sicabe_dq_gold_native.py]: No module named 'presidio_analyzer' openmetadata-ingestion[airflow,pii-processor]==2.0.2.0 # Plugin REST API OpenMetadata yang disajikan Airflow di prefix /pluginsv2/. # Inilah yang di-probe server OM (GET /pluginsv2/api/v2/openmetadata/health-auth) # dan yang menghidupkan tombol "Test Connection" di UI — lihat # docs/sicabe-install-phases-detail.md §8.11. openmetadata-managed-apis==2.0.2.0 # Lineage dbt (bronze→silver→gold) di OpenMetadata. # Extra `[dbt]` dari openmetadata-ingestion memerlukan paket ini untuk membaca # artefak dbt (manifest.json/catalog.json). Tanpa ini, workflow dbt gagal dengan # "No module named 'collate_dbt_artifacts_parser'" dan lineage tidak terbentuk. collate-dbt-artifacts-parser==0.1.4