Environment Variable
Environment Variable Kavramı
Ortam değişkenleri, hassas bilgileri (şifreler, API anahtarları, sertifikalar) veya yapılandırma değerlerini güvenli bir şekilde saklamak için kullanılır. Apinizer'da ortam değişkenleri proje seviyesinde tanımlanır ve iki tipte olabilir:
- Global (Tüm Ortamlar): Tüm ortamlarda aynı değeri kullanır
- Environment-Specific (Ortam Özelinde): Her ortam için farklı değerler tanımlanabilir
Hassas bilgiler şifrelenmiş olarak saklanabilir
Ortam veya proje seviyesinde tanımlanabilir
Şifrelenmiş değişkenler güvenli bir şekilde saklanır
Birden fazla API Proxy veya Task Flow'da kullanılabilir
Environment Variable Çözümleme Akışı
Aşağıdaki diyagram, environment variable'ların runtime'da nasıl çözümlendiğini ve environment'a göre değerlerin nasıl alındığını gösterir:
sequenceDiagram
participant Client as 👤 İstemci
participant Gateway as 🚪 API Gateway
participant Proxy as 🔀 API Proxy
participant Config as ⚙️ Yapılandırma
participant VarResolver as 🔍 Variable Resolver
participant EnvStore as 📦 Environment Store
participant ProjectStore as 📁 Project Store
participant Decrypt as 🔐 Decryption
participant Backend as 🖥️ Backend API
Client->>Gateway: HTTP İsteği
Gateway->>Proxy: İsteği API Proxy'ye Yönlendir<br/>(Environment: Production)
Note over Proxy: Yapılandırma Okunuyor
Proxy->>Config: Yapılandırmada Variable<br/>Kullanımı Tespit Edilir<br/>${BACKEND_URL}
Config->>VarResolver: Variable Çözümleme<br/>İsteği
Note over VarResolver: Environment Variable<br/>Çözümleme Başladı<br/>Variable: BACKEND_URL<br/>Environment: Production
VarResolver->>EnvStore: 1️⃣ Environment-Level<br/>Encrypted Kontrolü
alt Environment-Level Encrypted Bulundu
EnvStore->>Decrypt: Şifrelenmiş Değer<br/>Çözülür
Decrypt->>VarResolver: Değer Çözüldü<br/>prod-api.example.com
VarResolver->>Config: ✅ Değer Döndü<br/>(En Yüksek Öncelik)
else Environment-Level Encrypted Bulunamadı
VarResolver->>EnvStore: 2️⃣ Environment-Level<br/>Unencrypted Kontrolü
alt Environment-Level Unencrypted Bulundu
EnvStore->>VarResolver: Değer Döndü<br/>prod-api.example.com
VarResolver->>Config: ✅ Değer Döndü<br/>(İkinci Öncelik)
else Environment-Level Unencrypted Bulunamadı
VarResolver->>ProjectStore: 3️⃣ Project-Level<br/>Encrypted Kontrolü
alt Project-Level Encrypted Bulundu
ProjectStore->>Decrypt: Şifrelenmiş Değer<br/>Çözülür
Decrypt->>VarResolver: Değer Çözüldü<br/>api.example.com
VarResolver->>Config: ✅ Değer Döndü<br/>(Üçüncü Öncelik)
else Project-Level Encrypted Bulunamadı
VarResolver->>ProjectStore: 4️⃣ Project-Level<br/>Unencrypted Kontrolü
alt Project-Level Unencrypted Bulundu
ProjectStore->>VarResolver: Değer Döndü<br/>api.example.com
VarResolver->>Config: ✅ Değer Döndü<br/>(En Düşük Öncelik)
else Değişken Bulunamadı
VarResolver->>Config: ❌ Hata: Variable Bulunamadı
end
end
end
end
Config->>Proxy: Yapılandırma Çözümlendi<br/>Backend URL: prod-api.example.com
Note over Proxy: Çözümlenmiş Değerle<br/>İşlem Devam Ediyor
Proxy->>Backend: İstek Backend'e İletilir<br/>https://prod-api.example.com/api/products
Backend->>Proxy: Yanıt Döner<br/>200 OK
Proxy->>Gateway: İşlenmiş Yanıt
Gateway->>Client: HTTP Yanıtı<br/>200 OK
Note over Client,Gateway: İşlem Tamamlandı
Note over VarResolver,Decrypt: Öncelik Sırası:<br/>1. Environment-Level Encrypted<br/>2. Environment-Level Unencrypted<br/>3. Project-Level Encrypted<br/>4. Project-Level Unencrypted<br/><br/>Şifrelenmiş değerler<br/>runtime'da çözülür
Environment Variable Türleri
Hassas bilgiler için kullanılır
Şifreler, API anahtarları, sertifikalar, token'lar gibi hassas bilgiler şifrelenmiş olarak saklanır.
Önemli: Şifrelenmiş değişkenler geri dönüştürülemez şekilde şifrelenir. Değerler sadece kullanım sırasında çözülür.
Yapılandırma değerleri için kullanılır
URL'ler, port numaraları, flag'ler ve diğer yapılandırma değerleri şifrelenmeden saklanır.
Şifrelenmiş Değişkenler
- Şifreler: Veritabanı şifreleri, API anahtarları
- Sertifikalar: SSL/TLS sertifikaları
- Token'lar: OAuth token'ları, JWT secret'ları
- Diğer Hassas Bilgiler: Güvenlik gerektiren tüm değerler
Şifrelenmemiş Değişkenler
- URL'ler: Backend API URL'leri
- Port Numaraları: Port değerleri
- Flag'ler: Boolean değerler
- Diğer Yapılandırmalar: Genel yapılandırma değerleri
Environment Variable Seviyeleri
Belirli bir ortamda (Environment) geçerlidir
O ortamdaki tüm API Proxy'ler ve Task Flow'lar tarafından kullanılabilir. Proje seviyesi değişkenlerden daha yüksek önceliğe sahiptir.
Belirli bir projede (Project) geçerlidir
O projedeki tüm API Proxy'ler ve Task Flow'lar tarafından kullanılabilir. Ortam seviyesi değişkenlerden daha düşük önceliğe sahiptir.
Environment-Level Kullanım Senaryoları
- Ortam bazlı backend URL'leri
- Ortam bazlı API anahtarları
- Ortam bazlı yapılandırma değerleri
- Ortam bazlı veritabanı bağlantı bilgileri
Project-Level Kullanım Senaryoları
- Proje bazlı yapılandırma değerleri
- Proje bazlı API anahtarları
- Proje bazlı genel ayarlar
- Proje bazlı ortak değerler
Environment Variable Öncelik Sırası
Değişken çözümleme sırası (yüksekten düşüğe):
En yüksek öncelik
Ortam seviyesinde şifrelenmiş değişkenler.
İkinci öncelik
Ortam seviyesinde şifrelenmemiş değişkenler.
Üçüncü öncelik
Proje seviyesinde şifrelenmiş değişkenler.
En düşük öncelik
Proje seviyesinde şifrelenmemiş değişkenler.
Not: Aynı isimde bir değişken hem ortam hem de proje seviyesinde tanımlıysa, ortam seviyesindeki değişken kullanılır.
Çalışma Mantığı
Ortam değişkenleri proje seviyesinde tanımlanır
- Global: Tüm ortamlarda aynı değer
- Environment-Specific: Her ortam için farklı değer
Yapılandırma alanlarında ${variableName} formatında kullanılır
- Backend adresi:
${BACKEND_URL} - Veritabanı:
jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME} - API anahtarı:
${API_KEY}
API Proxy çalışırken otomatik çözümlenir
- Değişken ifadeleri tespit edilir
- Ortam değeri alınır
- Secret'lar decrypt edilir
- Gerçek değerle değiştirilir
Örnek Senaryo
Yapılandırma:
- Development:
BACKEND_URL = dev-api.example.com - Production:
BACKEND_URL = api.example.com - Yapılandırmada:
${BACKEND_URL}
Runtime Sonuçları:
- Development ortamında:
dev-api.example.com - Production ortamında:
api.example.com
Environment Variable Kullanım Formatı
Ortam değişkenleri, yapılandırma alanlarında özel bir format kullanılarak referans edilir.
Format Yapısı
| Format | Açıklama | Örnek |
|---|---|---|
${variableName} | Temel kullanım formatı | ${BACKEND_URL} |
text${variableName} | Metin ile birleştirme | https://${API_HOST} |
${variableName}text | Metin ile birleştirme | ${API_PORT}/api |
text${variable1}text${variable2} | Birden fazla değişken | jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME} |
Format Kuralları
${ ile başlamalıdır
} ile bitmelidir
Ortada değişken adı yer alır (boşluk olmadan)
Değişken adı büyük/küçük harf duyarlıdır
Environment Variable Kullanım Yerleri
Ortam değişkenleri Apinizer platformunda çeşitli yapılandırma alanlarında kullanılabilir. Environment Variable Seçim Dialog'u sadece belirli alanlarda mevcuttur.
Upstream Routing adresleri
Konum: API Proxy > Upstream/Routing Tab > Define Address(es)
Backend API adreslerinde ortam bazlı yönlendirme için kullanılır.
Veritabanı bağlantı yapılandırması
Konum: Administration > Connection Management > Database Connection Pool
JDBC URL, Username, Password alanlarında ortam bazlı yönetim.
LDAP bağlantı yapılandırması
Konum: Administration > Connection Management > LDAP Connection Pool
LDAP URL, Bind DN, Bind Password alanlarında ortam bazlı yönetim.
API Proxy - Routing Detayları
| Özellik | Açıklama |
|---|---|
| Konum | API Proxy > Upstream/Routing Tab > Define Address(es) |
| Alan | Backend API adresi input alanı |
| Kullanım | Backend API adreslerinde ortam bazlı yönlendirme |
| Erişim | Adres input alanının sağındaki liste ikonu butonuna tıklanarak |
Kullanım Senaryosu: Farklı ortamlarda farklı backend adresleri kullanmak için
Database Connection Detayları
| Özellik | Açıklama |
|---|---|
| Konum | Administration > Connection Management > Connection Pool Def DB |
| Alanlar | JDBC URL, Username, Password |
| Kullanım | Veritabanı bağlantı bilgilerinde ortam bazlı yönetim |
| Dialog Erişimi | Her alanın sağındaki liste ikonu butonuna tıklanarak |
| Secret Kullanımı | Password alanı mutlaka secret olarak işaretlenmelidir |
Kullanım Senaryosu: Farklı ortamlarda farklı veritabanı bağlantı bilgileri kullanmak için
LDAP Connection Detayları
| Özellik | Açıklama |
|---|---|
| Konum | Administration > Connection Management > Connection Pool Def LDAP |
| Alanlar | LDAP URL, Bind DN, Bind Password |
| Kullanım | LDAP bağlantı bilgilerinde ortam bazlı yönetim |
| Dialog Erişimi | Her alanın sağındaki liste ikonu butonuna tıklanarak |
| Secret Kullanımı | Bind Password mutlaka secret olarak işaretlenmelidir |
Kullanım Senaryosu: Farklı ortamlarda farklı LDAP bağlantı bilgileri kullanmak için
Kullanım Senaryoları ve Örnekler
Backend API Adresi Yönetimi
Problem: Farklı ortamlarda farklı backend API adresleri kullanılıyor.
Çözüm:
Ortam Değişkeni Oluşturma:
- Key Name:
BACKEND_API_URL - Type: Environment-Specific
- Development:
https://dev-api.example.com - Test:
https://test-api.example.com - Production:
https://api.example.com
Routing'de Kullanım:
- Address:
${BACKEND_API_URL}
Sonuç:
- Development ortamında istekler
https://dev-api.example.comadresine gider - Test ortamında istekler
https://test-api.example.comadresine gider - Production ortamında istekler
https://api.example.comadresine gider
Veritabanı Bağlantı Yönetimi
Problem: Her ortamda farklı veritabanı kullanılıyor.
Çözüm:
Ortam Değişkenleri:
DB_HOST: Development=dev-db.example.com, Production=prod-db.example.comDB_PORT: Global=3306DB_NAME: Development=dev_db, Production=prod_dbDB_USER: Development=dev_user, Production=prod_userDB_PASSWORD: Development=dev_pass, Production=prod_pass(Secret)
Connector'da Kullanım:
- Connection String:
jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME} - Username:
${DB_USER} - Password:
${DB_PASSWORD}
Sonuç:
- Development:
jdbc:mysql://dev-db.example.com:3306/dev_db - Production:
jdbc:mysql://prod-db.example.com:3306/prod_db
API Anahtarı Yönetimi
Problem: Dış servisler için farklı API anahtarları kullanılıyor.
Çözüm:
Ortam Değişkeni:
- Key Name:
EXTERNAL_SERVICE_API_KEY - Type: Environment-Specific
- Development:
dev-key-abc123(Secret) - Production:
prod-key-xyz789(Secret)
Policy'de Kullanım:
- Header Name:
X-API-Key - Header Value:
${EXTERNAL_SERVICE_API_KEY}
Sonuç:
- Development:
X-API-Key: dev-key-abc123 - Production:
X-API-Key: prod-key-xyz789
Environment Variable Oluşturma
Ortam değişkeni oluşturma adımları:
Adım 1: Yeni Ortam Değişkeni Ekleme
- Ortam Değişkenleri sayfasına gidin
- Sağ üst köşedeki "Oluştur" (Create) butonuna tıklayın
- Ortam Değişkeni düzenleme penceresi açıl ır
Adım 2: Temel Bilgileri Girme
-
Key Name (Değişken Adı):
- Zorunlu alan
- Proje içinde benzersiz olmalıdır
- İsim kontrolü otomatik yapılır
- Geçerli isim: Yeşil onay işareti
- Mevcut isim: Kırmızı uyarı işareti
-
**Açıklama **:
- İsteğe bağlı alan
- Değişkenin ne için kullanıldığını açıklar
Adım 3: Tip Seçimi
-
Environment-Specific (Ortam Özelinde):
- Her ortam için farklı değer tanımlanabilir
- Yeni kayıt oluştururken seçilir
- Kayıt oluşturulduktan sonra değiştirilemez
-
Global (Tüm Ortamlar):
- Tüm ortamlarda aynı değer kullanılır
- Yeni kayıt oluştururken seçilir
- Kayıt oluşturulduktan sonra değiştirilemez
Önemli: Tip seçimi sadece yeni kayıt oluştururken yapılabilir. Mevcut kayıtların tipi değiştirilemez.
Adım 4: Değer Tanımlama
Environment-Specific Değişkenler İçin:
- Ortam Ekleme: "Ortam Ekle" butonuna tıklayarak yeni ortam ekleyin
- Ortam Seçimi: Her değer için bir ortam seçin
- Mevcut ortamlar listeden seçilir
- "Custom..." seçeneği ile özel ortam adı girilebilir
- Değer Girme: Her ortam için değer girin
- Secret Ayarlama: Hassas bilgiler için "Secret" checkbox'ını işaretleyin
- Secret değerler kaydedildikten sonra maskelenir (
***********) - Secret değerler şifrelenerek saklanır
- Güncelleme sırasında değer değiştirilmemişse mevcut değer korunur
- Secret değerler kaydedildikten sonra maskelenir (
Global Değişkenler İçin:
- Global Değer: Tek bir değer girin (tüm ortamlar için geçerli)
- Secret Ayarlama: Hassas bilgiler için "Secret" checkbox'ını işaretleyin
Adım 5: Kaydetme ve Deployment
- Form Kontrolü: Tüm zorunlu alanlar doldurulmalı ve isim geçerli olmalı
- "Kaydet ve Deploy" butonuna tıklayın
- Onay Dialog'u:
- Değişken adını tekrar girmeniz istenir (güvenlik için)
- Etkilenecek bileşenler listelenir:
- API Proxy Routing ayarları
- Policy Configuration ayarları
- Connector ayarları
- Diğer yapılandırma ayarları
- Deployment Sonucu:
- Tüm çalışan ortamlara (Environments) otomatik olarak deploy edilir
- Deployment sonuçları gösterilir
Önemli: Secret olarak işaretlenen değerler kaydedildikten sonra bir daha görüntülenemez.
Environment Variable Düzenleme
Düzenleme Modal'ının Açılması
Düzenleme modal'ı aşağıdaki yollarla açılabilir:
| Yöntem | Açıklama |
|---|---|
| Liste'den Tıklama | Ortam değişkeni adına tıklanır |
| Menü'den Seçim | Satır sonundaki menüden "Edit" seçilir |
Düzenleme Modal'ındaki Farklılıklar
| Özellik | Yeni Kayıt | Düzenleme |
|---|---|---|
| Modal Başlığı | "Add Environment Variable" | "Edit Environment Variable" |
| Type Seçimi | Aktif (değiştirilebilir) | Pasif (değiştirilemez) |
| Secret Değerler | Normal görünür | Maskelenmiş görünür (***********) |
| Secret Checkbox | Aktif | Kaydedilmiş secret'lar için pasif |
Best Practices
Güvenlik
- Hassas bilgileri mutlaka şifrelenmiş olarak saklayın
- Şifreler, API anahtarları, sertifikalar için encrypted kullanın
- Düzenli olarak şifreleri değiştirin
Organizasyon
- Değişken isimlerini tutarlı bir şekilde adlandırın
- Ortam ve proje seviyesi değişkenleri doğru şekilde ayırın
- Dokümantasyon oluşturun
Yönetim
- Kullanılmayan değişkenleri temizleyin
- Değişken kullanımını düzenli olarak gözden geçirin
- Versiyon kontrolü yapın