Yazar | Yevgeniy Brikman
Tercüman | Cehalet
Gruntwork'te, 300.000 satırlık bir altyapı kodu kitaplığı oluşturuyor ve sürdürüyoruz ve yüzlerce şirket bu kitaplığı üretim ortamlarında kullanıyor. Bu yazıda, bu kütüphaneyi geliştirme ve sürdürme pratiği sırasında öğrendiğimiz çok önemli beş dersi paylaşacağım.
1. Taş Devri'nde DevOps
Sektör çeşitli en son moda sözcüklerle (Kubernetes, mikro hizmetler, hizmet ağı, değişmez altyapı, büyük veri, veri gölleri vb.) Dolu olsa da gerçek şu ki, altyapı oluştururken ve takılıp kalıyorsanız Başları beladayken hiç de son teknoloji görünmüyorlar.
Bana göre DevOps daha çok şöyle geliyor:
Üretim düzeyinde altyapı oluşturmak aslında zor, stresli ve zaman alıcıdır.
Yüzlerce farklı şirketle çalışırken topladığımız deneysel verilere dayanarak, bir sonraki altyapı projenizin ne kadar süreceğini kabaca tahmin edebilirsiniz:
2. Ders 1: Üretim düzeyinde altyapı kontrol listesi
DevOps projeleri her zaman beklenenden daha uzundur. Bu neden?
İlk sebep Yak Tıraşı (yak kılı), peki Yak Tıraşı nedir? Bu sahneye bakın ve anlayacaksınız:
yönetici: Kullanıcı oturum açma işlevini geliştirmiyor musunuz? Neden şimdi kullanmadığımız bir veritabanını kurcaluyorsunuz? mühendis: Evet, kullanıcı oturum açma işlevini geliştirmeyi planlıyorum. Sonra hangi kütüphaneyi kullanacağımı değerlendirmeye başladım, çok iyi bir kütüphane buldum ama sadece Postgres'i destekliyor. Bu yüzden buna değip değmeyeceğini görmek için bir Postgres oluşturmaya çalıştım. Ancak veritabanları arasında geçiş yapmak dizini yok eder, bu yüzden şimdi bir Postgres dizini oluşturmayı öğreniyorum ... böylece kullanıcı oturum açma işlevi uygulanabilir, değil mi?İkinci neden, üretim düzeyinde bir altyapı oluşturmanın çok fazla ayrıntı içermesidir. Çoğu geliştirici bu ayrıntıları bilmez, bu nedenle bir projeyi tahmin ederken, genellikle anahtar ve zaman alan ayrıntıları unutursunuz.
Bu sorunu önlemek için, yeni bir altyapıyı her kullanmaya başladığınızda aşağıdaki kontrol listesini kontrol edin:
Her altyapının kontrol listesindeki her maddeyi kontrol etmesi gerekmez, ancak uyguladığınız maddeleri, atlamaya karar verdiğiniz maddeleri ve ilgili nedenleri bilinçli olarak kaydetmelisiniz.
3. Ders 2: Araç Seti
2018 itibariyle, Gruntwork'te altyapı oluşturmak ve yönetmek için kullandığımız ana araçlar şunlardır:
Şimdi, tüm bu araçlar çok kullanışlıdır, ancak konu bu değil. Mesele şu ki, bu araçlar yeterli değil, ayrıca takımın davranışını da değiştirmeniz gerekiyor.
Özellikle, ekibiniz bu araçlara güvenmiyorsa veya ekibinizin bu araçları kullanmayı öğrenmek için yeterli zamanı yoksa, o zaman dünyadaki en iyi araçlar bile takımınıza herhangi bir yardım getiremeyecektir. Bu nedenle, kilit nokta, kod olarak altyapının bir yatırım olmasıdır: önceden maliyet ödemeniz gerekir, ancak akıllıca yatırım yaparsanız, uzun vadeli büyük faydalar elde edersiniz.
4. Ders 3: Büyük modüller zararlıdır
Yeni başlayanlar olarak altyapı, genellikle tek bir dosyada veya bir birim olarak dağıtılan bir dizi dosyada tüm ortamların (geliştirme, aşama, üretim vb.) Tüm altyapısını tanımlar. Bu kötü bir uygulamadır.
İşte bu yaklaşımın bazı dezavantajları:
Kod oluşturmak için küçük, bağımsız, yeniden kullanılabilir ve bir araya getirilebilir modüller kullanmalısınız. Bu tartışmalı yeni bir görüş değil. Bunu daha önce sayısız kez duymuş olabilirsiniz:
"Her seferinde bir şey yapın ve bunu iyi yapın" -Unix felsefesi. "İşlevlerin ilk kuralı, küçük olmaları gerektiğidir. İşlevlerin ikinci kuralı, küçükten daha küçük olmaları gerektiğidir." - "Kodu Temizlemenin Yolu"5. Ders 4: Otomatik test olmadan altyapı kodu çok kırılgandır
Altyapı kodunuz otomatik olarak test edilmezse, yanlış gitmek kolaydır. Sadece bazı gizli sorunları bilmiyorsun. Diğer bir deyişle, altyapı kodunu test etmek zordur. "Localhost" a sahip değilsiniz (örneğin, dizüstü bilgisayarınızda AWS VPC dağıtamazsınız) ve "birim testine" sahip değilsiniz (örneğin, "Terraform" kodunu "harici" koddan ayıramazsınız çünkü Terraform'un yaptığı şey Dış dünya ile etkileşim).
Bu nedenle, altyapı kodunuzu düzgün bir şekilde test etmek için genellikle kodu gerçek bir ortama dağıtmanız, gerçek altyapıyı çalıştırmanız ve yapmaları gereken şeyi yaptıklarını doğrulamanız gerekir (bu test yöntemi için lütfen açık kaynak kitaplığı olan Terratest'e bakın, Terraform, Packer ve Docker kodunu test etmek için araçlar). Bu nedenle, altyapı testi için bazı terimleri yeniden tanımlamanız gerekir:
Bu resim bir piramit, çok sayıda birim testimiz, az sayıda entegrasyon testimiz ve çok az sayıda uçtan uca testimiz var. neden? Bu, her test türü için gereken süreye göre belirlenir:
Altyapı testinin döngü süresi çok yavaştır, özellikle piramit daha yavaş yükseldiğinden, piramidin alt kısmında mümkün olduğunca çok hata yakalamak isteyeceksiniz. Bu, yapmanız gereken anlamına gelir:
6. Ders 5: Yayınlama süreci
Şimdi hepsini bir araya getirelim. Altyapınızı bundan sonra oluşturmak ve yönetmek için benimsemeniz gereken yöntemler şunlardır:
Orijinal İngilizce
https://blog.gruntwork.io/5-lessons-learned-from-writing-over-300-000-lines-of-infrastructure-code-36ba7fadeac1