Creating Cloud Infrastructure with a Programming Language: AWS CDK

Creating Cloud Infrastructure with a Programming Language: AWS CDK

İş yüklerimizi AWS servislerini kullanarak geliştirirken 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. Bu konuşmada serverless bir uygulamanın aws tabanlı temel servis bileşenlerinden bahsederek , AWS CDK kullanarak bu servis bileşenlerini nasıl kullanacağımızı konuşacağız. 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.

3d08a17662c4c8c0cdc89c73e64d5302?s=128

Serkan Bingöl

November 21, 2020
Tweet

Transcript

  1. Creating Cloud Infrastructure with a Programming Language: AWS CDK

  2. Moderator Bilgileri Serkan BİNGÖL AWS Solution Architect & AAI BilgeAdam

    Teknoloji serkanbingol@outlook.com https:/ /www.linkedin.com/in/sbingol/ https:/ /github.com/serkanbingol https:/ /medium.com/@serkanbingoll
  3. 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.
  4. Amazon S3 Simple Storage Service Amazon S3

  5. 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
  6. Amazon Dynamo DB Amazon Dynamo DB

  7. 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
  8. AWS Lambda AWS Lambda

  9. 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
  10. Amazon SNS Amazon SNS

  11. 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.
  12. Amazon API Gateway Amazon API Gateway

  13.  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
  14. IaC Infrastructure as Code IaC Infrastructure as Code

  15. 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
  16. 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 .
  17. AWS CloudFormation AWS CloudFormation

  18. 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.
  19. 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
  20. AWS CDK Cloud Development Kit AWS CDK

  21. 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
  22. AWS CDK Cloud Development Kit

  23. AWS Demo  AWS CDK ( Cloud Development Kit )

     Amazon S3 ( Simple Storage Service )  Amazon DynamoDB  AWS Lambda  AWS SNS ( Simple Notification Service )  AWS API Gateway
  24. 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
  25. 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