Konfigurasi yang ditulis langsung di dalam berkas DAG harus diubah setiap kali nilainya berubah, sedangkan kredensial yang tertulis di berkas tersebut ikut terbaca oleh siapa pun yang membacanya. Topik ini membahas Variable, yaitu penyimpanan konfigurasi kunci-nilai pada Airflow, serta Connection, yaitu penyimpanan kredensial untuk layanan eksternal. Keduanya dikelola melalui CLI dan dibaca dari dalam task. Setelah membacanya, nilai konfigurasi dan kredensial dapat dikelola terpisah dari kode DAG sehingga perubahan nilainya tidak memerlukan penyuntingan berkas.
Variable untuk konfigurasi#
Variable menyimpan satu pasangan kunci dan nilai pada basis data metadata Airflow. Nilainya berupa string, dan nilai bertipe JSON tetap disimpan sebagai string yang dapat diurai saat dibaca. Variable cocok untuk konfigurasi yang berubah-ubah, misalnya batas jumlah baris atau nama folder arsip, karena perubahannya tidak memerlukan penyuntingan kode. Pengelolaan paling ringkas dilakukan melalui CLI pada lingkungan latihan berikut.
# lingkungan latihan terpisah agar DAG bawaan tidak ikut dipindai
export AIRFLOW_HOME=/tmp/ra-variables-dan-connections
export AIRFLOW__CORE__LOAD_EXAMPLES=False# siapkan skema basis data metadata
# log migrasi berisi stempel waktu, sehingga tidak ditampilkan
airflow db migrate > /dev/null 2>&1# simpan pasangan kunci dan nilai konfigurasi
# keluaran konfirmasinya bergantung pada keadaan simpanan, sehingga tidak ditampilkan
airflow variables set batas_atas 100 > /dev/null 2>&1# baca kembali nilai Variable yang tersimpan
airflow variables get batas_atas100Perintah airflow variables set menyimpan pasangan tersebut, dan airflow variables get membacanya kembali persis seperti yang disimpan. Daftar kunci yang sudah tersimpan ditampilkan oleh airflow variables list, sedangkan kolom nilai tidak disertakan pada keluaran bawaannya, sehingga pembacaan nilai tetap dilakukan melalui variables get.
# tampilkan daftar Variable yang tersimpan
airflow variables listkey
==========
batas_atasNilai bertipe JSON dapat disimpan dalam satu Variable, misalnya {"batas": 100, "folder": "arsip"}, dan diuraikan menjadi objek Python saat dibaca dengan parameter deserialize_json=True. Pembacaan dari kode DAG dilakukan melalui Variable.get yang diimpor dari airflow.sdk. Parameter default menyediakan nilai cadangan apabila kunci tidak ditemukan, sehingga task tidak berhenti hanya karena satu konfigurasi belum diisi. Template juga dapat merujuk Variable secara langsung melalui {{ var.value.batas_atas }} untuk nilai mentah atau {{ var.json.konfigurasi }} untuk nilai JSON yang sudah diurai.
Connection untuk kredensial#
Connection menyimpan kredensial satu layanan eksternal beserta parameternya, yaitu host, port, login, password, schema, dan extra berupa JSON untuk parameter tambahan. Satu Connection dikenali melalui pengenal conn_id, sedangkan conn_type menentukan kelas yang menangani layanannya. Berbeda dengan Variable yang menyimpan nilai bebas, Connection menyimpan kumpulan field kredensial yang berstruktur. Contoh berikut mendaftarkan Connection menuju postgres lokal. Opsi --conn-login dan --conn-password digunakan apabila layanannya membutuhkan kredensial.
# daftarkan Connection menuju postgres lokal
# koneksi lama dihapus agar perintah dapat dijalankan ulang
airflow connections delete pg_local > /dev/null 2>&1 || true
airflow connections add pg_local --conn-type postgres --conn-host localhost --conn-port 5432 > /dev/null 2>&1# tampilkan rincian Connection yang baru dibuat
airflow connections get pg_localid | conn_id | conn_type | description | host | schema | login | password | port | is_encrypted | is_extra_encrypted | extra_dejson | get_uri
===+==========+===========+=============+===========+========+=======+==========+======+==============+====================+==============+=========================
1 | pg_local | generic | None | localhost | None | None | None | 5432 | False | False | {} | generic://localhost:5432Tabel tersebut memperlihatkan seluruh field yang tersimpan, dan kolom get_uri merangkumnya dalam bentuk URI yang lazim digunakan aplikasi lain. Pada lingkungan latihan ini paket provider postgres belum terpasang, sehingga CLI memperingatkan bahwa tipe postgres belum terdaftar dan menyimpan generic sebagai gantinya. Apabila paket provider untuk tipe yang diminta sudah terpasang, nilai conn_type dan get_uri mengikuti tipe tersebut. Penggunaan Connection dari dalam task biasanya didelegasikan ke hook, yaitu kelas pembungkus yang menyederhanakan komunikasi dengan layanan eksternal, sehingga kode DAG tidak menyentuh kredensialnya secara langsung.
Nilai Variable dan Connection juga dapat disimpan di luar basis data metadata melalui secrets backend, yaitu penyimpanan rahasia terintegrasi seperti HashiCorp Vault atau layanan rahasia milik penyedia cloud. Airflow memeriksa secrets backend yang dikonfigurasi lebih dahulu, kemudian membaca dari basis data metadata apabila kunci tidak ditemukan. Dengan susunan itu, kredensial produksi tidak perlu tertulis pada basis data metadata.
Membaca Variable dari dalam task#
Berkas dag_variables.py berikut memanggil Variable.get di dalam fungsi task, sehingga pembacaan nilai terjadi saat task berjalan, bukan saat berkas DAG diparse.
from airflow.sdk import Variable, dag, task
@dag(dag_id="dag_variables", schedule=None)
def dag_variables():
@task
def baca_batas() -> None:
batas = Variable.get("batas_atas")
print(f"batas atas terbaca dari Variable: {batas}")
baca_batas()
dag_variables()# uji bahwa berkas DAG dapat diparse tanpa keluaran apa pun
python3 dag_variables.py# salin berkas DAG ke folder yang dipindai Airflow
mkdir -p "$AIRFLOW_HOME/dags"
cp dag_variables.py "$AIRFLOW_HOME/dags/"# jalankan seluruh task DAG sekali secara lokal
# log panjang dan bertanda waktu, sehingga diarahkan ke berkas
airflow dags test dag_variables 2026-11-04 > "$AIRFLOW_HOME/dags-test.log" 2>&1Keluaran perintahnya panjang dan bertanda waktu, sehingga diarahkan ke berkas. Pada akhir log, task baca_batas berstatus success dan lognya memuat baris batas atas terbaca dari Variable: 100, yaitu nilai yang sama dengan keluaran airflow variables get sebelumnya. Baris buktinya diambil dari berkas log.
# ambil baris bukti pembacaan Variable dari berkas log
export AIRFLOW_HOME=/tmp/ra-variables-dan-connections
grep -o "batas atas terbaca dari Variable: 100" "$AIRFLOW_HOME/dags-test.log"batas atas terbaca dari Variable: 100Apabila nilai batas_atas diubah melalui airflow variables set, run berikutnya membaca nilai baru tanpa penyuntingan berkas DAG.
Kesalahan umum#
- Menyetel Variable pada
AIRFLOW_HOMEyang berbeda dari lingkungan tempat DAG dijalankan. Nilai yang disimpan mengikuti basis data metadata milikAIRFLOW_HOMEsaat CLI dijalankan, sehingga DAG pada lingkungan lain menampilkan pesanVariable batas_atas does not exist. Perbaikannya dengan menyetelAIRFLOW_HOMEyang sama pada sesi CLI dan sesi eksekusi DAG. - Menuliskan password langsung pada berkas DAG. Kredensial yang menempel di kode ikut tersalin ke repository dan muncul pada pesan error ketika terjadi kegagalan. Perbaikannya dengan menyimpan kredensial pada Connection dan menggunakan secrets backend untuk lingkungan produksi.
Ringkasan#
- Variable menyimpan pasangan kunci dan nilai konfigurasi pada basis data metadata, dan dikelola melalui
airflow variables setsertaairflow variables get. - Connection menyimpan kredensial satu layanan eksternal di bawah pengenal
conn_id, dan rinciannya dapat diperiksa melaluiairflow connections get. Variable.getdipanggil dari dalam fungsi task agar pembacaan terjadi saat task berjalan, bukan saat berkas DAG diparse.- Template dapat membaca Variable melalui
var.valuedanvar.json, sedangkan secrets backend memindahkan penyimpanan kredensial ke layanan rahasia di luar basis data metadata.
Referensi#
- Variables — Apache Airflow — Konsep Variable beserta cara mengaksesnya dari kode DAG dan template.
- Managing Connections — Apache Airflow — Struktur Connection dan cara mengelolanya melalui UI, CLI, dan lingkungan.
- Secrets Backends — Apache Airflow — Penyimpanan Variable dan Connection pada layanan rahasia eksternal.
- CLI and Environment Variables Reference — Apache Airflow
— Daftar perintah CLI Airflow termasuk kelompok
variablesdanconnections.