Ana sayfa→Bilgisayar & Çevre Birimleri
Bilgisayar & Çevre Birimleri

AWS’ye Geçiş Yapınca Veri Hattım Neden Bozuldu? Bir Mühendis Deneyimi.

Son birkaç aydır, tamamen kendi Windows makinem üzerinde çalışan küçük bir veri hattı oluşturuyordum. RSS içeriği WSL2 içinde çalışıyor, Postgres Docker...

User Avatar
SayarBilgi Yayın KuruluEditör
3 dk okuma

Son birkaç aydır, tamamen kendi Windows makinem üzerinde çalışan küçük bir veri hattı oluşturuyordum. RSS içeriği WSL2 içinde çalışıyor, Postgres Docker içinde, Kestra tüm süreci yönetiyor, dbt verileri dönüştürüyor. Her parça çalışıyordu. Çalışan bir bağımlılık grafiğim vardı, testler geçiyordu, makaleleri getiren ve bunları veritabanına kaydeden planlı bir akış vardı.

Her şey çünkü her şey tek bir yerdeydi: benim dizüstü bilgisayarım.

Bu yazıda, bu hattı dizüstü bilgisayarımdan çıkarıp gerçek bir sunucuya taşımaya çalıştığımda neler olduğunu anlatacağım. Burada AWS’yi kullanmak yerine sadece komut satırını kullandım. Beklediğim en zor kısımın AWS’nin kendisi olacağını düşündüm: hesaplar, örnekler, ağ. Ancak sorun bu değildi. Sorun, “her şey aynı makinede çalışıyor” varsayımına dayanarak inşa ettiğim ve farkında olmadığım şeylerin bozulmasıydı. Bu varsayım, benim sandığımdan daha fazla iş yapıyordu ve bunu ortadan kaldırmak, her seferinde beklenmedik şekillerde sorunlara yol açtı.

SayarBilgi sitesini Google’da tercih edilen kaynak olarak seç

Sunucuyu Kurmak

Dürüst olmak gerekirse, sunucuyu çalıştırmak en kolay kısım oldu.

Yeni $100’luk ücretsiz deneme sürümüne sahip bir AWS hesabı oluşturdum, kök kullanıcı yerine CLI için bir IAM kullanıcısı ayarladım (bu küçük alışkanlık, beni daha sonraki birçok sorundan kurtardı) ve t3.small boyutunda bir EC2 örneği Ubuntu 22.04 ile başlattım.

Yolda birkaç küçük sürpriz yaşandı. Bunlar büyük sorunlar değildi, ancak her şeyin aynı olmayacağını hatırlatıyordu. Örneğin, ilk çalıştırmada disk alanı yetersiz kaldı ve bu da 8GB’lık varsayılan diskin bile yeterli olmadığını gösterdi.

Sunucunun adresinin değişmemesi için bir Elastic IP atadım ve yalnızca kendi IP adresimin SSH (22), Kestra arayüzü (8080) ve Postgres (5432) portlarına erişebileceği şekilde güvenlik grubunu yapılandırdım. Bu, ev internet bağlantımın sabit bir IP adresi sağlamaması nedeniyle, her oturumda sunucuya bağlanmak için geçerli adresimi yeniden onaylamamı gerektirdi.

Bunların hiçbiri zor değildi. Sadece bu tür bir bilgisayar hakkında bilmem gereken birçok küçük ve özel bilgiyi öğrenmem gerekiyordu.

Veri Hattını Taşıtmak

Proje dosyalarını git yerine rsync ile taşıdım, çünkü .env dosyamda gerçek gizli bilgiler vardı. Docker’ı kurdum ve Kestra’yı başlattım.

Bir sürprizle karşılaştım: Kestra akışları, yerel olarak çalıştığım gibi bir dosyada saklanmıyordu. Akışlar, Kestra’nın kendi veritabanında saklanıyordu. Bu nedenle, sunucuya bağlandığımda akışı manuel olarak UI’dan yapıştırdim.

Akışı çalıştırdım ve hemen başarısız oldu.

Eksik Araçlar

Akış, Python betiğini çalıştırmak için bir Process görevini kullanıyordu. Bu, yerel olarak nasıl yapılandırdıysam aynı şekildeydi.

Hata, eksik bir paketti: python3.12-venv. Araştırmaya başladığımda, farkında olmadığım bir şeyi öğrendim. Process görevi Kestra’nın konteynerinde çalışmıyordu. Kestra’nın konteyneri Python’a sahipti, ancak sanal ortam oluşturmak için gereken parçaya sahip değildi.

Geçici olarak, Kestra konteynerine python3.12-venv’yi yükledim. Bu işe yaradı, ancak yeniden başlatıldığında kaybolacaktı. Kalıcı bir çözüm bulmalıydım.

Burada önemli bir karar vermem gerekti: Görevi Kestra içinde düzeltmek yerine, onu dışarı taşıdım ve Kestra’nın Docker görev yöneticisini kullandım. Fikrim şu şekildeydi: Kestra, Python işini çalıştırmak için ayrı bir konteyner başlatacak, betiği çalıştıracak ve konteyneri kapatacaktı. Bu, istediğim gibi çalışması gereken bir kurulumdu.

Ancak burada daha fazla karmaşıklıkla karşılaşacağımı bilmiyordum.

Yöneticinin Bilmediği Anahtar

Kestra’nın ayrı bir konteyner başlatabilmesi için, Docker demona erişebilmesi gerekiyordu. Bunu, Kestra konteynerine Docker soketini bağlayarak yapabilirsiniz:

Bu önemlidir, çünkü bu sokete sahip olan her şey, sunucuda herhangi bir şeyi çalıştırma yeteneğine sahiptir. Yerel olarak kendi bilgisayarımda bu hiçbir zaman gerçek bir ödünleşim değildi. Açık internette bulunan bir makinede ise önemli bir karardır. Bu öğrenme projesi için kabul edilebilir olduğunu düşündüm, ancak bu tür kararlar bilinçli olarak verilmelidir.

Soketi bağladım ve Kestra’nın Docker görev yöneticisini kullanmasını sağladım. Ancak burada da sorunlarla karşılaştım.

Bağlantı Olmayan Hacim

Sorunlar çözüldükten sonra, akış çalıştı ve yeni bir soruna rastladı: requirements dosyasını açamadı. Proje klasörünü konteynere bağlamıştım.

Bu en uzun deturdur. En sinir bozucu olanı, sessizce başarısız olmasıydı. Önce yanlışlıkla volume-enabled ayarını yanlış yere koydum. Sonra doğru ayarı yaptım ve yine çalışmadı.

İlginizi Çekebilir: Yapay Zeka Modellerinde Bağlam Mühendisliğinin Evrimi: Veri Bilimciler İçin Ne Anlama Geliyor? →
Kaynak: Towardsdatascience ↗
💬 SayarBilgi Topluluğu

Bu Gelişmeyi Toplulukta Değerlendirin

Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.

Topluluk Canlı Akışı →
💬 Topluluk Masası & Tartışma

Bu gelişme hakkında düşüncelerinizi, donanım deneyimlerinizi veya sorularınızı Topluluk Forumumuzda paylaşın.

Foruma Katıl & Yanıtla ➔
Forumda sor / tartış
TOPLULUĞUN SESİ

Söz sizde.

2 yorum

Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.

Sohbete katıl

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumunuz yayımlanmadan önce onay bekleyebilir.

BİR SONRAKİ OKUMA

Merak etmeye devam

Tümünü gör ↗

Neyi merak ediyorsun?

En az 3 karakter yazın.

Keşfet