Örnek Olay: Ürünlerim İçin Neden AWS Bulut Altyapısını Kullanıyorum?
Yayınlanan: 2022-03-11Karmaşık ve zorlu bir yazılım ürününü çalıştırmak için bir platform olarak AWS, kaynakları gerektiğinde, gereken ölçekte kullanarak esneklik sunar. Talep üzerine ve anında çalışır, çalışma ortamı üzerinde tam kontrol sağlar. Bir müşteriye böyle bir bulut mimarisi çözümü önerirken, sağlanan altyapı ve fiyatı büyük ölçüde önceden ayarlanması gereken gereksinimlere bağlıdır.
Bu makale, kullanıcıların içinde bulundukları kart programları, sahip oldukları şeyler veya yerler için elde edebilecekleri tüm avantajları bulan ve uygulayan entegre yüz ödeme işlevine sahip bir sosyal ağ olan LEVELS için önerilen ve uygulanan böyle bir AWS bulut altyapı mimarisini sunacaktır. yaşıyorlar.
Gereksinimler
Müşterinin, önerilen çözümün karşılaması gereken iki temel gereksinimi vardı:
- Güvenlik
- ölçeklenebilirlik
Güvenlik gereksinimi , kullanıcıların verilerini dışarıdan ve aynı zamanda içeriden yetkisiz erişime karşı korumakla ilgiliydi. Ölçeklenebilirlik gereksinimi , altyapının ürün büyümesini destekleme, artan trafiğe ve ara sıra meydana gelen artışlara otomatik olarak uyum sağlama ve ayrıca sunucu arızaları durumunda otomatik yük devretme ve kurtarma, potansiyel hizmet dışı kalma süresini en aza indirme yeteneği ile ilgiliydi.
AWS Güvenlik Kavramlarına Genel Bakış
Kendi AWS Bulut altyapınızı kurmanın başlıca avantajlarından biri, tam ağ izolasyonu ve bulutunuz üzerinde tam denetimdir. Sağlam güvenlik varsayılanları sunan ancak tam, ayrıntılı denetimden yoksun olan, biraz daha basit Hizmet olarak Platform (PaaS) ortamlarını çalıştırmak yerine Hizmet olarak Altyapı (IaaS) yolunu seçmenizin ana nedeni budur. AWS ile kendi bulutunuzu kurun.
LEVELS, AWS danışmanlık hizmetleri için Toptal'a yaklaştıklarında genç bir ürün olmasına rağmen, AWS'yi taahhüt etmeye istekliydiler ve kullanıcı verileri ve mahremiyet konusunda çok endişe duydukları için altyapılarında son teknoloji güvenlik istediklerini biliyorlardı. Bunun da ötesinde, gelecekte kredi kartı işlemlerini desteklemeyi planlıyorlar, bu nedenle bir noktada PCI-DSS uyumluluğunu sağlamaları gerektiğini biliyorlardı.
Sanal Özel Bulut (VPC)
AWS'de güvenlik, AWS kaynaklarınızı barındıran ve AWS Bulut'taki diğer sanal ağlardan mantıksal olarak izole edilmiş özel bir sanal ağ olan kendi Amazon Sanal Özel Bulutunuzun (VPC) oluşturulmasıyla başlar. VPC, kendi IP adres aralığını, tamamen yapılandırılabilir alt ağları, yönlendirme tablolarını, ağ erişim kontrol listelerini ve güvenlik gruplarını (etkili bir şekilde bir güvenlik duvarı) alır.
LEVELS ile üretim ortamımızı geliştirme, test ve KG ortamlarından izole ederek başladık. İlk fikir, her birini, her biri uygulamanın gerektirdiği tüm hizmetleri çalıştıran kendi tamamen yalıtılmış VPC'leri olarak çalıştırmaktı. Biraz düşündükten sonra, üretim dışı üç ortamda bir miktar kaynak paylaşımına izin verebileceğimiz ortaya çıktı, bu da maliyeti bir dereceye kadar düşürdü.
Böylece üretim ortamını tek bir VPC olarak, geliştirme, test ve KG ortamlarını ise başka bir VPC olarak kabul ettik.
İzolasyona VPC Düzeyinde Erişim
İki VPC kurulumu, üretim ortamını ağ düzeyinde kalan üç ortamdan yalıtarak, yanlışlıkla uygulama yanlış yapılandırmasının bu sınırı aşamamasını sağlar. Üretim dışı ortam yapılandırması hatalı bir şekilde veritabanı veya mesaj kuyrukları gibi üretim ortamı kaynaklarına işaret etse bile, bunlara erişmenin bir yolu yoktur.
Aynı VPC'yi paylaşan geliştirme, test ve KG ortamları ile, yanlış yapılandırma durumunda sınır ötesi erişim mümkündür, ancak bu ortamlar test verilerini kullandığından, orada izolasyon olmamasıyla ilgili gerçek bir güvenlik endişesi yoktur.
Varlık Deposu Güvenlik Modeli
Varlıklar, Amazon Simple Storage Service (S3) nesne deposunda depolanır. S3 depolama altyapısı VPC'lerden tamamen bağımsızdır ve güvenlik modeli farklıdır. Depolama, her ortam ve/veya varlık sınıfı için ayrı S3 klasörleri halinde düzenlenir ve her bir klasörü uygun erişim haklarıyla korur.
LEVELS ile çeşitli varlık sınıfları belirlendi: kullanıcı yüklemeleri, LEVELS tarafından üretilen içerik (tanıtım videoları ve benzer içerik), web uygulaması ve UI varlıkları (JS kodu, simgeler, yazı tipleri), uygulama ve altyapı yapılandırması ve sunucu tarafı dağıtım paketleri.
Bunların her biri ayrı bir S3 kovası alır.
Uygulama Sırları Yönetimi
AWS'de, sırları güvende tutmak için tasarlanmış yönetilen anahtar/değer hizmetleri olan şifreli bir AWS Systems Manager Parameter Store veya AWS Secrets Manager vardır (Linux Academy ve 1Strategy'de daha fazla bilgi edinebilirsiniz).
AWS, temel alınan şifreleme anahtarlarını yönetir ve şifreleme/şifre çözme işlemlerini gerçekleştirir. Sırların kendileri, hem altyapı hem de kullanıcılar (sırasıyla sunucular ve geliştiriciler) için anahtar öneklere dayalı olarak uygulanan okuma ve yazma izinleri ilkelerine sahip olabilir.
Sunucu SSH Erişimi
Tam otomatik ve değişmez bir ortamda sunuculara SSH erişimi hiç gerekmemelidir. Günlükler çıkarılabilir ve özel günlük hizmetlerine gönderilebilir, izleme ayrıca özel bir izleme hizmetine aktarılır. Yine de, yapılandırma denetimi ve hata ayıklama için ara sıra SSH erişimine ihtiyaç duyulabilir.
Sunucuların saldırı yüzeyini sınırlamak için SSH bağlantı noktası genel ağa maruz kalmaz. Sunuculara, harici SSH erişimine izin veren ve ayrıca güvenlik duvarında yalnızca izin verilen IP adresleri aralığının beyaz listeye alınmasıyla korunan özel bir makine olan bir kale ana bilgisayarı aracılığıyla erişilir. Erişim, kullanıcıların genel SSH anahtarlarını uygun kutulara dağıtarak kontrol edilir (parola oturum açma işlemleri devre dışı bırakılır). Böyle bir kurulum, kötü niyetli saldırganların geçmesi için oldukça esnek bir kapı sunar.
Veritabanı Erişimi
Yukarıda özetlenen aynı ilkeler veritabanı sunucuları için de geçerlidir. Bu kesinlikle önerilen bir uygulama olmamasına ve bu tür erişimin, sunucuların SSH erişiminin korunduğu şekilde korunmasına ihtiyaç duyulmasına rağmen, zaman zaman doğrudan veritabanındaki verileri bağlama ve değiştirme ihtiyacı da olabilir.
SSH tünelleme ile aynı kale ana bilgisayar altyapısını kullanan benzer bir yaklaşım kullanılabilir. Bir çift SSH tüneli gereklidir, biri kale ana bilgisayarına ve bunun üzerinden bir diğeri veritabanına erişimi olan sunucuya (bastion ana bilgisayarının veritabanı sunucusu erişimi yoktur). Bu ikinci tünel aracılığıyla, kullanıcının istemci makinesinden veritabanı sunucusuna bir bağlantı artık mevcuttur.
AWS Ölçeklenebilirlik Kavramlarına Genel Bakış
Yalnızca sunucular hakkında konuştuğumuzda, ölçeklenebilirlik AWS'den daha basit platformlarla oldukça kolay bir şekilde elde edilir. Ana dezavantajı, belirli gereksinimlerin platformun harici hizmetleri tarafından karşılanması gerekebilmesidir; bu, verilerin kamu ağı boyunca seyahat etmesi ve güvenlik sınırlarını aşması anlamına gelir. AWS'ye bağlı kalınarak, tüm veriler gizli tutulurken ölçeklenebilir, esnek ve hataya dayanıklı bir altyapı elde etmek için ölçeklenebilirliğin tasarlanması gerekir.
AWS ile ölçeklenebilirliğe en iyi yaklaşım, platformu kullanan binlerce istemcide savaşta test edilmiş izleme ve otomasyon ile yönetilen AWS hizmetlerinden yararlanmaktır. Karışıma veri yedeklemeleri ve kurtarma mekanizmaları ekleyin ve yalnızca platformun kendisine güvenerek birçok endişeyi ortadan kaldırın.
Tüm bunların boşaltılması, daha küçük bir operasyon ekibine izin vererek, platform tarafından yönetilen hizmetlerin yüksek maliyetini bir şekilde dengeler. LEVELS ekibi, mümkün olan her yerde bu yolu seçmekten mutluydu.
Amazon Elastik Bilgi İşlem Bulutu (EC2)
EC2 bulut sunucularını çalıştıran kanıtlanmış bir ortama güvenmek, çalışan kapsayıcıların ek yükü ve karmaşıklığı veya sunucusuz bilgi işlemin hala çok genç ve hızla değişen mimari kavramları ile karşılaştırıldığında hala oldukça makul bir yaklaşımdır.
EC2 bulut sunucularının sağlanmasının tamamen otomatikleştirilmesi gerekir. Otomasyon, farklı sunucu sınıfları için özel AMI'ler ve mevcut trafiğe göre filoda uygun sayıda çalışan sunucu örneği tutarak dinamik sunucu filolarını çalıştırmaya özen gösteren Otomatik Ölçeklendirme Grupları aracılığıyla sağlanır.
Ek olarak, otomatik ölçeklendirme özelliği, çalıştırılacak EC2 bulut sunucularının sayısındaki alt ve üst sınırın ayarlanmasına olanak tanır. Alt sınır, hata toleransına yardımcı olur ve örnek arızaları durumunda kesinti süresini potansiyel olarak ortadan kaldırır. Üst sınır, maliyetleri kontrol altında tutar ve beklenmedik aşırı koşullar durumunda bir miktar kesinti riskine izin verir. Otomatik ölçeklendirme, daha sonra bu sınırlar içindeki örnek sayısını dinamik olarak ölçekler.
Amazon İlişkisel Veritabanı Hizmeti (RDS)
Ekip zaten MySQL için Amazon RDS üzerinde çalışıyor, ancak uygun yedekleme, hata toleransı ve güvenlik stratejisi henüz geliştirilmedi. İlk yinelemede, veritabanı örneği, otomatik yük devretmeyi destekleyen bir ana ve bir okuma kopyası olarak yapılandırılan her VPC'de iki örnekli bir kümeye yükseltildi.
Sonraki yinelemede, MySQL sürüm 5.7 motorunun kullanılabilirliği ile altyapı, Amazon Aurora MySQL hizmetine yükseltildi. Tam olarak yönetilmesine rağmen, Aurora otomatik olarak ölçeklenen bir çözüm değildir. Kapasite planlaması sorununu ortadan kaldırarak otomatik depolama ölçeklendirme sunar. Ancak bir çözüm mimarının yine de bilgi işlem örneği boyutunu seçmesi gerekir.
Ölçeklendirmeden kaynaklanan arıza süresi önlenemez, ancak otomatik iyileştirme özelliği sayesinde minimuma indirilebilir. Aurora, daha iyi çoğaltma yetenekleri sayesinde sorunsuz bir yük devretme işlevi sunar. Ölçekleme, istenen bilgi işlem gücüne sahip bir okuma replikası oluşturularak ve ardından bu örneğe yük devretme yürütülerek yürütülür. Diğer tüm okuma kopyaları daha sonra kümeden çıkarılır, yeniden boyutlandırılır ve kümeye geri getirilir. Biraz manuel hokkabazlık gerektirir, ancak yapılabilirden daha fazlasıdır.
Yeni Aurora Sunucusuz teklifi, gelecekte kesinlikle araştırmaya değer bir özellik olan bilgi işlem kaynaklarının bir düzeyde otomatik olarak ölçeklenmesini de sağlar.
Yönetilen AWS Hizmetleri
Bu iki bileşenin yanı sıra sistemin geri kalanı, tam olarak yönetilen AWS hizmetlerinin otomatik ölçeklendirme mekanizmalarından yararlanır. Bunlar Elastic Load Balancing (ELB), Amazon Simple Queue Service (SQS), Amazon S3 nesne depolama, AWS Lambda işlevleri ve mimarın özel bir ölçeklendirme çabasına gerek duymadığı Amazon Simple Notification Service (SNS).

Değişken ve Değişmez Altyapı
Sunucu altyapısını ele almak için iki yaklaşımı tanıyoruz - sunucuların yerinde kurulduğu ve sürekli olarak güncellendiği ve değiştirildiği değiştirilebilir bir altyapı ; ve sunucuların sağlandıktan sonra asla değiştirilmediği ve herhangi bir yapılandırma değişikliğinin veya sunucu güncellemelerinin, eski sunucuların yerine ortak bir görüntüden veya bir kurulum komut dosyasından yeni sunucular sağlanarak gerçekleştirildiği değişmez bir altyapı.
LEVELS ile seçim, yerinde yükseltmeler, yapılandırma değişiklikleri veya yönetim eylemleri olmaksızın değişmez bir altyapı çalıştırmaktır. Tek istisna, yerinde gerçekleşen uygulama dağıtımlarıdır.
Değişebilir ve değişmez altyapı hakkında daha fazla bilgiyi HashiCorp'un blogunda bulabilirsiniz.
Mimariye Genel Bakış
Teknik olarak, LEVELS bir mobil uygulama ve REST API arka ucuna ve bazı arka plan hizmetlerine sahip bir web uygulamasıdır - günümüzde oldukça tipik bir uygulama. Bununla ilgili olarak, aşağıdaki altyapı önerildi ve yapılandırıldı:
Sanal Ağ İzolasyonu - Amazon VPC
Diyagram, VPC'sindeki bir ortamın yapısını görselleştirir. Diğer ortamlar da aynı yapıyı takip eder (Application Load Balancer (ALB) ve Amazon Aurora kümesinin VPC'lerinde üretim dışı ortamlar arasında paylaşıldığı ancak ağ kurulumu tamamen aynıdır).
VPC, hata toleransı için bir AWS bölgesindeki dört kullanılabilirlik bölgesinde yapılandırılır. Ağ Erişim Kontrol Listelerine sahip Alt Ağlar ve Güvenlik Grupları, güvenlik ve erişim kontrolü gereksinimlerinin karşılanmasına olanak tanır.
Ek hata toleransı için altyapıyı birden çok AWS Bölgesine yaymak, işin ve ürününün erken bir aşamasında çok karmaşık ve gereksiz olurdu, ancak gelecekte bir seçenektir.
Bilgi işlem
LEVELS, arka planda gerçekleşen uygulama mantığı için bazı arka plan çalışanları ile geleneksel bir REST API çalıştırır. Bunların her ikisi de, Otomatik Ölçeklendirme Grupları aracılığıyla tamamen otomatikleştirilmiş, sade EC2 bulut sunucularından oluşan dinamik filolar olarak çalışır. Amazon SQS yönetilen hizmeti, kendi MQ sunucunuzu çalıştırma, bakımını yapma ve ölçeklendirme gereksinimini ortadan kaldırarak arka plan görevleri (işler) dağıtımı için kullanılır.
Görüntü işleme gibi, uygulamanın geri kalanıyla paylaşılan hiçbir iş mantığı olmayan bazı yardımcı görevler de vardır. Lambda'lar süresiz olarak yatay olarak ölçeklenebilir olduğundan ve sunucu çalışanlarına kıyasla benzersiz paralel işleme sunduğundan, bu tür görevler AWS Lambda'da son derece iyi çalışır.
Yük Dengeleme, Otomatik Ölçeklendirme ve Hata Toleransı
Yük dengeleme, Nginx veya HAProxy aracılığıyla manuel olarak gerçekleştirilebilir, ancak Amazon Elastic Load Balancing'in (ELB) seçilmesi, yük dengeleme altyapısının kendinden otomatik olarak ölçeklenebilir, yüksek düzeyde kullanılabilir ve hataya dayanıklı olmasının avantajını sağlar.
ELB'nin Application Load Balancer (ALB) tadı kullanılır ve yük dengeleyicide bulunan HTTP katman yönlendirmesinden yararlanılır. Filoya eklenen yeni bulut sunucuları, AWS platformunun mekanizmaları aracılığıyla ALB'ye otomatik olarak kaydedilir. ALB, bulut sunucularının kullanılabilirliğini de her zaman izler. Sağlıksız örneklerin kaydını silme ve sonlandırma gücüne sahiptir, bunları yenileriyle değiştirmek için Otomatik Ölçeklendirmeyi tetikler. İkisi arasındaki bu etkileşim sayesinde, EC2 filosunun otomatik iyileşmesi sağlanır.
Uygulama Veri Deposu
Uygulama veri deposu, bir ana bulut sunucusundan ve bir dizi okuma-replika örneğinden oluşan bir Amazon Aurora MySQL kümesidir . Ana örnek hatası durumunda, okuma replikalarından biri otomatik olarak yeni bir ana örneğe yükseltilir. Bu şekilde yapılandırıldığında, istenen hata toleransı gereksinimini karşılar.
Okuma kopyaları, adlarından da anlaşılacağı gibi, veri okuma işlemleri için veritabanı kümesi yükünü dağıtmak için de kullanılabilir.
Aurora ile veritabanı depolaması 10 GB'lik artışlarla otomatik olarak ölçeklenir ve yedeklemeler de tamamen AWS tarafından yönetilir ve varsayılan olarak belirli bir zamanda bir geri yükleme sunar. Tüm bunlar, ihtiyaç duyulduğunda veritabanı bilgi işlem gücünü artırmak dışında, veritabanı yönetim yükünü neredeyse sıfıra indirir - sorunsuz çalışması için ödemeye değer bir hizmet.
Varlıkları Depolama ve Sunma
LEVELS, depolanması gereken kullanıcıların yüklediği içeriği kabul eder. Amazon S3 nesne depolama, tahmin edilebileceği gibi, bu görevi yerine getirecek hizmettir. Ayrıca, istemci uygulamasında kullanıma sunulması gereken uygulama varlıkları (UI öğeleri - resimler, simgeler, yazı tipleri) vardır, böylece bunlar da S3'te depolanır. Yüklenen verilerin dahili depolama replikasyonu aracılığıyla otomatikleştirilmiş yedeklerini sunan S3, varsayılan olarak veri dayanıklılığı sağlar.
Kullanıcıların yüklediği resimler çeşitli boyut ve ağırlıktadır, genellikle doğrudan ve fazla kilolu olarak sunulmak için gereksiz yere büyüktür ve mobil bağlantılara yük getirir. Farklı boyutlarda çeşitli varyasyonlar üretmek, her bir kullanım durumu için daha optimize edilmiş içerik sunulmasını sağlayacaktır. AWS Lambda , bu görev için ve yüklenen görüntülerin orijinallerinin bir kopyasını her ihtimale karşı ayrı bir yedekleme kovasına yapmak için kullanılır.
Son olarak, tarayıcıda çalışan bir web uygulaması aynı zamanda bir dizi statik varlıktır - Sürekli Entegrasyon yapı altyapısı JavaScript kodunu derler ve her yapıyı S3'te de depolar.
Tüm bu varlıklar S3'te güvenli bir şekilde depolandıktan sonra, S3 genel bir HTTP arabirimi sağladığından veya Amazon CloudFront CDN aracılığıyla doğrudan sunulabilir. CloudFront, varlıkları coğrafi olarak dağıtarak son kullanıcılara yönelik gecikmeyi azaltır ve ayrıca statik varlıklara hizmet etmek için HTTPS desteğini etkinleştirir.
Altyapı Sağlama ve Yönetimi
AWS altyapısının sağlanması, ağ iletişimi, AWS tarafından yönetilen kaynaklar ve hizmetler ile yalın EC2 bilgi işlem kaynaklarının bir birleşimidir. Yönetilen AWS hizmetleri iyi yönetilir. Uygun güvenliği sağlamak ve uygulamak dışında bunlarla yapacak pek bir şey yok, EC2 bilgi işlem kaynaklarıyla ise yapılandırma ve otomasyonu kendi başımıza halletmemiz gerekiyor.
Takım
Web tabanlı AWS Konsolu, "lego tuğlaları benzeri" AWS altyapısını yönetmeyi önemsiz olmaktan çıkarır ve herhangi bir manuel çalışma gibi hataya açık hale getirir. Bu nedenle, bu işi otomatikleştirmek için özel bir araç kullanmak son derece arzu edilir.
Böyle bir araç, AWS tarafından geliştirilen ve sürdürülen AWS CloudFormation'dır . Bir diğeri HashiCorp'un Terraform'udur - birden fazla platform sağlayıcısı sunarak biraz daha esnek bir seçim, ancak burada esas olarak Terraform'un değişmez altyapı yaklaşımı felsefesi nedeniyle ilginç. LEVELS altyapısının çalışma şekliyle uyumlu olarak, Terraform, temel AMI görüntülerini sağlamak için Packer ile birlikte mükemmel bir uyum sağladı.
Altyapı Dokümantasyonu
Otomasyon aracının ek bir avantajı da, er ya da geç güncelliğini yitirecek ayrıntılı altyapı belgeleri gerektirmemesidir. Sağlama aracının “Kod Olarak Altyapı” (IaC) paradigması, gerçek altyapıyla her zaman güncel olma avantajıyla dokümantasyon olarak adlandırılır. Üst düzey bir genel bakışa sahip olmak, değiştirilme olasılığı daha düşüktür ve nihai değişikliklerle bakımı nispeten kolay, yanda belgelenmiş olması yeterlidir.
Son düşünceler
Önerilen AWS Bulut altyapısı, gelecekteki ürün büyümesini çoğunlukla otomatik olarak barındırabilen ölçeklenebilir bir çözümdür. Neredeyse iki yıl sonra, 7/24 görev başında özel bir sistem operasyon ekibi olmadan bulut otomasyonuna güvenerek operasyon maliyetlerini düşük tutmayı başarıyor.
Güvenlikle ilgili olarak, AWS Cloud, tüm verileri ve tüm kaynakları aynı bulut içinde özel bir ağda tutar. Genel ağda seyahat etmek için hiçbir zaman gizli veri gerekmez. Harici erişim, güvenilir destek sistemlerine (CI/CD, harici izleme veya uyarı verme) ince ayrıntılı izinlerle verilir ve erişimin kapsamını yalnızca tüm sistemdeki rolleri için gereken kaynaklarla sınırlar.
Doğru şekilde yapılandırılan ve kurulan böyle bir sistem, esnek, dayanıklı, güvenli ve ürün büyümesi için ölçeklendirme veya PCI-DSS uyumluluğu gibi gelişmiş güvenliğin uygulanmasıyla ilgili gelecekteki tüm gereksinimleri karşılamaya hazırdır.
Tekliflerinin kapsadığı ortak kullanım kalıplarına uyduğunuz sürece işe yarayan Heroku veya benzeri platformların sunduğu ürünleştirilmiş tekliflerden daha ucuz olması gerekmez. AWS'yi seçerek altyapınız üzerinde daha fazla kontrol, sunulan AWS hizmetleri yelpazesiyle ek bir esneklik düzeyi ve tüm altyapının ince ayar yeteneğiyle özelleştirilmiş yapılandırma elde edersiniz.
Toptal Mühendislik Blogunda Daha Fazla Okuma:
- Ödevini Yap: 7 AWS Sertifikalı Çözüm Mimarı Sınavı İpuçları
- Terraform vs. CloudFormation: Kesin Kılavuz
- AWS SSM Kullanarak SSH Günlüğü ve Oturum Yönetimi
- TypeScript ve Jest Desteğiyle Çalışmak: Bir AWS SAM Eğitimi