Ana içeriğe geç

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
Şifreleme Desteği

Hassas bilgiler şifrelenmiş olarak saklanabilir

Seviye Bazlı

Ortam veya proje seviyesinde tanımlanabilir

Güvenlik

Şifrelenmiş değişkenler güvenli bir şekilde saklanır

Yeniden Kullanım

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

Şifrelenmiş (Encrypted)

Hassas bilgiler için kullanılır

Şifreler, API anahtarları, sertifikalar, token'lar gibi hassas bilgiler şifrelenmiş olarak saklanır.

uyarı

Önemli: Şifrelenmiş değişkenler geri dönüştürülemez şekilde şifrelenir. Değerler sadece kullanım sırasında çözülür.

Şifrelenmemiş (Unencrypted)

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

Environment-Level (Ortam Seviyesi)

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.

Project-Level (Proje Seviyesi)

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):

1. Environment-Level Encrypted

En yüksek öncelik

Ortam seviyesinde şifrelenmiş değişkenler.

2. Environment-Level Unencrypted

İkinci öncelik

Ortam seviyesinde şifrelenmemiş değişkenler.

3. Project-Level Encrypted

Üçüncü öncelik

Proje seviyesinde şifrelenmiş değişkenler.

4. Project-Level Unencrypted

En düşük öncelik

Proje seviyesinde şifrelenmemiş değişkenler.

bilgi

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ığı

1. Tanımlama

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
2. Kullanım

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}
3. Runtime Çözümleme

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ı

FormatAçıklamaÖrnek
${variableName}Temel kullanım formatı${BACKEND_URL}
text${variableName}Metin ile birleştirmehttps://${API_HOST}
${variableName}textMetin ile birleştirme${API_PORT}/api
text${variable1}text${variable2}Birden fazla değişkenjdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}

Format Kuralları

Başlangıç Karakteri

${ ile başlamalıdır

Bitiş Karakteri

} ile bitmelidir

Değişken Adı

Ortada değişken adı yer alır (boşluk olmadan)

Büyük/Küçük Harf

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.

API Proxy - Routing

Upstream Routing adresleri

Konum: API Proxy > Upstream/Routing Tab > Define Address(es)

Backend API adreslerinde ortam bazlı yönlendirme için kullanılır.

Database Connection

Veritabanı bağlantı yapılandırması

Konum: Administration > Connection Management > Database Connection Pool

JDBC URL, Username, Password alanlarında ortam bazlı yönetim.

LDAP Connection

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ı
ÖzellikAçıklama
KonumAPI Proxy > Upstream/Routing Tab > Define Address(es)
AlanBackend API adresi input alanı
KullanımBackend API adreslerinde ortam bazlı yönlendirme
ErişimAdres 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ı
ÖzellikAçıklama
KonumAdministration > Connection Management > Connection Pool Def DB
AlanlarJDBC URL, Username, Password
KullanımVeritabanı bağlantı bilgilerinde ortam bazlı yönetim
Dialog ErişimiHer 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ı
ÖzellikAçıklama
KonumAdministration > Connection Management > Connection Pool Def LDAP
AlanlarLDAP URL, Bind DN, Bind Password
KullanımLDAP bağlantı bilgilerinde ortam bazlı yönetim
Dialog ErişimiHer 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.com adresine gider
  • Test ortamında istekler https://test-api.example.com adresine gider
  • Production ortamında istekler https://api.example.com adresine 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.com
  • DB_PORT: Global=3306
  • DB_NAME: Development=dev_db, Production=prod_db
  • DB_USER: Development=dev_user, Production=prod_user
  • DB_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
bilgi

Ö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

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
uyarı

Ö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öntemAçıklama
Liste'den TıklamaOrtam değişkeni adına tıklanır
Menü'den SeçimSatır sonundaki menüden "Edit" seçilir

Düzenleme Modal'ındaki Farklılıklar

ÖzellikYeni KayıtDüzenleme
Modal Başlığı"Add Environment Variable""Edit Environment Variable"
Type SeçimiAktif (değiştirilebilir)Pasif (değiştirilemez)
Secret DeğerlerNormal görünürMaskelenmiş görünür (***********)
Secret CheckboxAktifKaydedilmiş 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

Sonraki Adımlar