Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building .NET Core 3.1 Serverless Application in AWS

Building .NET Core 3.1 Serverless Application in AWS

Presentation for AWS serverless application using AWS CDK ( Cloud Development Kit ), Amazon S3 ( Simple Storage Service ) , Amazon DynamoDB , AWS Lambda , AWS SNS ( Simple Notification Service ) , AWS API Gateway in .Net Core.

Serkan Bingöl

May 06, 2020
Tweet

More Decks by Serkan Bingöl

Other Decks in Programming

Transcript

  1. Moderator Bilgileri Serkan BİNGÖL Program Manager AWS Certified Solution Architect,

    MCSD, MCT BilgeAdam Hesapları https:/ /www.bilgeadam.com/ https:/ /www.linkedin.com/company/bilge-adam/ https:/ /twitter.com/bilgeadam https:/ /medium.com/batech Kişisel Hesaplar [email protected] https:/ /www.linkedin.com/in/sbingol/ https:/ /github.com/serkanbingol https:/ /medium.com/@serkanbingoll
  2. Demo için kullanılan AWS Hizmetleri  AWS Serverless genel bilgilendirme

     AWS CDK ( Cloud Development Kit )  Amazon S3 ( Simple Storage Service )  Amazon DynamoDB  AWS Lambda  AWS SNS ( Simple Notification Service )  AWS API Gateway
  3. Decoupling ve Serverless Kavramları Tightly Coupled : Bir sistemin içindeki

    bileşenlerin birbirine sıkı sıkıya bağlı olduğu durumdur.Geleneksel altyapılar ile tasarlanmış sistem içindeki sunucular birbiri ile doğrudan haberleşmek durumunda olurlar. Herhangi bir sunucuda oluşabilecek bir aksama tüm sistemin işlemez haline gelmesine sebebiyet verecektir. Ölçeklendirilebilir mimariler adına bu bir sorun teşkil eder. Yeni bir uygulama sunucusu eklenmek istediğinde tek tek bu sıkı bağlantılar içine eklenmesi gerekecektir. Ve giderek kompleks yapılar oluşacaktır. Decoupling : Bir sistem içindeki bağımlılıkların olabildiğince ayrık tutulması yaklaşımıdır. Bu sayede herhangi bir bileşen çöktüğü takdirde sistem kalan işlevlerine yerine getirmeye devam edebilecektir. Ya da yeni bir bileşen eklenmesi durumunda sistemin çalışmasını etkilemeden yeni özellikler ilgili sisteme kazandırılabilecektir. Serverless Computing : Uygulamaların sunucu yönetimine ihtiyaç duymadan geliştirilmesi ve çalıştırılması yaklaşımıdır. FaaS – Functions as a Service kavramı ile birlikte event driven mimari ile geliştirilen uygulamaların sunucu yönetimi , ölçeklendirilebilirlik ,yük dağıtımı gibi konuları dert etmeden sadece ilgili kodun düzgün çalışmasına odaklanmasıdır.
  4. AWS CDK Cloud Development Kit  AWS içinde IaC Infrastructure

    as Code yapısı için 3 bileşenden söz edebilmekteyiz.  AWS SDK  CloudFormation  AWS CDK AWS CDK  AWS SDK geliştiriciler için tutarlı ve tanıdık bir dizi kitaplık sağlayarak AWS Hizmetlerinin kullanımını basitleştirir. Tüm AWS SDK'ları; kimlik bilgisi yönetimi, yeniden denemeler, verileri sıraya koyma ve serileştirme gibi API yaşam döngüsüyle ilgili dikkate alınması gereken unsurları destekler.  AWS CloudFormation basit bir metin dosyasını kullanarak tüm bölgelerdeki ve hesaplardaki uygulamalarımız için gerekli kaynakların tamamını otomatik ve güvenli bir şekilde modellememize ve tedarik etmemize imkan tanır  AWS CDK ise AWS kaynaklarını yazılım geliştirmekte olduğumuz dili kulllanarak kolayca oluşturmamıza olanak tanıyan bir yazılım geliştirme platformudur. En yalın şekilde kodladığımız tüm kaynakları AWS Cloudformation şablonlarına çevirerek CloudFormation’ın tüm avantajlarından faydalanmamıza olanak tanır .
  5. AWS CDK Cloud Development Kit  AWS Cloud Development Kit

    (AWS CDK), bulut uygulaması kaynaklarınızı tanıdık programlama dilleri kullanarak modelleyip tedarik etmenize yönelik açık kaynak bir yazılım geliştirme framework’udur..  AWS CDK temelinde TypeScript, Python, Java ve .NET dillerinde destek sunmaktadır. Kullandığımız geliştirme dili sözdizimi kurallarını kullanarak kodladığımız tüm kaynakları AWS Cloudformation şablonlarına çevirerek CloudFormation’ın tüm avantajlarından faydalanmamıza olanak tanır  AWS CDK temelde 5 adet cli komutu üzerinden işlemini gerçekleştirmektedir.  cdk init : Seçtiğimiz dilde yeni bir varsayılan uygulama başlatır.  cdk synth : AWS CDK uygulamamızı bir AWS CloudFormation şablonunda derler.  cdk diff : Local AWS CDK kodumuz ile AWS’deki çalışan uygulama arasındaki farka bakar.  cdk deploy : AWS CDK uygulamamızı AWS CloudFormation aracılığıyla dağıtır. AWS kaynaklarını AWS hesabımız üzerinde oluşturur.  cdk destroy : Cloudformation kullanarak oluşturduğumuz yığını (stack) AWS hesabımızdan kaldırır. AWS CDK
  6. Amazon S3 Simple Storage Service  AWS içinde veri erişilebilirliği

    ve performans özellikleri sunan bir nesne depolama hizmetidir.  Object-level storage : Obje tipinde saklama imkanı verir. Bir dosyanın üzerinde değişiklik yapılması gerekir ise değişiklik yapıldıktan sonra objenin tümünün tekrar yüklenmesi anlayışına dayanır.  Upload aşamasında tek dosya için maksimum 5 TB ‘ a kadar izin verir.  S3 hizmeti kendi içinde hizmet verdiği datacenterlar içinde otomatik yedekli olarak çalışmaktadır. Farklı regionlar içinde replikasyon seçeneği ile de genel bir yedekleme yapılabilmektedir.  Event Notifications : S3 hizmeti içinde event notificationlar default olarak gelmektedir. Bir bucket içine yüklenen , silinen veya güncellenen her olay için bir bildirim gönderebilir ya da başka bir servisi tetikleyebiliriz.  Versiyonlamayı desteklemektedir. Amazon S3
  7. Amazon S3 Genel Tanımlamalar  bucket: Ana dizin olarak kullanılmaktadır.

    S3 üzerinde tutacağınız herşeyin bir bucket (kova) altında olması gerekiyor. Tüm bucketlar benzersiz bir isimlendirme ile tanımlanmak durumundadır.  key: Dosya adına karşılık gelmektedir. Bucket içerisindeki fullpath gibi de düşünebilirsiniz. Tek farkı ön ek (prefix) içerebiliyor.  prefix: bucket’tan sonraki içerideki klasörlerdir. Key, prefix/dosyaAdı şeklinde oluşmaktadır.  metadata: S3 nesnesinin ne ya da nelerden oluştuğu bilgisi tutlmaktadır Amazon S3
  8. Amazon S3 Depolama Sınıfları  S3 Standart : Genel kullanım

    için tanımlanmış bulut depolama sınıfıdır.  S3 Standart IA : Seyrek aralıklarla erişilmesine rağmen ihtiyaç duyulduğunda hızlı erişim gerektiren verilere yönelik bir Amazon S3 depolama sınıfıdır.  S3 One Zone IA : Nesnelerini tek bir erişilebilirlik alanında depolamak isteyen müşterilerin tercih edebileceği bir Amazon S3 depolama sınıfıdır.  S3 Intelligent-Tiering : Bilinmeyen erişim modellerine veya öğrenmesi zor, değişken erişim modellerine sahip verilere yönelik bir S3 depolama sınıfıdır. Erişim modelleri değiştiğinde nesneleri iki erişim katmanı arasında taşıyarak otomatik maliyet tasarrufları sağlar.  Amazon S3 Glacier / Deep Archive : Cold storage tipidir. Arşivlenecek verilerimizi en uygun maliyet ile saklamak için kullanılar bir depolama sınıfıdır. Amazon S3
  9. Amazon S3 Erişim Türleri  Bir bucket açıldığı takdirde bu

    hizmet dışarıdan erişim için tamamen kapalı olarak oluşturulmaktadır. Sadece oluşturan kişi bu hizmet içindeki bucket ve içindeki objelere ulaşım hakkına sahiptir.  İstenirse public olarak tüm bucket dış kullanıcılara açılabilir.  İstenirse access policyler kullanılarak tüm erişim izinleri ayrı ayrı yönetilebilir. Owner Anyone else Default Private Owner Anyone else Public Public Owner Access Policy Controlled Access User A User B
  10. Amazon Dynamo DB  AWS servislerinden No-SQL veri tabanı hizmetidir.

    Her ölçekte milisaniye cinsinden tek basamaklı performans sunan bir anahtar-değer ve belge (non-relational) veritabanıdır.  İnternet ölçeğindeki uygulamalar için yerleşik güvenlik, yedekleme, geri yükleme ve bellek içi önbelleğe alma özelliklerine sahip, tam olarak yönetilen, çok bölgeli, çok ana hesaplı, dayanıklı bir veritabanıdır.  Schema barındırmaz. Her elamanın kendi içinde birçok attribute barındırma şansı vardır.  Basit ama yüksek hacimli veriler için kullanılır.  Ölçeklendirilmesi çok basit ve bir kaç tıklama ile gerçekleşebilir.  Karmaşık joinlere ihtiyaç duymaz  ACID prensibi ile transaction yönetimi gerçekleştirilir. (Atomicity, Consistency, Isolation, Durability) Amazon Dynamo DB
  11. Amazon Dynamo DB Data Modeli Table = Öğe koleksiyonlarıdır. Item

    = Veri koleksiyonlarıdır. Veriler attribute olarak saklanır. User ID Partition (hash) keys Partition (hash) keys Order ID Sort (range) keys Sort (range) keys  Attributes:  Verilerin nitelikleri.  Item :  Nitelik koleksiyonudur.  Table :  Öğe koleksiyonudur.  Partition Key :  Benzersiz birincil anahtar.  Sort Key:  Sıralama için ikincil anahtar
  12. Amazon Dynamo DB Global Table  Dynamo DB Global table

    ,bir AWS hesabı içinde belirlenen regionlara göre o hesaptaki tüm DynamoDB lerin yedeklendiği genel bir tablodur.  Örnek : 3 farklı region içinde “Müşteri Bilgileri” tablolarımızın olduğunu düşünelim. Bu tabloları Global Table oluşturarak yedeklersek bir region down olduğu takdirde müşterilerimiz başka bir region üzerinden bilgilerine ulaşmaya devam edebileceklerdir. Amazon Dynamo DB Replica us-east-1 Replica us-east-1 Replica us-west-2 Replica us-west-2 Replica eu-central-1 Replica eu-central-1 Global table Global table
  13. Amazon Dynamo DB Consistency Yaklaşımı Eventually Consistent Reads : DynamoDB

    üzerinden bir veri okunurken alınan cevap, o an yeni tamamlanan bir yazma işleminin sonucunu içermiyebilir. Okuma işlemi kısa bir süre sonunda tekrarlanırsa yeni datalar görüntülenebilir. Sonuçları çok daha hızlı bir şekilde elde edebiliriz. Strongly Consistent Reads : Eğer Strongly Consistent bir okuma yapar isek en güncel dataya ulaşmış oluruz.Tüm tamamlanmış yazma işlemlerinin sonucunu görüntüleyebiliriz. *DynamoDB default olarak eventually consistent read ile çalışır. ConsistentRead parametresi true ile sorgulama yaparsak Strongly consistent bir okuma yapmış oluruz. Uses 1x Read Capacity Unit Strongly Consistent Eventually Consistent Replica Replica Replica Replica Replica Replica Uses 5x Read Capacity Unit
  14. AWS Lambda  Sunucu tedariki gerekmeden veya yönetmeden kod çalıştırmamıza

    olanak tanır.   Stateless olarak çalışır.  Lambda, tüm ölçeklendirilebilirlik ve yüksek erişilebilirlik, loglama ve izleme konularını halleder.  Eventler tarafından tetklenerek ya da zamanlanarak çalıştırılabilir.  Node.Js, Python, Ruby, Java, Go, C# dillerini destekler.  Kaynakları sadece istek yapıldığı zaman kullanır.  Request ve kullanılan bellek miktarına göre bir fiyatlandırması vardır. AWS Lambda
  15. AWS Lambda AWS Lambda AWS Lambda Sorumlulukları :  Sunucunun

    sürekli ayakta kalabilmesi  Kapasite ihtiyaçları  Ölçeklendirilme ve hata toleransı  İşletim sistemi güncellemeleri  Kullanılan dil için güncellemeler  Metrikler ve loglama işlemleri AWS Lambda Avantajları :  Kendi kod yapını entegre edebilme yetkinliği.  Paralel kod çalıştırabilme yetkinliği.  Backend ve microservis mimari geliştirebilme yetkinliği.  Gereksiz kapasite kullanımı yapmaması.
  16. AWS Lambda  AWS Lambda Temel Bileşenleri :  Lambda

    Function : AWS üzerinde eventleri process eden kod bloklarıdır. Konfigurasyon ve bağımlılıklara göre yapılandırılan ortamda eventleri işler.  Event Source : Event üreterek Lambda functionları tetikleyen birimlerdir.  S3, DynamoDB, Amazon SNS, Amazon SQS, Cloudwatch Events, ALB Target Group, AWS IoT vb... AWS Lambda AWS Lambda function Kod Bloğu Bağımlılıklar Konfigurasyon Ilgili fonksiyonları max 15 dk işlemektedir
  17. Amazon SNS  Dağıtılmış sistemleri ve sunucusuz uygulamaları birbirinden ayırmanıza

    imkan tanıyan yüksek oranda erişilebilir, sağlam, güvenli ve tam olarak yönetilen bir pub/sub mesajlaşma hizmetidir.  Uygulama ve sistem mesajları için kullanılabilir.  Push email ve text mesajları için kullanılabilir.  Mobil bildirimler için kullanılabilir. Amazon SNS Amazon SNS Subscription Tipleri :  Email : Kayıtlı adreslere email gönderimi sağlanabilir.  HTTP/HTTPS : Kayıtlı URL lere HTTP post isteği gönderim sağlanabilir.  SMS Clientları : Kayıtlı telefon numaralarına SMS gönderimi sağlanabilir.  Amazon SQS Kuyrukları : Amazon SQS üzerine bir bildirim event mesajı gönderilebilir.  AWS Lambda Functionları : AWS Lambda foksiyonu üzerine bir bildirim olarak gönderilebilir.
  18. Amazon SNS  Bir “Topic” belirlenir. Her topic için benzersiz

    bir isimlendirme yapılmaktadır.  Gerekli policyler tanımlanıp hangi publisherların ve subscriberların bu topicle ilgili olduğu tanımlanır.  Publisher yayınlama yetkisi olduğu ilgili topic’e mesajı “PUSH” yöntemi kullanalarak gönderir.  Amazon SNS ilgili topic için bir subscriber listesi bulundurur. Bu liste içindeki subscriberlar için mesajın deliver edilmesi başlar.  Topic ile ilişkilendirilmiş subscriber listesi ile tüm subscriberlar aynı mesajı almaktadır. Amazon SNS
  19. Amazon API Gateway  Amazon API Gateway , istediğimiz ölçekte

    API'ler oluşturulup yayımlanmamıza, bunları izlenmemize, bakımın yapılmasının ve güvenliğinin sağlanmasını kendi içinde çözen, tam olarak yönetilen bir hizmettir.  Gerçek zamanlı çift yönlü iletişim uygulamalarını mümkün kılan RESTful API'leri ve WebSocket API'leri oluşturabiliriz.  Cors Desteği Vardır.  GET, POST, PUT, PATCH ve DELETE gibi standart HTTP yöntemlerini uygularlar  Custom Domain Name kullanımını destekler Amazon API Gateway
  20. Demo inventory dosyası API Gateway Web app Amazon S3 bucket

    AWS Lambda function S3 içindeki inventory dosyasını okuyup içindeki kayıtları DynamoDB üzerinde oluşturacak. Amazon DynamoDB table Amazon SNS SMS Bildirimi AWS Lambda function DynamoDB üzerindeki güncellemeleri algılayarak Amazon SNS üzerinde bir mesaj oluşturacak
  21. Sorular ve Kullanılan Kaynaklar Sorular için iletişim adresi [email protected] Sunum

    için kaynaklar https:/ /github.com/serkanbingol/aws-webinars