Closeup of many cables with blue wires plugged in modern switch with similar adapters on blurred background in modern studio

Mersin’deki bir lojistik firması beş farklı sistemi konuşturmaya çalışıyordu: SAP B1 (siparişler), ServiceNow (ticket’lar), Power BI (raporlama), SharePoint (dokümanlar), bir partner B2B EDI portal’ı. Eski çözüm: bir Windows Server üzerinde scheduled PowerShell script’leri ve Excel dosyaları. Sürdürülemez bir hâl alınca Azure Logic Apps ile baştan kurguladık. 14 workflow, 8 ayda canlıya çıkardık. Bu yazı o projeden notlar; “Logic Apps sürükle-bırak, kolay” pazarlamasının ardındaki gerçek operasyonel detaylar.

Consumption mı Standard mı: Karar Matrisi

Özellik Consumption Standard
Fiyat modeli Pay-per-action (~$0.000025/exec) App Service Plan ($150-$2000/ay)
VNet integration Yok (ISE ile vardı, deprecated) Var, native
Stateful + stateless workflow Sadece stateful İkisi de
Multi-workflow tek kaynakta Yok (her workflow ayrı resource) Var
Local development Sınırlı VS Code uzantısı, lokal debug
Connector seçimi Geniş (1000+) Geniş + built-in (in-process)
Cold start Var (saniye seviyesi) Düşük (Always On açıkken yok)

Sahada karar kuralım: Sporadic workflow (günde 10-100 exec) Consumption. Sürekli yüksek volume (saatte 1000+ exec) veya VNet gereksinimi olan Standard. Mersin projesinde 9 workflow Consumption, 5 workflow Standard’da (özellikle SAP B1 entegrasyonu için VNet integration gerekti).

Connector Seçimi ve Limitleri

Logic Apps’in pazarlanan değeri “1000+ connector”. Pratikte üç tip var:

  • Built-in connectors: Logic Apps motoruna gömülü, hızlı, ucuz (action başına standart fiyat). HTTP, Azure Service Bus, Azure Functions, vb.
  • Standard connectors: Azure-managed, action başına ücretli. SQL Server, SharePoint, Office 365, Twilio.
  • Enterprise connectors: SAP, IBM 3270, AS2, EDI X12. Standard’dan ~~10x pahalı (action başına $0.001 vs $0.000125).

SAP connector enterprise tier. Mersin projesinde SAP B1 ile günde ortalama 4.000 transaction, ayda 120.000 action × $0.001 = $120/ay sadece SAP connector için. Tahmin çıkardığımız budgetı aşmıyordu ama “günde 50.000 transaction olsaydı?” sorusunu sormuştu üst yönetim. O senaryo için SAP’ın native EDI/IDoc’larını kullanan kendi entegrasyon katmanı (SAP Cloud Integration veya kendi service bus) düşünmek gerekiyor.

Workflow Pattern: HTTP Trigger + Service Bus Queue

Best practice öğrendiğim kalıp: HTTP trigger ile webhook al, Service Bus queue’ya hemen yaz, asıl işlem ikinci bir workflow ile queue’dan tetiklensin. Sebep:

  • HTTP timeout (sender bekleyemez), Service Bus enqueue 100ms’de biter.
  • Hata olursa retry queue’da, sender bilmesine gerek yok.
  • Throttling burada koyabilirsin (queue’dan partition limit ile çek).
  • Dead letter queue ile başarısız mesajlar inceleme için ayrı tutulur.
# Workflow 1: Receiver
trigger:
  type: Request
  inputs:
    schema: { ... }
actions:
  EnqueueMessage:
    type: ServiceBus
    inputs:
      operation: SendMessage
      queue: orders-incoming
      message: '@{triggerBody()}'
  ReturnResponse:
    type: Response
    inputs:
      statusCode: 202
      body: '{"messageId":"@{actions('EnqueueMessage').outputs.messageId"}'

# Workflow 2: Processor
trigger:
  type: ServiceBus
  inputs:
    queue: orders-incoming
    maxConcurrency: 5
actions:
  CallSAP:
    type: SAP
    inputs:
      method: POST
      bapi: BAPI_SALESORDER_CREATEFROMDAT2
      body: '@{...}'
  HandleResult:
    type: Switch
    cases:
      Success:
        actions:
          UpdateServiceNow: { ... }
      Failure:
        actions:
          DeadLetter: { ... }

On-Premise Data Gateway: SAP B1 Erişimi

SAP B1 on-premise çalışıyordu (Mersin veri merkezinde). Logic Apps’in on-premise sistemlere erişimi için iki yol var:

  1. On-premise data gateway: Bir Windows machine’e gateway kuruyorsun, Logic Apps gateway üzerinden erişiyor.
  2. VNet integration + ExpressRoute/VPN: Logic Apps Standard’ı VNet’e koyar, VNet’ten on-prem’e tünel.

İkisi de dener gibi olduk. Gateway daha basit ama tek nokta failure’i. VNet integration daha sağlam ama ExpressRoute lazım. Mersin’de zaten ExpressRoute vardı, VNet integration tercih ettik. Logic Apps Standard, VNet integration ile SAP B1 server’a doğrudan erişiyor.

Throttling ve Retry Policy

SAP B1 saniyede max 50 BAPI çağrısı kabul ediyordu. Logic Apps default’ta concurrent execution limit yok, kolayca SAP’ı boğarsın. Workflow’da throttling kuralı:

runtimeConfiguration:
  concurrency:
    runs: 5  # max 5 paralel çalışan workflow instance
  retryPolicy:
    type: exponential
    count: 4
    interval: PT10S
    maximumInterval: PT1M
    minimumInterval: PT5S

Service Bus queue trigger için maxConcurrency: 5 ile aynı etki. SAP B1 boğulmuyor, queue içinde mesajlar bekliyor.

Exception Handling: Try-Catch-Finally

Logic Apps’in “scope” özelliği ile try-catch-finally pattern’i:

actions:
  TryScope:
    type: Scope
    actions:
      CallSAP: { ... }
      UpdateDB: { ... }
  CatchScope:
    type: Scope
    runAfter:
      TryScope: [Failed, Skipped, TimedOut]
    actions:
      LogError: { ... }
      SendAlertEmail: { ... }
      DeadLetterMessage: { ... }
  FinallyScope:
    type: Scope
    runAfter:
      TryScope: [Succeeded, Failed, Skipped, TimedOut]
      CatchScope: [Succeeded, Failed, Skipped, TimedOut]
    actions:
      LogMetrics: { ... }

Bu kalıbı 14 workflow’un hepsinde uyguladık. SAP geçici çökme, ServiceNow timeout, Power BI rate limit gibi durumlar otomatik handle ediliyor, gerçekten ele alınması gereken hatalar email ve Teams kanalına gidiyor.

Monitoring: Application Insights Entegrasyonu

Logic Apps Standard, Application Insights’a otomatik telemetry gönderiyor. Custom property’ler ekleyip workflow execution’larını detaylı tracking yapabiliyorsun.

requests
| where cloud_RoleName == "logic-app-orders-processor"
| where timestamp > ago(24h)
| summarize 
    Total=count(),
    Success=countif(success==true),
    Failed=countif(success==false),
    AvgDurationMs=avg(duration)
  by bin(timestamp, 1h), operation_Name
| render timechart

Mersin’de Application Insights dashboard’u ekibin günlük operasyon panel’i. SLA: günlük başarı oranı %99.5 hedef, %99 altına düşerse alert.

Maliyet Sürprizleri

İlk ay fatura beklediğimizden 2.3x yüksek geldi. Sebepler:

  1. Trigger polling: Service Bus trigger Consumption’da her poll bir action sayılıyor. Her 30 saniyede bir poll = ayda 86.000 action. Bu poll’lar bedava değil.
  2. Loop iteration’ları action sayısına dahil: 1000 satırlık array’i loop ile işliyorsan 1000 action, hepsi ücretli.
  3. Retry’lar action sayısına dahil: Başarısız action 4 retry yaparsa 5 action sayılıyor.

Çözüm: Service Bus için poll yerine push trigger (event-driven). Loop yerine batch action. Retry policy’leri makul (maximum 2-3 retry).

İkinci ay fatura %40 düşük geldi. Üçüncü ay daha optimize ettikçe başlangıç tahminine yaklaştık.

Power Automate vs Logic Apps

Aynı motoru paylaşıyorlar (Power Automate, Logic Apps üzerinde inşa edilmiş). Farklar:

  • Power Automate iş kullanıcıları için pazarlanıyor, Logic Apps developer için.
  • Power Automate, Power Platform lisansıyla geliyor, kullanıcı bazlı fiyat.
  • Logic Apps Azure resource, action bazlı fiyat.
  • Power Automate cloud flows, Logic Apps connector’lerinin alt setine erişebiliyor.
  • Source control / CI/CD: Logic Apps Bicep/ARM ile Git’te tutulabilir, Power Automate solution export/import gerektiriyor.

Mersin’de iki ürün de yan yana çalışıyor: HR onay süreçleri Power Automate (kullanıcı bazlı, formlar), system entegrasyonları Logic Apps (geliştirici bazlı, kod review).

Sahada Düşülen Üç Tuzak

  1. Source control yok: Logic Apps designer’da tıklayarak yapıyorsun, “kim ne zaman ne değiştirdi” soruyorsun. Bicep ile IaC yap, Git’te tut.
  2. Connector authentication tek bir hesaba bağlı: Bir kullanıcı SharePoint connector’ünü kendi hesabıyla bağladı, kullanıcı izinlerini çekti veya işten çıktı, tüm workflow’lar düştü. Service account kullan veya managed identity (mümkün olduğunda).
  3. Designer’da gizlenen complexity: 50 action’lık bir workflow designer’da görsel hoş gözükür ama debug etmek korkunçtur. 10+ action’lık workflow’u bölmek (sub-workflow ile) okunabilirliği artırır.

Sonuç: Doğru Senaryoda Doğru Araç

Logic Apps “low-code” değil, “high-productivity-code”. Geliştirici bilgisi gerektiriyor (HTTP, JSON, schema, error handling), ama klasik kod yazmaya göre 3-5x daha hızlı. SAP B1 ↔ ServiceNow gibi entegrasyonlarda kendi başına Java/C# yazmak yerine Logic Apps + connector’larla başla, performance/cost yetmediğinde Azure Functions veya Service Bus’a indir.

Mersin’de 14 workflow şu anda günde ortalama 18.000 transaction işliyor, %99.7 başarı oranıyla. Aylık Azure Logic Apps faturası ~~$340. Eski PowerShell + Excel çözümünün manuel düzeltme + hata düzeltme emek maliyeti ayda ~~80 saat × $25 = $2.000 idi. ROI net.

CloudSpark olarak Azure entegrasyon projelerinde Logic Apps + Service Bus + Functions architecture pattern’lerini end-to-end uyguluyoruz. SAP B1, ServiceNow, Salesforce, Dynamics gibi hedeflere yönelik referans çözümlerimiz var.

🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español