AWS Lambda'nın ayrıntılı analizi

Makalenin çevirisi ders öğrencilerine özel olarak hazırlanmıştır. "Bulut hizmetleri". Bu yönde gelişmekle ilgileniyor musunuz? Egor Zuev'in ustalık sınıfını izleyin (InBit'te TeamLead) "AWS EC2 hizmeti" ve bir sonraki kurs grubuna katılın: 26 Eylül'de başlıyor.

AWS Lambda'nın ayrıntılı analizi

Ölçeklenebilirlik, performans, tasarruf ve ayda milyonlarca, hatta trilyonlarca isteği işleme yeteneği nedeniyle daha fazla kişi AWS Lambda'ya geçiş yapıyor. Bunu yapmak için hizmetin üzerinde çalıştığı altyapıyı yönetmeniz gerekmez. Otomatik ölçeklendirme, saniyede binlerce eş zamanlı isteği karşılamanıza olanak tanır. AWS Lambda'nın haklı olarak en popüler AWS hizmetlerinden biri olarak adlandırılabileceğini düşünüyorum.

AWS Lambda

AWS Lambda, sunucuları tedarik etmeden veya yönetmeden kod çalıştırmanıza ve özel mantık kullanarak diğer AWS hizmetlerini genişletmenize olanak tanıyan, olay odaklı sunucusuz bir bilgi işlem hizmetidir. Lambda, Amazon API Gateway aracılığıyla HTTP istekleri, Amazon S3 klasörlerindeki veya Amazon DynamoDB tablolarındaki verilerde yapılan değişiklikler gibi çeşitli olaylara (tetikleyiciler olarak adlandırılır) otomatik olarak yanıt verir; veya AWS SDK'yı ve AWS Step Functions'taki durum geçişlerini kullanarak kodunuzu API çağrıları aracılığıyla çalıştırabilirsiniz.

Lambda, kodu yüksek düzeyde kullanılabilir bir bilgi işlem altyapısı üzerinde çalıştırır ve sunucu ve işletim sistemi bakımı, kaynak sağlama, otomatik ölçeklendirme, kod izleme ve günlüğe kaydetme dahil olmak üzere temel platformun yönetilmesinden tamamen sorumludur. Yani, kodunuzu yüklemeniz ve nasıl ve ne zaman çalıştırılacağını yapılandırmanız yeterlidir. Buna karşılık hizmet, başlatılmasıyla ilgilenecek ve uygulamanızın yüksek düzeyde kullanılabilirliğini sağlayacaktır.

Lambda'ya ne zaman geçilmeli?

AWS Lambda, kodunuzun dili ve çalışma zamanı hizmet tarafından desteklendiği sürece çeşitli kullanım örneklerine uygun, kullanışlı bir bilgi işlem platformudur. Sunucu bakımı, tedariki ve ölçeklendirme işlemlerini makul bir maliyetle dış kaynak olarak kullanırken kodunuza ve iş mantığınıza odaklanmak istiyorsanız AWS Lambda kesinlikle gidilecek yoldur.

Lambda, programlama arayüzleri oluşturmak için idealdir ve API Gateway ile birlikte kullanıldığında maliyetleri önemli ölçüde azaltabilir ve pazara daha hızlı ulaşabilirsiniz. Sunucusuz bir mimariyi düzenlemek için Lambda işlevlerini ve seçeneklerini kullanmanın farklı yolları vardır; herkes amacına göre uygun olanı seçebilir.

Lambda çok çeşitli görevleri gerçekleştirmenize olanak tanır. Böylece CloudWatch desteği sayesinde ertelenmiş görevler oluşturabilir ve bireysel süreçleri otomatikleştirebilirsiniz. Hizmetin kullanımının niteliği ve yoğunluğu konusunda herhangi bir kısıtlama yoktur (bellek tüketimi ve zaman dikkate alınır) ve hiçbir şey sizi Lambda'ya dayalı tam teşekküllü bir mikro hizmet üzerinde sistematik olarak çalışmaktan alıkoyamaz.

Burada sürekli çalışmayan, hizmet odaklı eylemler oluşturabilirsiniz. Tipik bir örnek görüntü ölçeklendirmedir. Dağıtılmış sistemler durumunda bile Lambda işlevleri geçerliliğini korur.

Dolayısıyla, bilgi işlem kaynaklarının tahsis edilmesi ve yönetilmesiyle uğraşmak istemiyorsanız AWS Lambda'yı deneyin; Ağır, kaynak yoğunluklu hesaplamalara ihtiyacınız yoksa AWS Lambda'yı da deneyin; kodunuz periyodik olarak çalışıyorsa doğru, AWS Lambda'yı denemelisiniz.

güvenlik

Şu ana kadar güvenlikle ilgili herhangi bir şikayet yok. Öte yandan, bu modelin birçok dahili süreci ve uygulama özelliği AWS Lambda yönetilen çalışma zamanı ortamı kullanıcısından gizlendiğinden, bulut güvenliğine ilişkin genel kabul görmüş bazı kurallar geçerliliğini yitirir.

Çoğu AWS hizmeti gibi Lambda da AWS ile müşteri arasında paylaşılan bir güvenlik ve uyumluluk temelinde sağlanır. AWS, ana işletim sistemi ve sanallaştırma katmanından altyapı varlıklarının fiziksel güvenliğine kadar hizmet bileşenlerinin bakımı, yönetimi ve izlenmesi görevlerini üstlendiğinden, bu ilke istemci üzerindeki operasyonel yükü azaltır.

Özellikle AWS Lambda'dan bahsedersek AWS, temel altyapının, ilgili temel hizmetlerin, işletim sisteminin ve uygulama platformunun yönetilmesinden sorumludur. Müşteri, kodunun güvenliğinden, gizli verilerin depolanmasından, bunlara erişimin kontrolünden ve ayrıca kullanılan işlevlerin sınırları dahilinde Lambda hizmetine ve kaynaklarına (Kimlik ve Erişim Yönetimi, IAM) sorumludur.

Aşağıdaki diyagramda AWS Lambda için geçerli olan paylaşılan sorumluluk modeli gösterilmektedir. AWS Sorumluluğu turuncu, Müşteri Sorumluluğu ise mavidir. Gördüğünüz gibi AWS, hizmette dağıtılan uygulamalara ilişkin daha fazla sorumluluk alıyor.

AWS Lambda'nın ayrıntılı analizi

AWS Lambda için Geçerli Ortak Sorumluluk Modeli

Lambda çalışma zamanı

Lambda'nın temel avantajı, hizmetin sizin adınıza bir işlevi yerine getirerek gerekli kaynakları tahsis etmesidir. Sistem yönetimi konusunda zaman ve emek harcamaktan kurtulabilir, iş mantığına ve kodlamaya odaklanabilirsiniz.

Lambda servisi iki düzleme ayrılmıştır. Birincisi kontrol düzlemidir. Wikipedia'ya göre kontrol düzlemi, ağın sinyal trafiğini ve yönlendirmeyi taşımaktan sorumlu kısmıdır. İş yüklerinin sağlanması, hizmet verilmesi ve dağıtılmasıyla ilgili küresel kararları veren birincil bileşendir. Ayrıca kontrol düzlemi, trafiğin yönlendirilmesinden ve yönetilmesinden sorumlu olan çözüm sağlayıcının ağ topolojisi olarak görev yapar.

İkinci düzlem veri düzlemidir. Kontrol düzlemi gibi onun da kendi görevleri vardır. Kontrol düzlemi, işlevlerin (CreateFunction, UpdateFunctionCode) yönetilmesi için API'ler sağlar ve Lambda'nın diğer AWS hizmetleriyle nasıl iletişim kurduğunu kontrol eder. Veri düzlemi, Lambda işlevlerini çalıştıran Invoke API'sini kontrol eder. Bir işlev çağrıldıktan sonra, kontrol düzlemi o işlev için önceden hazırlanmış mevcut bir çalışma zamanı ortamını tahsis eder veya seçer ve ardından içindeki kodu çalıştırır.

AWS Lambda, ilgili çalışma zamanı ortamları aracılığıyla Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 ve diğerleri dahil olmak üzere çeşitli programlama dillerini destekler. AWS bu ortamları düzenli olarak günceller, güvenlik yamaları dağıtır ve bu ortamlarda diğer bakım faaliyetlerini gerçekleştirir. Lambda, uygun çalışma zamanını kendiniz uygulamanız koşuluyla diğer dilleri de kullanmanıza olanak tanır. Ve sonra güvenliğini izlemek de dahil olmak üzere bakımıyla ilgilenmeniz gerekecek.

Her şey nasıl çalışıyor ve hizmet işlevlerinizi nasıl yerine getirecek?

Her işlev, yalnızca o işlevin ömrü boyunca var olan ve daha sonra yok edilen bir veya daha fazla özel ortamda çalışır. Her ortam aynı anda yalnızca bir çağrı yapar ancak aynı işleve birden fazla seri çağrı olması durumunda yeniden kullanılır. Tüm çalışma zamanı ortamları, mikroVM olarak adlandırılan donanım sanallaştırmalı sanal makinelerde çalışır. Her microVM, belirli bir AWS hesabına atanır ve ortamlar tarafından bu hesapta farklı işlevleri gerçekleştirmek için yeniden kullanılabilir. MicroVM'ler, AWS'nin sahibi olduğu ve işlettiği Lambda Worker donanım platformunun yapı blokları halinde paketlenmiştir. Aynı çalışma zamanı farklı işlevler tarafından kullanılamaz ve mikroVM'ler farklı AWS hesaplarına özgü değildir.

AWS Lambda'nın ayrıntılı analizi

AWS Lambda Yalıtım Modeli

Çalışma zamanı ortamlarının izolasyonu çeşitli mekanizmalar kullanılarak uygulanır. Her ortamın en üst düzeyinde aşağıdaki bileşenlerin ayrı kopyaları bulunur:

  • İşlev kodu
  • İşlev için seçilen herhangi bir Lambda katmanı
  • İşlev yürütme ortamı
  • Amazon Linux'a dayalı minimum kullanıcı alanı

Farklı yürütme ortamlarını izole etmek için aşağıdaki mekanizmalar kullanılır:

  • cgroups - her çalışma zamanı ortamı için CPU, bellek, depolama ve ağ kaynaklarına erişimi sınırlayın;
  • ad alanları - süreç kimliklerini, kullanıcı kimliklerini, ağ arayüzlerini ve Linux çekirdeği tarafından yönetilen diğer kaynakları gruplandırma. Her çalışma zamanı kendi ad alanında çalışır;
  • seccomp-bpf - çalışma zamanında kullanılabilecek sistem çağrılarını kısıtlar;
  • iptables ve yönlendirme tabloları - yürütme ortamlarının birbirinden izolasyonu;
  • chroot - temel dosya sistemine sınırlı erişim sağlar.

AWS'ye özel izolasyon teknolojileriyle birleştirilen bu mekanizmalar, güvenilir çalışma zamanı ayrımı sağlar. Bu şekilde yalıtılmış ortamlar, diğer ortamlardaki verilere erişemez veya bunları değiştiremez.

Aynı AWS hesabının birden fazla çalışma zamanı tek bir mikroVM üzerinde çalışabilse de mikroVM'ler hiçbir durumda farklı AWS hesapları arasında paylaşılamaz. AWS Lambda, mikroVM'leri izole etmek için yalnızca iki mekanizma kullanır: EC2 bulut sunucuları ve Firecracker. Lambda'da EC2 bulut sunucularına dayalı konuk izolasyonu 2015'ten bu yana kullanılıyor. Firecracker, AWS tarafından sunucusuz iş yükleri için özel olarak tasarlanmış ve 2018'de tanıtılan yeni bir açık kaynaklı hipervizördür. MikroVM'leri çalıştıran fiziksel donanım, farklı hesaplardaki iş yükleri arasında paylaşılır.

Ortamları ve işlem durumlarını kaydetme

Lambda çalışma zamanları farklı işlevlere özgü olmasına rağmen, aynı işlevi tekrar tekrar çağırabilirler; bu, çalışma zamanının yok edilmeden önce birkaç saat boyunca hayatta kalabileceği anlamına gelir.

Her Lambda çalışma zamanı ayrıca /tmp dizini aracılığıyla erişilebilen yazılabilir bir dosya sistemine sahiptir. İçeriğine diğer çalışma zamanlarından erişilemez. Süreç durumunun kalıcılığı söz konusu olduğunda, /tmp'ye yazılan dosyalar çalışma zamanı ortamının tüm yaşam döngüsü boyunca mevcuttur. Bu, birden fazla çağrının sonuçlarının toplanmasına olanak tanır ve bu, özellikle makine öğrenimi modellerinin yüklenmesi gibi pahalı işlemler için kullanışlıdır.

Çağrı veri aktarımı

Invoke API iki modda kullanılabilir: olay modu ve istek-yanıt modu. Olay modunda, çağrı daha sonra yürütülmek üzere kuyruğa eklenir. İstek-yanıt modunda, işlev sağlanan yük ile anında çağrılır ve ardından yanıt döndürülür. Her iki durumda da işlev Lambda ortamında ancak farklı yük yollarıyla çalışır.

İstek-yanıt çağrıları sırasında yük, AWS API Gateway veya AWS SDK gibi bir istek işleme API'sinden (API Arayanı) yük dengeleyiciye ve ardından Lambda çağrı hizmetine (Invoke Service) akar. İkincisi, işlevin yürütülmesi için uygun ortamı belirler ve çağrıyı tamamlamak için yükü oraya iletir. Yük dengeleyici, İnternet üzerinden TLS korumalı trafiği alır. Yük dengeleyiciden sonra Lambda hizmeti içindeki trafik, belirli bir AWS bölgesindeki dahili bir VPC'den geçer.

AWS Lambda'nın ayrıntılı analizi

AWS Lambda Çağrı İşleme Modeli: İstek-Yanıt Modu

Olay çağrıları hemen yapılabilir veya bir kuyruğa eklenebilir. Bazı durumlarda kuyruk, çağrıları dahili bir yoklayıcı süreci aracılığıyla Lambda çağrı karşılama hizmetine ileten Amazon SQS (Amazon Simple Queue Service) kullanılarak uygulanır. İletilen trafik TLS tarafından korunur ve Amazon SQS'te depolanan veriler için ek bir şifreleme yoktur.

Olay çağrıları yanıtları döndürmez; Lambda Çalışanı herhangi bir yanıt bilgisini yok sayar. Amazon S3, Amazon SNS, CloudWatch ve diğer kaynaklardan gelen olaya dayalı çağrılar Lambda tarafından olay modunda işlenir. Amazon Kinesis ve DynamoDB akışlarından, SQS kuyruklarından, Application Load Balancer ve API Gateway çağrılarından gelen çağrılar, istek-yanıt biçiminde işlenir.

İzleme

Aşağıdakiler de dahil olmak üzere çeşitli AWS mekanizmalarını ve hizmetlerini kullanarak Lambda işlevlerini izleyebilir ve denetleyebilirsiniz.

Amazon Bulut İzleme
İstek sayısı, istek süresi ve başarısız olan istek sayısı gibi çeşitli istatistikleri toplar.

Amazon CloudTrail
AWS altyapınızla ilişkili hesap etkinliği bilgilerini günlüğe kaydetmenize, sürekli olarak izlemenize ve korumanıza olanak tanır. AWS Yönetim Konsolu, AWS SDK, komut satırı araçları ve diğer AWS hizmetleri kullanılarak gerçekleştirilen eylemlerin eksiksiz bir geçmişine sahip olacaksınız.

AWS Röntgeni
Uygulamanızın dahili bileşenlerinin bir haritasına dayalı olarak uygulamanızdaki istek işlemenin tüm aşamalarına ilişkin tam görünürlük sağlar. Geliştirme sırasında ve üretim ortamlarında uygulamaları analiz etmenize olanak tanır.

AWS Yapılandırması
Lambda işlevi yapılandırmasında (silme dahil) ve çalışma zamanlarında, etiketlerde, işleyici adlarında, kod boyutunda, bellek ayırmada, zaman aşımı ayarlarında ve eşzamanlılık ayarlarında yapılan değişikliklerin yanı sıra Lambda IAM yürütme rolü, alt ağ oluşturma ve güvenlik grubu bağlantılarında yapılan değişiklikleri takip edebileceksiniz. .

Sonuç

AWS Lambda, güvenli ve ölçeklenebilir uygulamalar oluşturmaya yönelik güçlü bir araç seti sunar. AWS Lambda'daki güvenlik ve uyumluluk uygulamalarının çoğu, istisnalar olsa da diğer AWS hizmetleriyle aynıdır. Mart 2019 itibarıyla Lambda, SOC 1, SOC 2, SOC 3, PCI DSS, Sağlık Sigortası Taşınabilirlik ve Sorumluluk Yasası (HIPAA) uyumluluğu ve diğer düzenlemelerle uyumludur. Bu nedenle, bir sonraki uygulamanızı hayata geçirmeyi düşündüğünüzde AWS Lambda hizmetini göz önünde bulundurun; bu, göreviniz için en uygun seçenek olabilir.

Kaynak: habr.com

Yorum ekle