AWS Step Functions, sunucusuz iş akışlarını (workflow) görsel olarak tanımlamanıza, yürütmenize ve yönetmenize olanak tanıyan tam yönetimli bir orkestrasyon hizmetidir. Uygulamalarınızdaki birden çok AWS servisini birbirine bağlayarak karmaşık iş süreçlerini basitleştirir, hata yönetimini otomatikleştirir ve geliştirme süresini kısaltır.
Step Functions Nedir ve Nasıl Çalışır?
Step Functions, bir dizi adımdan (state) oluşan state makineleri kullanarak iş akışlarınızı modeller. Her adım bir görevi (task) temsil eder: bir Lambda fonksiyonunu çağırmak, bir SQS kuyruğuna mesaj göndermek, bir veritabanı işlemi yapmak veya harici bir API'ye istek atmak olabilir. Makine, adımları sırayla veya paralel olarak yürütür, koşullara göre dallanma yapar ve hata durumlarında yeniden deneme veya hata işleme adımlarını tetikler.
Step Functions'ın en güçlü yanlarından biri, iş akışlarınızın durumunu (state) harici bir veritabanına ihtiyaç duymadan yönetmesidir. Her yürütme (execution) bir durum geçmişi kaydeder ve bu sayede adımlar arasında veri akışını sağlar. Bu, özellikle çok adımlı işlemlerde karmaşıklığı azaltır.
Önemli Not: Step Functions'da bir adımın çıktısı, bir sonraki adıma JSON formatında girdi olarak otomatik aktarılır. Ancak büyük veri kümelerini taşırken
$.PayloadveyaInputPathgibi alanlarla veri boyutunu sınırlamak gerekir. Aksi halde 256 KB’lık state boyutu sınırına takılabilirsiniz.
Temel Bileşenler: State Türleri
Bir state makinesi farklı türde state'lerden oluşur:
- Task: İş yapan adım (Lambda, API Gateway, SQS, vs.).
- Choice: Koşullu dallanma.
- Parallel: Birden çok dalı eşzamanlı çalıştırır.
- Map: Bir dizi girdi üzerinde dinamik olarak işlem yapar.
- Wait: Belirli bir süre bekler.
- Pass: Girdiyi değiştirmeden geçirir, test için kullanılır.
- Fail/Succeed: İş akışını sonlandırır.
Her state, gerekli alanların yanı sıra hata yönetimi (retry, catch) ve giriş/çıkış dönüşümleri (InputPath, ResultPath, OutputPath) tanımlayabilir.
Step Functions ile Lambda Entegrasyonu ve Cold Start Etkisi
Step Functions sıklıkla AWS Lambda fonksiyonlarını tetikler. İş akışınızın her adımında ayrı bir Lambda çağrısı yapılır. Bu, cold start sorununu belirginleştirebilir. Lambda'da soğuk başlangıç süresi, işlemci tipi ve bellek boyutu gibi faktörlere bağlı olarak 100 ms ile 1 saniye arasında değişir. Ardışık adımlarda cold start yaşanması toplam süreyi artırabilir. Bu etkiyi azaltmak için:
- Lambda fonksiyonlarınızı aynı Amazon VPC içinde değilse daha hızlı başlatmak için önceden hazırlanmış (provisioned concurrency) kullanabilirsiniz.
- Adımları mümkün olduğunca paralelize ederek toplam süreyi kısaltın.
- Az sayıda büyük Lambda fonksiyonu yerine, çok sayıda küçük ve odaklı fonksiyon yazmaktan kaçının; bu cold start sayısını çoğaltır.
SQS ve SNS ile Asenkron İş Akışları
Step Functions, asenkron mesajlaşma hizmetleriyle doğal olarak entegre olur. Örneğin, bir SNS konusuna mesaj yayınlamak veya bir SQS kuyruğundan mesaj almak için task state'i kullanabilirsiniz. Bu sayede iş akışınızı mikro hizmetler arasında koordine edebilirsiniz.
Konuyla ilgili olarak AWS SQS ve SNS arasındaki farkları bilmek önemlidir. SQS, mesajları kuyrukta tutarak güvenilir bir şekilde işlenmesini sağlarken, SNS anında push tabanlı bildirimler gönderir. Step Functions ile her iki servisi de kullanarak esnek ve dayanıklı iş akışları kurabilirsiniz: Bir Lambda hatası durumunda mesajı SQS'ye yönlendirip yeniden işleme koyabilir veya SNS üzerinden e-posta bildirimi gönderebilirsiniz.
Yürütme Modları: Standard ve Express
Step Functions iki yürütme modu sunar:
| Özellik | Standard | Express |
|---|---|---|
| Maksimum yürütme süresi | 1 yıl | 5 dakika |
| Yürütme hızı | Orta | Yüksek (saniyede binlerce) |
| Fiyatlandırma | Durum geçişi başına | Yürütme başına + süre |
| Uygun kullanım | Uzun süreli iş akışları, insan onayı | Yüksek hacimli, kısa süreli (ör. streaming) |
Standard mod, her yürütmenin aşamalarını detaylı kaydettiği için denetim ve hata ayıklama için idealdir. Express mod ise daha düşük maliyetli ve hızlıdır, ancak yürütme durumu kalıcı olarak kaydedilmez.
En İyi Pratikler ve Yaygın Hatalar
Yaygın Hata 1: State boyutu sınırını aşmak. Her yürütmede state verisi 256 KB ile sınırlıdır. Büyük JSON nesneleri taşıyorsanız, gereksiz alanları InputPath/OutputPath ile filtreleyin veya veriyi S3'te saklayıp referans verin.
Yaygın Hata 2: Hata yönetimini ihmal etmek. Task state'lerinde Retry ve Catch alanlarını mutlaka tanımlayın. Geçici hataları otomatik yeniden denemek, kalıcı hataları ise bir hata işleyiciye (DLQ veya başka bir state) yönlendirmek gerekir.
Yaygın Hata 3: Tüm iş akışını tek bir state makinesine sıkıştırmak. Çok büyük state makinelerinin bakımı zordur. İş akışını anlamlı alt bölümlere ayırın ve gerekiyorsa nested state makineleri (yardımcı iş akışları) kullanın.
En iyi pratikler:
- İş akışı tanımınızı versiyon kontrolü altında tutun (örneğin, CloudFormation veya Terraform ile).
- Her adımda loglama yapın. Step Functions CloudWatch Logs ile entegredir.
- Geliştirme aşamasında Task Token kullanarak harici bir sürecin tamamlanmasını bekleyebilirsiniz (örneğin insan onayı).
- Testlerinizde step functions'ı lokal olarak çalıştırmak için AWS SAM veya Step Functions Local Docker imajını kullanın.
Sonuç olarak, AWS Step Functions, sunucusuz uygulamalarınızda iş akışı orkestrasyonunu basit ve güvenilir bir hale getirir. Doğru yapılandırma ve en iyi pratiklerle hem geliştirme sürenizi kısaltabilir hem de uygulamanızın dayanıklılığını artırabilirsiniz.
Sık Sorulan Sorular
AWS Step Functions hangi durumlarda kullanılmalıdır?
Step Functions, birden çok AWS servisini koordine eden, adım adım ilerleyen, hata yönetimi gerektiren iş akışları için idealdir. Örneğin, sipariş işleme, veri dönüşümü, yedekleme işlemleri gibi kompleks süreçlerde kullanılır.
Standard ve Express yürütme modları arasındaki fark nedir?
Standard mod uzun süreli iş akışları ve detaylı durum takibi için uygundur; süresi 1 yıla kadar çıkabilir. Express mod ise yüksek hacimli, kısa süreli (5 dakikaya kadar) iş akışları için daha hızlı ve düşük maliyetlidir ancak durum geçmişi kaydedilmez.
Step Functions ile Lambda cold start sorunu nasıl azaltılır?
Lambda fonksiyonlarına provisioned concurrency atayarak cold start süresini ortadan kaldırabilirsiniz. Ayrıca adımları paralel hale getirerek toplam yürütme süresini kısaltabilir, her adımda küçük fonksiyonlar yerine daha büyük fonksiyonlar kullanarak cold start sayısını azaltabilirsiniz.
State boyutu sınırını aşarsam ne yapmalıyım?
State boyutu 256 KB ile sınırlıdır. Fazla veriyi S3'te saklayıp referans olarak aktarabilir veya InputPath/OutputPath ile gereksiz alanları filtreleyerek boyutu düşürebilirsiniz.
Step Functions ile SQS/SNS entegrasyonu nasıl yapılır?
Step Functions içinde bir Task state'inde AWS SDK kullanarak SQS'ye mesaj gönderebilir veya SNS'den mesaj yayınlayabilirsiniz. Ayrıca SQS kuyruğundan mesaj almak için bir Lambda fonksiyonunu çağırabilir veya direkt SQS ReceiveMessage API'sini kullanabilirsiniz.






