Slide 1

Slide 1 text

Creating Cloud Infrastructure with a Programming Language: AWS CDK

Slide 2

Slide 2 text

Moderator Bilgileri Serkan BİNGÖL AWS Solution Architect & AAI BilgeAdam Teknoloji [email protected] https:/ /www.linkedin.com/in/sbingol/ https:/ /github.com/serkanbingol https:/ /medium.com/@serkanbingoll

Slide 3

Slide 3 text

Girizgah : İş yüklerimizi çözümlemeye çalışırken en çok efor sarfettiğimiz alan şüphesiz ki altyapının kurgulanması ve konfigure edilmesini sağlamaktır. Bu sistemleri kurgulamak ve sürekliliğini sağlamak için devops dinamiklerinden çokça faydalanmaktayız. AWS Cloud Development Kit (AWS CDK), bulut servis sağlayıcısı olan AWS üzerinde bir geliştirici bakış açısı ile sistem ya da devops taraflı çok fazla teknik yetkinlik sahibi olmadan , devops dinamiklerinden faydalandığımız, yazılım geliştirmekte olduğumuz dili kulllanabildiğimiz ve tüm bunlar sayesinde uygulamamızın AWS kaynaklarını kolayca oluşturabildiğimiz bir yazılım geliştirme platformudur. Sunumun ilerleyen kısmında Lambda, DynamoDB , SNS , S3 ve API Gateway servislerini kullandığımız sunucusuz bir uygulamayı AWS CDK kullanarak C# programlama dili ile bulut altyapısı olarak ayağa kaldıracağız.

Slide 4

Slide 4 text

Amazon S3 Simple Storage Service Amazon S3

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Amazon Dynamo DB Amazon Dynamo DB

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

AWS Lambda AWS Lambda

Slide 9

Slide 9 text

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 tetiklenerek 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

Slide 10

Slide 10 text

Amazon SNS Amazon SNS

Slide 11

Slide 11 text

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.

Slide 12

Slide 12 text

Amazon API Gateway Amazon API Gateway

Slide 13

Slide 13 text

 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 Amazon API Gateway

Slide 14

Slide 14 text

IaC Infrastructure as Code IaC Infrastructure as Code

Slide 15

Slide 15 text

IaC Infrastructure as Code  IaC Infrastructure as Code , oluşturmak istediğiniz sistem için konfigurasyonların yönetilmesi ve altyapının sağlanmasının otomatikleştirilmesi sağlayan bir kod altyapısının oluşturulması yani kısaca sistemin kod olarak yazılması anlamına gelir.  IaC tıpkı yazılım geliştirirken kullandığımız gibi kullanıcıların altyapıyı yönetmek için versiyon kontrol sistemleri (VCS), test otomasyon kütüphalerini ve deployment orkestrasyonu gibi yazılım geliştirme araçlarını kullanabilmemizi sağlar. Bu aynı zamanda test odaklı geliştirme(TDD), sürekli entegrasyon (CI) ve sürekli teslimat (CD) gibi geliştirme yöntemlerinden yararlanmanın kapısını açar. IaC Infrastructure as Code

Slide 16

Slide 16 text

AWS IaC Infrastructure as Code  AWS içinde IaC Infrastructure as Code yapısı için 3 bileşenden söz edebilmekteyiz.  AWS SDK  CloudFormation  AWS CDK IaC Infrastructure as Code  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 .

Slide 17

Slide 17 text

AWS CloudFormation AWS CloudFormation

Slide 18

Slide 18 text

AWS CloudFormation Bulut ortamınızdaki tüm altyapı kaynaklarını açıklamamız ve tedarik etmemiz için ortak bir dil sağlar. CloudFormation, programlama dillerini veya 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. Bu durum bize, AWS kaynaklarımız için tek bir doğru bilgi kaynağı sağlar. AWS CloudFormation AWS kaynaklarımızı oluşturulması için ortak bir dil sağlar. Tanımlı kaynakların oluşturulması için otomasyon oluşturur.

Slide 19

Slide 19 text

AWS CloudFormation  AWS kaynaklarımızı oluştururken JSON/YAML formatında hazırladığımız ve tüm bileşenlerin bir sistem yığını oluşturduğu şablonlardır.  Bir kod parçacığı gibi düşünülmelidir. Versiyonlama sistemleri (SVN , Git vb..) içinden yönetilebilmektedir.  Sistem içinde kullanacağımız tüm kaynaklar, çalıştırma zamanı parametreleri (EC2 size, EC2 key pair vb..) bu şablon içinde tanımlanabilmektedir.  AWS CloudFormation, hazırladığımız şablonlarını işleyen bir engine olarak çalışmaktadır. AWS CloudFormation Architecture Template Architecture Stack AWS CloudFormation Engine

Slide 20

Slide 20 text

AWS CDK Cloud Development Kit AWS CDK

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

AWS CDK Cloud Development Kit

Slide 23

Slide 23 text

AWS Demo  AWS CDK ( Cloud Development Kit )  Amazon S3 ( Simple Storage Service )  Amazon DynamoDB  AWS Lambda  AWS SNS ( Simple Notification Service )  AWS API Gateway

Slide 24

Slide 24 text

inventory dosyası API Gateway Web app Amazon S3 bucket AWS Lambda function (func_DynamoDB) S3 içindeki inventory dosyasını okuyup içindeki kayıtları DynamoDB üzerinde oluşturacak. Amazon DynamoDB table Amazon SNS Email Bildirimi AWS Lambda function (func_SNS) DynamoDB üzerindeki güncellemeleri algılayarak Amazon SNS üzerinde bir mesaj oluşturacak AWS Lambda function ( func_GetItems ) DynamoDB üzerindeki güncellemeleri algılayarak Amazon SNS üzerinde bir mesaj oluşturacak AWS CDK Demo

Slide 25

Slide 25 text

Kullanılan Kaynaklar Sunum için kaynaklar Slidelar : https:/ /speakerdeck.com/serkanbingol/creating-cloud-infrastructure-with-a-programming-language-aws-cdk Uygulama Kodları : https:/ /github.com/serkanbingol/aws-webinars/tree/master/developer-summit-2020-cdk