feat(appliance): initial release of MERICA standalone appliance v1.0.0
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
# 🏛️ Arsitektur Platform — MERICA
|
||||
|
||||
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [📦 Panduan Deployment](deployment_guide.md) | [📘 Integrasi Airflow External](panduan_integrasi_existing_airflow.md) | [🎨 Panduan Pengguna Canvas](user_guide.md)
|
||||
|
||||
Dokumen ini menjelaskan rancang bangun teknis distribusi produksi **MERICA Low-Code Appliance**.
|
||||
|
||||
---
|
||||
|
||||
## 📌 1. Prinsip Utama Rancang Bangun
|
||||
|
||||
1. **Pola Single-Port Appliance (Unified Ingress Gateway)**:
|
||||
* Seluruh lalu lintas dari klien (peramban pengguna maupun panggilan REST API) disatukan melalui **port tunggal host: `14000`**.
|
||||
* Di dalam kontainer, proses **Nginx** bertindak sebagai *reverse proxy gateway*:
|
||||
* Permintaan UI (`/*`) disajikan langsung dari berkas statis Vite React (`/usr/share/nginx/html`).
|
||||
* Permintaan API (`/api/*`), dokumentasi Swagger (`/docs`), dan skema (`/openapi.json`) di-proxy ke loopback backend FastAPI pada `127.0.0.1:8000`.
|
||||
* **Port backend (8000) TIDAK PERNAH diekspos ke host luar**. Hal ini menjamin **Zero CORS Issues**, meminimalkan latensi jaringan internal, dan mengeliminasi vektor serangan langsung ke server aplikasi.
|
||||
|
||||
2. **Decoupled Stateless Engine & Zero Local Bloat**:
|
||||
* Kontainer MERICA tidak menjalankan PostgreSQL, Redis, atau Airflow worker di dalamnya.
|
||||
* Total penggunaan sumber daya appliance sangat efisien: **RAM $\sim$ 100 MB** dan **CPU idle $< 1\%$**.
|
||||
* State eksekusi dan metadata pipeline dialokasikan sepenuhnya ke kluster Apache Airflow dan PostgreSQL eksternal yang dikonfigurasi melalui berkas `.env`.
|
||||
|
||||
3. **Dukungan Dual-Mode Pipelines SSOT (Anti-Blank Canvas & GitOps)**:
|
||||
* **Mode A: Local Mount Starter Pipelines** (`PIPELINES_DIR=./pipelines`): Menyediakan 3 template pipeline siap pakai secara *out-of-the-box* sehingga kanvas tidak kosong (*Anti-Blank Canvas*).
|
||||
* **Mode B: Git DAG Bundles (AIP-66)**: Airflow DAG Processor secara mandiri memantau repositori Git pipeline (`merica-pipelines.git`) setiap 30 detik untuk *Zero-Downtime Hot-Reload*.
|
||||
|
||||
4. **Shift-Left Pre-Flight Verification**:
|
||||
* Sebelum sebuah pipeline di-deploy ke Apache Airflow, engine backend MERICA menjalankan validasi sintaks `#val`, verifikasi kontrak kolom dbt (`contract: enforced`), dan inferensi tipe data otomatis. Kesalahan konfigurasi terdeteksi di kanvas sebelum task sempat dijadwalkan oleh scheduler Airflow.
|
||||
|
||||
---
|
||||
|
||||
## 🌐 2. Diagram Topologi Kontainer & Aliran Jaringan
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
subgraph CLIENT ["Akses Pengguna & Klien"]
|
||||
USER["Pengguna / Browser Web\n(Data Engineer)"]
|
||||
end
|
||||
|
||||
subgraph APPLIANCE ["MERICA Appliance Container (Port 14000:80)"]
|
||||
NGINX["Nginx Web Gateway\n(Port 80 Internal)"]
|
||||
REACT["Vite React Canvas UI\n(Static Assets / SPA)"]
|
||||
FASTAPI["FastAPI Backend Engine\n(127.0.0.1:8000 Loopback)"]
|
||||
SUPERVISOR["Supervisord Process Manager"]
|
||||
|
||||
NGINX -->|/* Static Assets| REACT
|
||||
NGINX -->|/api/* Reverse Proxy| FASTAPI
|
||||
SUPERVISOR -.->|Supervisi Proses| NGINX
|
||||
SUPERVISOR -.->|Supervisi Proses| FASTAPI
|
||||
end
|
||||
|
||||
subgraph PIPELINE_STORAGE ["Single Source of Truth (SSOT) Pipelines"]
|
||||
LOCAL_MOUNT["Mounted Starter Pipelines\n(./pipelines/)"]
|
||||
GIT_REPO["Git Pipeline Repository\n(merica-pipelines.git)"]
|
||||
end
|
||||
|
||||
subgraph AIRFLOW_CLUSTER ["Apache Airflow 3 Cluster (External)"]
|
||||
API_SERVER["Airflow API Server & Web UI\n(Port 14080)"]
|
||||
SCHEDULER["Airflow Scheduler & Workers"]
|
||||
DAG_PROC["Airflow DAG Processor\n(AIP-66 Git DAG Bundles)"]
|
||||
end
|
||||
|
||||
subgraph EXTERNAL_LAKEHOUSE ["Infrastruktur Data Lakehouse (External)"]
|
||||
PG_DB["PostgreSQL MetaDB\n(Port 14432)"]
|
||||
S3_STORAGE["MinIO / S3 Lakehouse Storage\n(Port 14090)"]
|
||||
OMD["OpenMetadata 2.0 Governance\n(Port 14585)"]
|
||||
end
|
||||
|
||||
USER -->|HTTP :14000| NGINX
|
||||
FASTAPI <-->|Read / Write YAML & dbt| LOCAL_MOUNT
|
||||
FASTAPI -.->|Push Commit (GitOps)| GIT_REPO
|
||||
FASTAPI -->|REST API :14080| API_SERVER
|
||||
FASTAPI -->|Introspection & Safe Preview| PG_DB
|
||||
FASTAPI -->|Governance Entity Sync| OMD
|
||||
|
||||
DAG_PROC -->|Poll 30s Hot-Reload| GIT_REPO
|
||||
DAG_PROC <-->|Local Volume Share| LOCAL_MOUNT
|
||||
SCHEDULER -->|Eksekusi Task Ingestion| PG_DB
|
||||
SCHEDULER -->|Parquet / Iceberg Write| S3_STORAGE
|
||||
SCHEDULER -->|OpenLineage Telemetry| OMD
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧩 3. Arsitektur Internal Modul Backend (Engine Core)
|
||||
|
||||
Backend MERICA dibangun di atas FastAPI modern dengan modul-modul modular:
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph ROUTERS ["API Endpoints (/api/v1)"]
|
||||
R_PIPE["pipelines.py\n(CRUD & Deploy)"]
|
||||
R_DISC["discovery.py\n(GWS Explorer)"]
|
||||
R_PREV["preview.py\n(DB Safe Preview)"]
|
||||
R_VAL["validation.py\n(Pre-Flight Check)"]
|
||||
R_GOV["governance.py\n(OpenMetadata)"]
|
||||
end
|
||||
|
||||
subgraph SERVICES ["Core Business Services"]
|
||||
S_PARSE["pipeline_parser.py\n(YAML Parser & Compiler)"]
|
||||
S_DBT["dbt_service.py\n(Model Gen & Smart Types)"]
|
||||
S_GWS["gws_service.py\n(Drive & Header Suggestion)"]
|
||||
S_DB["db_service.py\n(Introspection & PK Detect)"]
|
||||
S_AIR["airflow_service.py\n(Airflow 3 REST Client)"]
|
||||
S_OMD["omd_service.py\n(OpenMetadata Registrasi)"]
|
||||
end
|
||||
|
||||
ROUTERS --> SERVICES
|
||||
```
|
||||
|
||||
### Modul-Modul Utama:
|
||||
1. **Pipeline Parser & Compiler (`pipeline_parser.py`)**:
|
||||
* Mengonversi skema visual ReactFlow (node & edge JSON) ke spesifikasi deklaratif YAML Airflow 3 (`configs/*.yaml`).
|
||||
* Mengompilasi konfigurasi node menjadi parameter terstandarisasi untuk Sling CDC, GWS Ingestor, dlt REST API, DuckDB deduplikasi, dan Great Expectations.
|
||||
2. **dbt Medallion Service (`dbt_service.py`)**:
|
||||
* Menghasilkan model SQL dbt Silver dan Gold secara otomatis.
|
||||
* **Smart DDL Type Inference**: Menginferensi tipe data kolom secara otomatis (`INTEGER`, `DECIMAL(18,2)`, `TIMESTAMP`, `VARCHAR`).
|
||||
* **Shift-Left Quality Contract**: Menghasilkan aturan `schema.yml` dengan `contract: enforced`, constraint `unique`, `not_null`, dan `accepted_values`.
|
||||
* **Astronomer Cosmos Adapter**: Menyusun TaskGroup Airflow 3 dengan perilaku `TestBehavior.AFTER_EACH` (memisahkan model `.run` dan `.test` secara granular).
|
||||
3. **Database Introspection & Preview (`db_service.py`)**:
|
||||
* Melakukan inspeksi skema tabel dari sumber PostgreSQL.
|
||||
* Otomatis mendeteksi kandidat Primary Key (PK) dan kolom watermark berbasis timestamp.
|
||||
* Menyediakan **Safe 10-Row Data Preview** menggunakan pembatasan `LIMIT 10` dan statement timeout untuk mencegah *table lock*.
|
||||
4. **Google Workspace Discovery (`gws_service.py`)**:
|
||||
* Menjelajahi folder Google Drive secara interaktif.
|
||||
* Menganalisis tab Google Spreadsheet dan memberikan saran baris header (*Header Row Suggestion*).
|
||||
* Menyiapkan konfigurasi pembersihan otomatis (*auto-cleansing*: nama kolom `snake_case`, pembersihan unit string `(Rp)`, forward-fill sel yang di-merge).
|
||||
5. **OpenMetadata Governance Sync (`omd_service.py`)**:
|
||||
* Sinkronisasi entitas pipeline ke katalog OpenMetadata 2.0.
|
||||
* Pemetaan lineage visual end-to-end dari sumber data hingga Gold table.
|
||||
* Integrasi hasil uji kualitas data Great Expectations ke tab Data Quality OpenMetadata.
|
||||
|
||||
---
|
||||
|
||||
## 🔒 4. Keamanan Perimeter & Kebijakan Hak Akses
|
||||
|
||||
* **UID Execution**: Apache Airflow berjalan dengan user ID **`50000:0` (airflow)** sesuai standar resmi Apache Airflow 3.
|
||||
* **Volume Permission**: Seluruh volume bersama (*shared volumes*) yang diakses oleh DAG Processor menggunakan hak akses `50000:0` dengan `umask 0002` untuk mencegah *PermissionDenied error*.
|
||||
* **Perimeter Network**: Port 8000 FastAPI hanya mendengarkan pada antarmuka lokal `127.0.0.1` di dalam kontainer appliance; peramban eksternal hanya dapat berkomunikasi melalui Nginx pada port `14000`.
|
||||
* **Kredensial Aman**: Seluruh koneksi ke sumber database eksternal dan S3 menggunakan environment variable terenkripsi tanpa menyimpan *plain-text credential* di repositori Git.
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Navigasi Dokumen Terkait
|
||||
|
||||
* Lanjutkan ke: [📦 Panduan Deployment & Build](deployment_guide.md)
|
||||
* Menghubungkan ke Airflow: [📘 Panduan Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
|
||||
* Memulai Mendesain Pipeline: [🎨 Panduan Pengguna Canvas](user_guide.md)
|
||||
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
|
||||
@@ -0,0 +1,179 @@
|
||||
# 📦 Panduan Deployment & Build Mandiri — MERICA
|
||||
|
||||
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [🏛️ Arsitektur Platform](architecture.md) | [📘 Integrasi Airflow External](panduan_integrasi_existing_airflow.md) | [🎨 Panduan Pengguna Canvas](user_guide.md)
|
||||
|
||||
Panduan resmi bagi DevOps, System Administrator, dan Data Platform Engineer untuk instalasi, konfigurasi, build image mandiri, dan pemeliharaan MERICA Appliance.
|
||||
|
||||
---
|
||||
|
||||
## 💻 1. Spesifikasi Sistem & Prasyarat
|
||||
|
||||
Kebutuhan sumber daya perangkat keras tergantung pada mode deployment yang dipilih:
|
||||
|
||||
| Komponen | Mode 1: Standalone Appliance (Rekomendasi Produksi) | Mode 2: All-in-One Demo (dengan Airflow & DB Lokal) |
|
||||
| :--- | :--- | :--- |
|
||||
| **Peran** | Hanya menjalankan antarmuka Canvas & API Gateway MERICA (Port 14000). Eksekusi pipeline didelegasikan ke Airflow eksternal. | Menjalankan MERICA + Apache Airflow 3 + Postgres + Redis dalam satu host untuk demo mandiri. |
|
||||
| **CPU** | **1 vCPU** (x86_64) | **4 vCPU** (x86_64) |
|
||||
| **RAM** | **512 MB** *(Penggunaan aktual hanya $\sim$ 100 MB)* | **8 GB** |
|
||||
| **Disk** | **2 GB SSD** | **30 GB SSD** |
|
||||
| **Sistem Operasi** | Linux Ubuntu 20.04/22.04/24.04 LTS, RHEL 8/9, Debian 11/12, Rocky Linux | Sama |
|
||||
| **Runtime** | Docker Engine $\ge$ 24.0, Docker Compose v2 | Sama |
|
||||
|
||||
---
|
||||
|
||||
## ⚡ 2. Instalasi Cepat (Quick Start Sekali Klik)
|
||||
|
||||
### Opsi A: Menggunakan Skrip Otomatis `setup.sh` (Paling Cepat)
|
||||
Paket rilis MERICA dilengkapi dengan skrip instalasi cerdas `setup.sh`:
|
||||
|
||||
```bash
|
||||
# 1. Buka direktori rilis MERICA
|
||||
cd release/merica
|
||||
|
||||
# 2. Jalankan skrip setup
|
||||
bash ./setup.sh
|
||||
```
|
||||
|
||||
Skrip `setup.sh` secara otomatis akan:
|
||||
1. Memeriksa ketersediaan Docker Engine dan Docker Compose v2.
|
||||
2. Memeriksa ketersediaan berkas `.env` (jika belum ada, otomatis menyalin dari `.env.example`).
|
||||
3. Memastikan direktori starter pipelines (`./pipelines/`) siap dengan permission yang sesuai.
|
||||
4. Menjalankan kontainer `merica-appliance` di latar belakang (`docker compose up -d`).
|
||||
5. Melakukan polling *health check* ke endpoint `http://localhost:14000/api/v1/health` hingga layanan siap digunakan dalam waktu $\le 5$ detik.
|
||||
|
||||
---
|
||||
|
||||
### Opsi B: Instalasi Manual via Docker Compose
|
||||
|
||||
```bash
|
||||
# 1. Buka direktori kerja
|
||||
cd release/merica
|
||||
|
||||
# 2. Salin template environment variable
|
||||
cp .env.example .env
|
||||
|
||||
# 3. Sesuaikan alamat host Airflow existing pada .env
|
||||
nano .env
|
||||
|
||||
# 4. Nyalakan kontainer appliance
|
||||
docker compose up -d
|
||||
|
||||
# 5. Verifikasi status kontainer
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
Setelah kontainer aktif:
|
||||
* **MERICA Canvas Web**: Buka [`http://localhost:14000`](http://localhost:14000)
|
||||
* **Kredensial Default**: Username: `admin` | Password: `admin`
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 3. Konfigurasi Parameter `.env`
|
||||
|
||||
Berkas `.env` memegang seluruh konfigurasi konektivitas eksternal. Berikut adalah parameter utama yang perlu Anda sesuaikan:
|
||||
|
||||
```bash
|
||||
# --- Konfigurasi Appliance MERICA ---
|
||||
MERICA_IMAGE=registry.sicabe.com/merica:1.0.0
|
||||
MERICA_PORT=14000
|
||||
ENVIRONMENT=production
|
||||
|
||||
# --- Alamat Cluster Apache Airflow External ---
|
||||
# Arahkan ke URL web UI / API server kluster Airflow 3 existing Anda:
|
||||
AIRFLOW_WEB_URL=http://host.docker.internal:14080
|
||||
|
||||
# --- Koneksi MetaDB Eksternal (Lakehouse PostgreSQL) ---
|
||||
# Digunakan untuk fitur Introspection skema tabel dan Safe 10-Row Data Preview:
|
||||
POSTGRES_HOST=host.docker.internal
|
||||
POSTGRES_PORT=14432
|
||||
POSTGRES_DB=lakehouse_metadb
|
||||
POSTGRES_USER=airflow
|
||||
POSTGRES_PASSWORD=airflow
|
||||
|
||||
# --- Penyimpanan Pipeline SSOT (Pilih Salah Satu Mode) ---
|
||||
# Mode 1 (Default): Mount starter pipelines lokal untuk menjamin Canvas langsung terisi (Anti-Blank Canvas):
|
||||
PIPELINES_DIR=./pipelines
|
||||
|
||||
# Mode 2 (GitOps Enterprise): Arahkan ke repositori Git yang disinkronkan via Airflow AIP-66 Git DAG Bundles:
|
||||
# GIT_PIPELINE_REPO_URL=https://repo.sicabe.com/merica-dlh/merica-pipelines.git
|
||||
# GIT_PIPELINE_REPO_BRANCH=main
|
||||
# GIT_PIPELINE_REPO_SUBDIR=dags
|
||||
|
||||
# --- Integrasi OpenMetadata Governance (Opsional) ---
|
||||
OMD_SERVER_URL=http://host.docker.internal:14585
|
||||
OMD_AUTH_TOKEN=
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🏛️ 4. Pilihan Mode Deployment
|
||||
|
||||
Tersedia dua berkas Docker Compose sesuai kebutuhan Anda:
|
||||
|
||||
### 1. Standalone Appliance (`docker-compose.yml`) — Rekomendasi Produksi
|
||||
Hanya menjalankan 1 kontainer `merica-appliance` (Port 14000). Semua komponen lain (Airflow, Database, S3) menggunakan layanan eksternal organisasi Anda.
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 2. All-in-One Appliance (`docker-compose.all-in-one.yml`) — Mode Demo / Evaluasi
|
||||
Menjalankan MERICA bersamaan dengan Apache Airflow 3, PostgreSQL, dan Redis di dalam satu mesin untuk keperluan uji coba lokal tanpa server eksternal:
|
||||
```bash
|
||||
docker compose -f docker-compose.all-in-one.yml up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔨 5. Opsi Mem-Build Image Mandiri (*Self-Contained Build*)
|
||||
|
||||
Jika kebijakan keamanan organisasi Anda mewajibkan build lokal dari sumber (misalnya untuk jaringan tertutup *air-gapped*):
|
||||
|
||||
```bash
|
||||
# Jalankan build multi-stage Docker
|
||||
docker build -t registry.sicabe.com/merica:1.0.0 .
|
||||
```
|
||||
|
||||
Proses multi-stage build akan:
|
||||
1. Mengompilasi kode React Vite frontend menjadi aset statis optimal menggunakan Node.js 20 Alpine.
|
||||
2. Memasang dependensi Python backend FastAPI dan pustaka validasi pada basis Python 3.11-slim.
|
||||
3. Mengonfigurasi Nginx dan Supervisord sehingga frontend dan backend berjalan aman dalam satu image ramping berukuran $\sim 230$ MB.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 6. Prosedur Pemeliharaan & Pembaruan (*Maintenance & Upgrade*)
|
||||
|
||||
### Memeriksa Log Aplikasi:
|
||||
```bash
|
||||
# Log gabungan (Nginx access log & FastAPI log)
|
||||
docker compose logs -f merica
|
||||
```
|
||||
|
||||
### Memperbarui ke Versi Rilis Baru:
|
||||
1. Ubah tag image pada berkas `.env`:
|
||||
```bash
|
||||
MERICA_IMAGE=registry.sicabe.com/merica:1.1.0
|
||||
```
|
||||
2. Jalankan pembaruan tanpa downtime lama:
|
||||
```bash
|
||||
docker compose pull merica
|
||||
docker compose up -d --no-deps merica
|
||||
```
|
||||
*(Docker akan melakukan in-place recreate dalam waktu $\sim 2-3$ detik)*.
|
||||
|
||||
### Menghentikan Layanan:
|
||||
```bash
|
||||
# Menghentikan kontainer
|
||||
docker compose down
|
||||
|
||||
# Menghentikan kontainer dan menghapus volume
|
||||
docker compose down -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Navigasi Dokumen Terkait
|
||||
|
||||
* Pahami Rancang Bangun: [🏛️ Arsitektur Platform](architecture.md)
|
||||
* Menyiapkan Sisi Airflow Existing: [📘 Panduan Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
|
||||
* Panduan Mendesain Pipeline di Canvas: [🎨 Panduan Pengguna Canvas](user_guide.md)
|
||||
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
|
||||
@@ -0,0 +1,71 @@
|
||||
# 📚 Pusat Dokumentasi & Panduan — MERICA
|
||||
|
||||
Selamat datang di pusat dokumentasi resmi **MERICA** (*Managed Engine for Robust Ingestion & Cloud Airflow*) untuk distribusi produksi mandiri (*Clean Production Appliance*).
|
||||
|
||||
Dokumentasi ini dirancang terisolasi (*self-contained*) dan menggunakan tautan relatif berbasis Git untuk memudahkan penelusuran baik langsung di repositori Git (GitLab/GitHub), peramban lokal, maupun editor teks.
|
||||
|
||||
---
|
||||
|
||||
## 🗺️ Alur Penelusuran Dokumen (Recommended Reading Flow)
|
||||
|
||||
Ikuti urutan membaca di bawah ini sesuai peran dan kebutuhan implementasi Anda:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
START(["Mulai di Sini: docs/index.md"]) --> Q{"Apa Kebutuhan Anda?"}
|
||||
|
||||
Q -->|"Memahami Rancang Bangun & Komponen"| D1["1. Arsitektur Platform\n(architecture.md)"]
|
||||
Q -->|"Melakukan Instalasi Appliance Mandiri"| D2["2. Panduan Deployment & Build\n(deployment_guide.md)"]
|
||||
Q -->|"Menghubungkan ke Cluster Airflow Existing"| D3["3. Panduan Integrasi Airflow\n(panduan_integrasi_existing_airflow.md)"]
|
||||
Q -->|"Merancang Pipeline Data di Canvas"| D4["4. Panduan Pengguna Canvas\n(user_guide.md)"]
|
||||
|
||||
D1 --> D2
|
||||
D2 --> D3
|
||||
D3 --> D4
|
||||
```
|
||||
|
||||
| Urutan | Dokumen | Target Pembaca | Fokus Utama |
|
||||
| :---: | :--- | :--- | :--- |
|
||||
| **1** | [**Arsitektur Platform**](./architecture.md) | Software Architect, Data Architect | Rancang bangun Single-Port Appliance (Port 14000), isolasi perimeter loopback, arsitektur modul stateless, dan integrasi GitOps Airflow 3. |
|
||||
| **2** | [**Panduan Deployment & Build**](./deployment_guide.md) | DevOps, System Administrator | Spesifikasi hardware ultra-ringan (~100MB RAM), instalasi sekali-klik via `setup.sh`, build image mandiri, dan upgrade runbook. |
|
||||
| **3** | [**Panduan Integrasi Airflow External**](./panduan_integrasi_existing_airflow.md) | Data Platform Engineer, DevOps | Cara menghubungkan MERICA ke Airflow existing via **Metode 1 (Tanpa Rebuild)** atau **Metode 2 (Build Ulang Image Resmi)**, serta fitur Anti-Blank Canvas. |
|
||||
| **4** | [**Panduan Pengguna (User Guide)**](./user_guide.md) | Data Engineer, Analytics Engineer | Panduan visual drag-and-drop di Canvas, katalog komponen lakehouse, GWS discovery, DB introspection & safe preview, dlt REST API, dan Shift-Left dbt testing. |
|
||||
|
||||
---
|
||||
|
||||
## ⚡ Matriks Port & Referensi Cepat Jaringan
|
||||
|
||||
| Layanan | Port Host | Protokol | Visibilitas | Keterangan |
|
||||
| :--- | :---: | :---: | :--- | :--- |
|
||||
| **MERICA Gateway (Nginx)** | `14000` | HTTP | Eksternal (Publik) | Pintu masuk tunggal: melayani Web Canvas UI (`/*`) dan reverse proxy API (`/api/*`). |
|
||||
| **MERICA Backend (FastAPI)** | `8000` | HTTP | Internal Loopback (`127.0.0.1`) | **Tidak diekspos ke host**. Menjalankan engine validasi, parser YAML, dan compiler dbt. |
|
||||
| **Apache Airflow 3 API Server** | `14080` | HTTP | Eksternal | Airflow Web UI & REST API eksekusi pipeline. |
|
||||
| **PostgreSQL 15 MetaDB** | `14432` | TCP/PG | Eksternal | Database metadata relasional Lakehouse / Airflow. |
|
||||
| **MinIO S3 Storage (Console)** | `14090` / `14091` | HTTP | Eksternal | Penyimpanan objek Bronze Parquet & Silver Iceberg. |
|
||||
| **OpenMetadata Governance** | `14585` | HTTP | Eksternal | Portal katalog metadata, data lineage, dan data quality. |
|
||||
|
||||
---
|
||||
|
||||
## 📁 Struktur Direktori Paket Rilis
|
||||
|
||||
```text
|
||||
release/merica/
|
||||
├── .env.example # Template konfigurasi variabel lingkungan
|
||||
├── Dockerfile # Resep build mandiri Nginx + FastAPI (supervisord)
|
||||
├── README.md # Ringkasan cepat & petunjuk mulai 2 menit
|
||||
├── docker-compose.yml # Compose Standalone Appliance (Port 14000)
|
||||
├── docker-compose.all-in-one.yml # Compose demo All-in-One (dengan Airflow tertanam)
|
||||
├── setup.sh # Skrip instalasi sekali-klik otomatis
|
||||
├── docs/ # Pusat dokumentasi terisolasi
|
||||
│ ├── index.md # Halaman indeks & panduan navigasi ini
|
||||
│ ├── architecture.md # Rancang bangun teknis platform
|
||||
│ ├── deployment_guide.md # Panduan instalasi, build, dan pemeliharaan
|
||||
│ ├── panduan_integrasi_existing_airflow.md # Integrasi kluster Airflow eksternal
|
||||
│ └── user_guide.md # Panduan visual perancangan pipeline di Canvas
|
||||
├── pipelines/ # Starter Pipelines (Anti-Blank Canvas)
|
||||
│ ├── configs/ # Kontrak deklaratif YAML Airflow
|
||||
│ ├── metadata/ # Posisi visual node & edge kanvas ReactFlow
|
||||
│ └── dbt/ # Proyek dbt Medallion (Silver & Gold models)
|
||||
├── backend/ # Kode sumber backend FastAPI
|
||||
└── frontend/ # Kode sumber antarmuka React Canvas UI
|
||||
```
|
||||
@@ -0,0 +1,200 @@
|
||||
# 📘 Panduan Integrasi MERICA Standalone dengan Existing Apache Airflow
|
||||
|
||||
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [🏛️ Arsitektur Platform](architecture.md) | [📦 Panduan Deployment](deployment_guide.md) | [🎨 Panduan Pengguna Canvas](user_guide.md)
|
||||
|
||||
Dokumen panduan ini dirancang khusus bagi **Data Engineer, Platform Engineer, dan DevOps** yang ingin menginstal **MERICA secara mandiri (*standalone appliance*)** dan menghubungkannya ke kluster **Apache Airflow yang sudah ada (*existing enterprise cluster*)**.
|
||||
|
||||
---
|
||||
|
||||
## 🏛️ 1. Gambaran Umum Arsitektur
|
||||
|
||||
MERICA (*Managed Engine for Robust Ingestion & Cloud Airflow*) berfungsi sebagai **Visual Low-Code DAG Builder** berbasis web. MERICA tidak mengeksekusi pipeline berat secara langsung; tugas eksekusi, pemantauan, dan retry task sepenuhnya didelegasikan ke kluster Apache Airflow eksternal Anda.
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph STANDALONE ["MERICA Standalone Host (Port 14000)"]
|
||||
UI["ReactFlow Canvas UI"]
|
||||
API["FastAPI Backend Gateway"]
|
||||
PIPES["Mounted Pipelines SSOT\n(./pipelines/)"]
|
||||
UI --- API
|
||||
API <--> PIPES
|
||||
end
|
||||
|
||||
subgraph AIRFLOW_HOST ["Existing Apache Airflow Cluster"]
|
||||
AF_WEBSERVER["Airflow Web UI / API\n(Port 14080 / Domain)"]
|
||||
AF_SCHEDULER["Airflow Scheduler & Workers"]
|
||||
AF_DAG_PROC["DAG Processor\n(AIP-66 Git DAG Bundles)"]
|
||||
AF_SCHEDULER --- AF_DAG_PROC
|
||||
end
|
||||
|
||||
STANDALONE -.->|"Deploy DAG (Git / YAML)"| AIRFLOW_HOST
|
||||
API -.->|"Direct Link Out"| AF_WEBSERVER
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 2. Dua Metode Penyiapan Sisi Existing Airflow
|
||||
|
||||
Untuk dapat menjalankan pipeline modern yang dirancang di MERICA (termasuk dbt Medallion, deduplikasi DuckDB, dan Shift-Left Quality Gates), worker dan DAG processor Airflow Anda membutuhkan beberapa pustaka tambahan (seperti `astronomer-cosmos` dan `dbt-postgres`).
|
||||
|
||||
Pilih salah satu dari **2 Metode** berikut sesuai kebijakan infrastruktur Anda:
|
||||
|
||||
---
|
||||
|
||||
### METODE 1: Modifikasi Langsung Tanpa Build Ulang (*Zero-Build / Runtime Injection*)
|
||||
|
||||
> [!TIP]
|
||||
> **Gunakan metode ini jika**: Anda ingin uji coba cepat, tidak memiliki akses untuk mem-build image di private registry, atau dilarang me-rebuild Dockerfile Airflow existing.
|
||||
|
||||
#### Opsi 1A: Injeksi Runtime Otomatis via `_PIP_ADDITIONAL_REQUIREMENTS` (Rekomendasi Persisten)
|
||||
Image resmi Apache Airflow memiliki hook entrypoint otomatis. Pustaka akan terpasang setiap kali kontainer dinyalakan tanpa perlu build Dockerfile:
|
||||
1. Buka berkas `.env` atau `docker-compose.yml` di server Airflow existing Anda.
|
||||
2. Tambahkan variabel lingkungan ini pada service Airflow (`airflow-scheduler`, `airflow-dag-processor`, dan `airflow-worker`):
|
||||
```yaml
|
||||
environment:
|
||||
_PIP_ADDITIONAL_REQUIREMENTS: "astronomer-cosmos==1.15.1 dbt-postgres==1.11.0 apache-airflow-providers-git==1.0.0 duckdb==1.1.3 pyiceberg[s3fs,pyarrow]==0.8.0"
|
||||
```
|
||||
3. Restart service Airflow:
|
||||
```bash
|
||||
docker compose restart airflow-scheduler airflow-dag-processor
|
||||
```
|
||||
|
||||
#### Opsi 1B: `docker exec` Langsung ke Kontainer (Aktif dalam 15 Detik Tanpa Restart)
|
||||
Jika kontainer Airflow sedang running dalam jam kerja dan Anda dilarang me-restart kontainer:
|
||||
```bash
|
||||
# 1. Install di Scheduler (user airflow)
|
||||
docker exec -u airflow <container_scheduler> pip install --no-cache-dir \
|
||||
astronomer-cosmos==1.15.1 dbt-postgres==1.11.0 apache-airflow-providers-git==1.0.0
|
||||
|
||||
# 2. Install di DAG Processor
|
||||
docker exec -u airflow <container_dag_processor> pip install --no-cache-dir \
|
||||
astronomer-cosmos==1.15.1 dbt-postgres==1.11.0 apache-airflow-providers-git==1.0.0
|
||||
```
|
||||
|
||||
#### Verifikasi Keberhasilan Instalasi:
|
||||
```bash
|
||||
docker exec <container_scheduler> python -c "import cosmos; print('✅ Cosmos Version:', cosmos.__version__)"
|
||||
```
|
||||
|
||||
#### Bagaimana Menghubungkan DAGs & Custom Operators Tanpa Build Ulang?
|
||||
Seluruh operator custom (`helpers/duckdb_operator.py`, `helpers/dbt_trino_operator.py`, `helpers/ge_lakehouse_operator.py`, dll.) serta `dag_factory.py` **tidak perlu dibake ke image Airflow**.
|
||||
Cukup sambungkan folder `dags/` ke Airflow Anda:
|
||||
* **Via AIP-66 Git DAG Bundles (Airflow 3)**: Airflow otomatis meng-clone dari repositori `merica-pipelines.git`.
|
||||
* **Via Shared Volume Mount**: Mount direktori `dags/` ke `/opt/airflow/dags` di kontainer Airflow.
|
||||
|
||||
---
|
||||
|
||||
### METODE 2: Build Ulang Image Resmi (*Official Baked Image*)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **Gunakan metode ini jika**: Server produksi organisasi Anda berada di jaringan terisolasi (*air-gapped / tanpa akses internet luar*) atau standar DevOps mewajibkan seluruh dependensi paten di dalam image registry resmi.
|
||||
|
||||
#### 1. Buat Dockerfile Airflow Resmi
|
||||
Buat berkas `Dockerfile.airflow` untuk registry organisasi Anda:
|
||||
|
||||
```dockerfile
|
||||
FROM registry.sicabe.com/airflow:3.3.2-om203-ol
|
||||
|
||||
LABEL maintainer="BPKP Data Lakehouse Team <dlh@bpkp.go.id>"
|
||||
LABEL description="Official Airflow 3 Engine Image with Baked MERICA Operators & Cosmos"
|
||||
LABEL version="3.3.2-merica-v1.1"
|
||||
|
||||
USER airflow
|
||||
|
||||
# Instalasi dependensi engine MERICA langsung ke layer image
|
||||
RUN pip install --no-cache-dir \
|
||||
astronomer-cosmos==1.15.1 \
|
||||
dbt-postgres==1.11.0 \
|
||||
apache-airflow-providers-git==1.0.0 \
|
||||
duckdb==1.1.3 \
|
||||
pyiceberg[s3fs,pyarrow]==0.8.0 \
|
||||
pyarrow==17.0.0 \
|
||||
s3fs==2024.9.0 \
|
||||
fsspec==2024.9.0 \
|
||||
dlt[duckdb,filesystem]==1.6.1
|
||||
|
||||
# Validasi kompilasi paket di dalam image
|
||||
RUN python -c "import cosmos; import duckdb; import pyiceberg; print('✅ All MERICA Dependencies Baked!')"
|
||||
```
|
||||
|
||||
#### 2. Build dan Push ke Private Registry
|
||||
```bash
|
||||
docker build -t registry.sicabe.com/airflow:3.3.2-merica-v1.1 -f Dockerfile.airflow .
|
||||
docker push registry.sicabe.com/airflow:3.3.2-merica-v1.1
|
||||
```
|
||||
|
||||
#### 3. Terapkan Image Baru di Kluster Airflow
|
||||
Ubah tag image pada deployment Airflow:
|
||||
```yaml
|
||||
image: registry.sicabe.com/airflow:3.3.2-merica-v1.1
|
||||
```
|
||||
Lalu deploy ulang kontainer (`docker compose up -d` atau `kubectl rollout restart deployment airflow`).
|
||||
|
||||
---
|
||||
|
||||
## 🎨 3. Fitur "Anti-Blank Canvas" (Jaminan DAGs List Langsung Muncul)
|
||||
|
||||
### Kenapa Fitur Ini Ada?
|
||||
MERICA adalah backend *stateless file-based*. Jika kontainer berdiri sendiri tanpa mount volume, sistem akan membaca folder kosong sehingga daftar pipeline di halaman web akan kosong (*blank*), yang sering kali menimbulkan kebingungan bagi pengguna baru.
|
||||
|
||||
### Cara Kerja Starter Seed Pipelines:
|
||||
Di dalam paket rilis `release/merica/`, disediakan direktori `./pipelines/`:
|
||||
* `pipelines/configs/`: Menyimpan spesifikasi YAML Airflow (`e2e_modernized_ingestion_flow.yaml`, `e2e_medallion_permits_flow.yaml`, `e2e_orders_master_medallion_flow.yaml`).
|
||||
* `pipelines/metadata/`: Menyimpan data visual layout node & edge ReactFlow (`*.json`).
|
||||
* `pipelines/dbt/`: Menyimpan model SQL dbt Medallion.
|
||||
|
||||
Saat kontainer `merica` dijalankan via `docker compose up -d`, direktori `./pipelines` ini otomatis di-mount ke `/app/merica-pipelines`. Begitu browser dibuka di `http://localhost:14000`, **3 pipeline data lakehouse modern langsung muncul secara visual** dan siap dieksplorasi atau diduplikasi!
|
||||
|
||||
### Cara Mengganti Starter Pipelines dengan Git Organisasi Anda (Opsi GitOps SSOT):
|
||||
Jika tim Anda menggunakan pendekatan GitOps di mana MERICA dan Airflow 3 tersinkronisasi langsung ke repositori Git yang sama (`merica-pipelines.git`):
|
||||
1. Clone repositori Git di samping folder `release/merica`:
|
||||
```bash
|
||||
git clone https://repo.sicabe.com/merica-dlh/merica-pipelines.git ../merica-pipelines
|
||||
```
|
||||
2. Pada berkas `.env`, aktifkan variabel yang sudah disediakan di template (cukup buka tanda komentar):
|
||||
```bash
|
||||
# Ganti dari ./pipelines ke path clone repositori Git Anda:
|
||||
PIPELINES_DIR=../merica-pipelines
|
||||
```
|
||||
3. Parameter referensi Git DAG Bundle di sisi Airflow 3 (`AIP-66`):
|
||||
```bash
|
||||
GIT_PIPELINE_BUNDLE_NAME=merica-pipeline
|
||||
GIT_PIPELINE_REPO_URL=https://repo.sicabe.com/merica-dlh/merica-pipelines.git
|
||||
GIT_PIPELINE_REPO_BRANCH=main
|
||||
GIT_PIPELINE_REPO_SUBDIR=dags
|
||||
AIRFLOW_DAG_BUNDLE_REFRESH_INTERVAL=30
|
||||
```
|
||||
4. Restart MERICA: `docker compose up -d`. Seluruh pipeline tim Anda akan langsung tersinkronkan secara *hot-reload*!
|
||||
|
||||
---
|
||||
|
||||
## ⚡ 4. Panduan Operasional Cepat (Runbook 3 Menit)
|
||||
|
||||
### Langkah 1: Siapkan Konfigurasi Lingkungan
|
||||
```bash
|
||||
cd release/merica
|
||||
cp .env.example .env
|
||||
```
|
||||
Sesuaikan parameter `AIRFLOW_WEB_URL` dan `POSTGRES_HOST` mengarah ke alamat server Airflow & Database Anda.
|
||||
|
||||
### Langkah 2: Jalankan Script Setup Sekali Klik
|
||||
```bash
|
||||
bash ./setup.sh
|
||||
```
|
||||
|
||||
### Langkah 3: Buka Antarmuka MERICA
|
||||
Akses antarmuka web di browser:
|
||||
* **URL**: [`http://localhost:14000`](http://localhost:14000)
|
||||
* **Username**: `admin`
|
||||
* **Password**: `admin`
|
||||
|
||||
Daftar DAGs Anda akan langsung tampil secara visual dan siap digunakan!
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Navigasi Dokumen Terkait
|
||||
|
||||
* Pahami Rancang Bangun: [🏛️ Arsitektur Platform](architecture.md)
|
||||
* Cara Install Appliance: [📦 Panduan Deployment & Build](deployment_guide.md)
|
||||
* Panduan Mendesain Pipeline di Canvas: [🎨 Panduan Pengguna Canvas](user_guide.md)
|
||||
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
|
||||
@@ -0,0 +1,187 @@
|
||||
# 🎨 Panduan Penggunaan Pengguna (User Guide) — MERICA
|
||||
|
||||
> **Navigasi Cepat**: [🏠 Pusat Dokumentasi](index.md) | [🏛️ Arsitektur Platform](architecture.md) | [📦 Panduan Deployment](deployment_guide.md) | [📘 Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
|
||||
|
||||
Panduan komprehensif bagi **Data Engineer, Analytics Engineer, dan Data Architect** dalam menggunakan antarmuka grafis **MERICA Canvas** untuk merancang, mengonfigurasi, menguji (*Shift-Left Testing*), dan menyusun task DAG Apache Airflow 3 secara deklaratif.
|
||||
|
||||
> [!NOTE]
|
||||
> **Fokus Peran MERICA**: MERICA dirancang murni sebagai **Visual Low-Code DAG Builder** untuk mempercepat rancang bangun pipeline data lakehouse modern tanpa menulis boilerplate Python manual. MERICA bukan dashboard monitoring runtime; pemantauan eksekusi, log task, retry, dan alerting tetap didelegasikan sepenuhnya ke antarmuka resmi **Apache Airflow 3**.
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 1. Mengakses Antarmuka Web MERICA Canvas
|
||||
|
||||
Buka peramban (*web browser*) modern (Google Chrome, Mozilla Firefox, Microsoft Edge) dan akses URL:
|
||||
```text
|
||||
http://<ip-server-merica>:14000
|
||||
```
|
||||
* **Kredensial Default**:
|
||||
* **Username**: `admin`
|
||||
* **Password**: `admin`
|
||||
|
||||
### Tampilan Awal: Pipelines Explorer (Anti-Blank Canvas)
|
||||
Setelah masuk, Anda akan langsung disajikan halaman **Pipelines Explorer**. MERICA dilengkapi fitur *Anti-Blank Canvas* dengan 3 pipeline produksi siap pakai:
|
||||
1. `e2e_modernized_ingestion_flow`: Pipeline ingestion modern yang menggabungkan Database CDC Sling, Google Spreadsheet Auto-Cleansing, dan dlt REST API.
|
||||
2. `e2e_medallion_permits_flow`: Pipeline perizinan Medallion (Bronze Parquet $\to$ Silver Iceberg $\to$ Gold dbt Mart).
|
||||
3. `e2e_orders_master_medallion_flow`: Pipeline master order e-commerce dengan deduplikasi DuckDB dan quality gate Great Expectations.
|
||||
|
||||
Anda dapat langsung mengklik salah satu pipeline untuk membukanya di Canvas, atau mengklik tombol **`+ New Pipeline`** di kanan atas untuk membuat pipeline baru dari awal.
|
||||
|
||||
---
|
||||
|
||||
## 🧩 2. Katalog Komponen & Operator Lakehouse
|
||||
|
||||
Panel kiri kanvas (*Component Catalog*) menyediakan pustaka node terstandarisasi untuk arsitektur Medallion Lakehouse:
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph SOURCES ["1. Ingestion Sources (Bronze)"]
|
||||
N_DB["Database CDC (Sling)"]
|
||||
N_GWS["Google Workspace (Drive/Sheet)"]
|
||||
N_REST["REST API (dlt Ingestor)"]
|
||||
end
|
||||
|
||||
subgraph SINK ["2. Lakehouse Storage (Silver)"]
|
||||
N_BRONZE["Bronze S3 Parquet"]
|
||||
N_SILVER["Silver Iceberg + DuckDB Dedup"]
|
||||
end
|
||||
|
||||
subgraph TRANS ["3. Transformation (Gold)"]
|
||||
N_DBT["dbt Medallion Model (Cosmos)"]
|
||||
N_GE["Great Expectations Quality Gate"]
|
||||
end
|
||||
|
||||
SOURCES --> SINK --> TRANS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### A. Database Ingestor (Sling CDC + Introspection & Safe Preview)
|
||||
Digunakan untuk mengekstraksi data transaksional dari PostgreSQL, MySQL, SQL Server, atau Oracle:
|
||||
* **Log-Based CDC**: Ekstraksi berbasis log transaksi untuk meminimalkan beban CPU pada database produksi.
|
||||
* **Database Introspection Otomatis**: Saat memilih koneksi dan tabel target, MERICA secara otomatis menginspeksi metadata skema tabel dari PostgreSQL.
|
||||
* **Auto-Detect Primary Key & Watermark**: Kolom kunci utama (*Primary Key*) dan kolom jejak waktu (*timestamp watermark*) terdeteksi otomatis untuk kebutuhan inkremental.
|
||||
* **Safe 10-Row Data Preview**: Tombol **`Preview Data`** menampilkan 10 baris data sampel secara aman (dengan statement timeout terkendali) langsung di panel konfigurasi tanpa mengunci tabel produksi.
|
||||
|
||||
---
|
||||
|
||||
### B. Google Workspace Ingestor (Drive Folder Explorer & Header Auto-Cleansing)
|
||||
Digunakan untuk mengonsumsi spreadsheet Google Sheets dari Google Drive organisasi:
|
||||
* **Drive Folder Explorer**: Antarmuka visual untuk menelusuri folder dan memilih berkas Spreadsheet secara interaktif (`/api/v1/discovery/gws/folders`).
|
||||
* **Dynamic Tab Resolution**: Mendukung pemilihan tab berbasis indeks (`sheet_index: 0`) atau pencocokan nama regex dinamis.
|
||||
* **Header Row Suggestion**: Menganalisis baris-baris awal spreadsheet dan merekomendasikan baris mana yang merupakan baris nama kolom aktual (*Header Row*).
|
||||
* **Auto-Cleansing Engine**:
|
||||
* Otomatis mengubah nama kolom menjadi format `snake_case` dan membuang spasi tersembunyi.
|
||||
* Mengeliminasi sufiks unit teks pada data numerik (misal: `"1.500.000 (Rp)"` $\to$ `1500000`).
|
||||
* Menerapkan pengisian sel yang digabungkan (*Forward-Fill merged cells* / `ffill`).
|
||||
|
||||
---
|
||||
|
||||
### C. REST API Ingestor (dlt Framework)
|
||||
Digunakan untuk mengambil data dari sensor IoT (seperti sensor udara SPKU) atau REST API pihak ketiga:
|
||||
* **Declarative Pagination**: Mendukung strategi paginasi standar: *Page Number*, *Offset/Limit*, dan *Cursor/Next-URL Link*.
|
||||
* **Automated Flattening & Unnesting**: Respon JSON bertingkat (*nested payloads*) otomatis diurai (*unnested*) menjadi skema tabel tabular relasional di Bronze S3 Parquet.
|
||||
* **Sliding Lookback Window**: Mendukung jendela pengambilan mundur (misal `now() - 3 hours` s/d `now()`) untuk mencegah *data gap* akibat keterlambatan transmisi sensor.
|
||||
|
||||
---
|
||||
|
||||
### D. Silver Lakehouse Sink (Apache Iceberg + DuckDB Deduplication)
|
||||
* **ACID Iceberg Table**: Menulis data ke partisi Silver menggunakan format Apache Iceberg dengan metadata snapshot time-travel.
|
||||
* **Idempotent Deduplication via DuckDB**: Mencegah duplikasi data pada proses *incremental reload* menggunakan formula SQL terstandarisasi:
|
||||
```sql
|
||||
ROW_NUMBER() OVER (PARTITION BY primary_key ORDER BY updated_at DESC) = 1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### E. dbt Medallion Transformator (Astronomer Cosmos + Shift-Left Testing)
|
||||
Digunakan untuk menyusun transformasi bisnis dari Silver ke Gold Mart:
|
||||
* **Otomasi Model SQL**: Menulis query transformasi bisnis (misal: aggregasi bulanan, join master data) langsung di editor SQL kanvas.
|
||||
* **Smart DDL Data Type Inference**: Engine MERICA secara otomatis menginferensi tipe data kolom target (`INTEGER`, `DECIMAL(18,2)`, `TIMESTAMP`, `VARCHAR`) berdasarkan ekspresi SQL yang ditulis.
|
||||
* **Shift-Left Quality Testing**: Anda dapat menentukan aturan validasi langsung di kanvas:
|
||||
* `contract: enforced`: Menjamin struktur kolom tabel tidak boleh melenceng dari skema yang disepakati.
|
||||
* Constraint kolom bawaan: `unique`, `not_null`, dan `accepted_values: [...]`.
|
||||
* **Astronomer Cosmos Granular TaskGroup**: Di Airflow 3, model dbt tidak dieksekusi sebagai satu task raksasa buram (*black-box*), melainkan dipecah menjadi task granular:
|
||||
* `model_name.run`: Menjalankan kompilasi dan pembuatan tabel SQL.
|
||||
* `model_name.test`: Menjalankan pengujian kualitas data segera setelah model selesai (`TestBehavior.AFTER_EACH`).
|
||||
|
||||
---
|
||||
|
||||
### F. Great Expectations Quality Gate
|
||||
Node validasi batasan fisik data (*Data Sanity Rules*):
|
||||
* Menguji batas kewajaran data (misal: konsentrasi PM2.5 sensor harus berada pada rentang $0 \le x \le 500$; jika di luar rentang, ditandai atau dikonversi menjadi `NULL`).
|
||||
* Menguji persentase ambang batas nilai kosong (*Null Percentage Threshold*).
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 3. Alur Kerja Perancangan Pipeline di Canvas (Langkah-demi-Langkah)
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
S1["1. Tarik Node dari Katalog ke Kanvas\n(Drag & Drop)"] --> S2["2. Hubungkan Output Port ke Input Port\n(Edge Linking)"]
|
||||
S2 --> S3["3. Konfigurasi Parameter di Panel Kanan\n(Drawer Configuration)"]
|
||||
S3 --> S4["4. Validasi Pra-Kompilasi\n(Shift-Left Pre-Flight Check: #val)"]
|
||||
S4 --> S5["5. Deploy Pipeline ke Airflow 3\n(GitOps Hot-Reload dalam 30 Detik)"]
|
||||
```
|
||||
|
||||
### Langkah 1: Drag & Drop Node
|
||||
Pilih komponen sumber dari panel katalog kiri (misal: **Database CDC**), lalu tarik (*drag*) ke kanvas tengah. Tambahkan node pemrosesan (misal: **Silver Iceberg Sink**) dan node transformasi (**dbt Medallion Model**).
|
||||
|
||||
### Langkah 2: Menghubungkan Port (Edge Linking)
|
||||
Klik titik lingkaran (*handle port*) output pada node sumber, lalu tarik garis konektor ke titik input pada node tujuan. Hubungan antar-node ini akan diterjemahkan menjadi dependensi upstream/downstream (`>>`) pada DAG Airflow.
|
||||
|
||||
### Langkah 3: Konfigurasi Parameter (Drawer Panel)
|
||||
Klik pada node di kanvas untuk membuka laci konfigurasi di sebelah kanan:
|
||||
* **Pada Database CDC**: Pilih koneksi database, klik nama tabel, amati deteksi otomatis Primary Key, dan klik **Preview Data** untuk memverifikasi 10 baris sampel.
|
||||
* **Pada Google Workspace**: Jelajahi folder Google Drive, pilih sheet, dan periksa saran baris header.
|
||||
* **Pada dbt Model**: Tulis query SQL, tambahkan aturan contract quality (`unique`, `not_null`).
|
||||
|
||||
### Langkah 4: Validasi Pra-Kompilasi (*Shift-Left Pre-Flight Check*)
|
||||
Klik tombol **`Validate Pipeline`** di toolbar atas.
|
||||
Backend FastAPI akan memverifikasi:
|
||||
* Ketiadaan siklus (*cycle detection* / validasi DAG acyclic).
|
||||
* Kesesuaian tipe data dan parameter wajib pada setiap node.
|
||||
* Validitas model dbt dan kesiapan kontrak schema YAML.
|
||||
Jika terdapat kesalahan konfigurasi, pesan perbaikan spesifik akan langsung muncul di kanvas sebelum pipeline sempat di-deploy ke server.
|
||||
|
||||
### Langkah 5: Simpan & Deploy Pipeline (*Zero Downtime GitOps*)
|
||||
Klik tombol **`Deploy Pipeline`**:
|
||||
1. MERICA mengompilasi desain kanvas ke dalam berkas kontrak deklaratif YAML (`configs/<pipeline_id>.yaml`) dan model SQL dbt (`dbt/models/...`).
|
||||
2. Berkas disimpan langsung ke repositori pipeline SSOT (`merica-pipelines.git` atau direktori ter-mount `./pipelines/`).
|
||||
3. Apache Airflow 3 AIP-66 Git DAG Processor mendeteksi pembaruan dan secara otomatis memuat ulang DAG ke Airflow MetaDB dalam waktu **$\le 30$ detik tanpa perlu restart Airflow**.
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 4. Pemantauan & Eksekusi di Apache Airflow 3
|
||||
|
||||
Setelah pipeline di-deploy dari MERICA Canvas:
|
||||
1. Akses dashboard resmi Apache Airflow 3 pada URL:
|
||||
```text
|
||||
http://<ip-server-airflow>:14080
|
||||
```
|
||||
2. Temukan DAG yang bersangkutan pada daftar DAG (nama DAG sesuai dengan ID yang Anda tentukan di kanvas).
|
||||
3. **Tampilan Granular Astronomer Cosmos**:
|
||||
* Buka tampilan **Graph View** atau **Grid View**.
|
||||
* Anda dapat melihat TaskGroup dbt terbagi rapi menjadi task `.run` dan task `.test`.
|
||||
* Jika ada uji kontrak kolom yang gagal, task `.test` akan berwarna merah (*Failed*), menghentikan pipeline sebelum data rusak masuk ke Gold layer (*Data Quality Circuit Breaker*).
|
||||
4. Klik pada task untuk membaca log eksekusi, melihat waktu eksekusi task, atau memicu eksekusi ulang (*Clear / Retry*).
|
||||
|
||||
---
|
||||
|
||||
## 🏛️ 5. Integrasi Tata Kelola Data OpenMetadata 2.0
|
||||
|
||||
Setiap kali Anda menekan tombol **Deploy Pipeline** di MERICA Canvas, sistem secara otomatis menyinkronkan aset ke portal **OpenMetadata 2.0**:
|
||||
* **Pipeline Entity**: Pipeline terdaftar di bawah `dlh_airflow_service` lengkap dengan deskripsi, jadwal cron, dan daftar task.
|
||||
* **Schema & Real Column Types**: Struktur kolom dari Bronze, Silver, dan Gold terdaftar di katalog data dengan tipe data presisi.
|
||||
* **Sample Data 5 Baris**: Sampel baris aktual dari PostgreSQL tersimpan pada tab Sample Data OpenMetadata.
|
||||
* **SQL Query Lineage**: Query transformasi dbt disematkan pada tab Queries tabel yang bersangkutan.
|
||||
* **Data Quality Assertions**: Seluruh rule Great Expectations terhubung langsung ke tab **Data Quality** OpenMetadata, menampilkan riwayat persentase kelulusan data dari waktu ke waktu.
|
||||
|
||||
---
|
||||
|
||||
## 🧭 Navigasi Dokumen Terkait
|
||||
|
||||
* Pahami Rancang Bangun: [🏛️ Arsitektur Platform](architecture.md)
|
||||
* Cara Install Appliance: [📦 Panduan Deployment & Build](deployment_guide.md)
|
||||
* Menyiapkan Sisi Airflow: [📘 Panduan Integrasi Airflow External](panduan_integrasi_existing_airflow.md)
|
||||
* Kembali ke Indeks: [🏠 Pusat Dokumentasi](index.md)
|
||||
Reference in New Issue
Block a user