Sitemap
Cloud Türkiye

We write, talk and discuss the cloud.

gRPC ile AWS Application Load Balancer Kurulumu ve Kullanımı

6 min readDec 30, 2020

--

Herkese merhaba! Yılın son blogpost’u ile yeniden birlikteyiz.

Bu yazıda AWS Application Load Balancer’a 29 Ekim 2020 tarihinde gelmiş olan gRPC protokolü desteğini ve ilgili kurulumların sıfırdan nasıl yapılacağı hakkında bilgiler veriyor olacağım. Bunu yaparken her zamanki gibi bir de örnek uygulamamız mevcut. İlk kısımdan başlayalım.

Neler Gerekli

Genel Bakış

AWS Application Load Balancer üzerinde gRPC protokolüyle Load Balancing işlemi yapmak istediğimizde, bununla beraber birçok servise de dokunmuş oluyoruz. Mecburi yapılması gerekenleri dışında bu uygulama için hazırladığım, -Infrastructure as Code- tarafında ilgili uygulamanın altyapısını yaratmak için AWS CDK kullanımı gerçekleştirdim. Hem Github kaynağında hem de bu yazıda ilgili bilgilere sahip olacaksınız. Bunun dışında, AWS Certificate Manager, Route 53 gibi iki ayrı servisle de “gRPC Application Load Balancer” özelinde işlem yapıyor olacağız.

AWS Application Load Balancer, gRPC
gRPC Application Load Balancer

Yukarıda bulunan şekilden kısaca bahsedebiliriz. Application Load Balancer, gRPC protokolü kullanımı için dinleme ucunda (Listener) güvenli bir bağlantı mecburiyeti koşuyor (HTTPS). Bu işlemi sağlamak içinse AWS Certificate Manager’da bir SSL sertifika sahibi oluyoruz ve kendi domain’imize bu SSL sertifikasını bağlıyoruz. Artık bu güvenli domain üzerinden ilgili Load Balancer’ın gRPC ucuna erişebilir hale geliyoruz. Bu uçtan sonra Target Group diye bahsedilen dağıtım grubu için ise protokolümüz HTTP veya HTTPS olabiliyor. Protokol versiyonu için ise gRPC kullanıyoruz.

İlk Adımlar

Öncelikle, bu senaryo için hazırlanmış olan kaynak kodları bilgisayarınıza indirin ve bundan sonraki adımları sırasıyla takip edin. Kaynak koda ulaşmak için tıklayın.

Kaynak kod içerisinde “cdk-iac” klasörü içerisinde AWS’te oluşturacağımız altyapımız ve ana dizinde ise Node.js ile yazılmış örnek bir gRPC uygulaması bulunmakta.

AWS ECR — Docker İşlemleri

Uygulama kaynak kodunda bulunan Dockerfile yardımıyla uygulamamızı AWS ECR servisine gönderimini sağlayacak ve sonrasında bu Docker imajını uygulama sunucumuzda kullanıyor olacağız. Bunun için aşağıdaki komutlarlı terminalinizde çalıştırarak bu işlemi tamamlayın. “1234567890” kısmına kendi AWS hesap ID’nizi girmeniz gerekmekte.

  • ECR’a login oluyoruz

aws ecr get-login-password — region eu-central-1 | docker login — username AWS — password-stdin 1234567890.dkr.ecr.eu-central-1.amazonaws.com

  • İlgili imaj kaynağını yaratıyoruz

aws ecr create-repository — repository-name grpc-nodejs-example

Bu işlemlemden sonra AWS ECR servisine konsol üzerinden ulaşın ve yaratmış olduğunuz repository’nin içerisine girin. Sağ üst köşede bulunan “View push commands” seçeneğini tıklayın ve karşınıza gelen ekrandaki komutları sırasıyla, indirmiş olduğumuz kodda Dockerfile’ın bulunduğu dizine gelerek çalıştırın.

Bu işlem sonunda docker imajımız AWS hesabımız içerisindeki herhangi bir uygulama sunucusu tarafından kullanıma hazır hale gelmiş olacaktır.

AWS CDK stack kurulumu

Kaynak kodun README kısmında belirtilen, AWS hesap ID’nizi değiştirdikten sonra sırasıyla ilgili AWS CDK komutlarını çalıştırın. Bu işlem sonunda ihtiyacınız olacak Networking, Uygulama Sunucusu gibi ilgili her parça otomatik olarak AWS tarafında yaratılmış olacak.

Tam burada henüz AWS’in, CloudFormation ve AWS CDK gibi araçlarının gRPC Load Balancer desteği henüz bulunmadığı için desteği bulunmayan kısımları konsol üzerinden elle yaratıyor olacağız. İlgili desteğin geliştirilme sürecini takip etmek isterseniz bu linkten ulaşabilirsiniz.

gRPC Uygulamasını Başlatma

Bu kısımda konsol üzerinden yaratılmış olan EC2 makinemize ulaşarak Docker kurulumu gerçekleştirin. Bu kurulum sonrasında uygulamayı AWS ECR reponuzdan çekerek “50051” portundan uygulamanızı host edin.

AWS Certificate Manager

Hali hazırda bir domain için sertifikasyonunuz bulunmuyor ya da AWS üzerine aktarımını gerçekleştirmemişseniz ACM üzerinden yeni bir sertifika talep edebilir ya da mevcut SSL sertifikanızı IAM’e yükleyip kullanım yapabilirsiniz.

AWS Certificate Manager

Örnek olarak wildcard’lı bir şekilde bir SSL alımı gerçekleştirdim. Bu kısımda sertifikanızın Issued olabilmesi için ilgili değerlerin CNAME olarak domain provider’a girilmesi gerekmektedir. Ben yine bunun örneği için AWS Route 53 servisini kullandım.

Load Balancer Target Group Yaratma

Bu kısım için ALB yaratmaya geçmeden önce uygulama Target Group’umuzu yaratabiliriz.

gRPC Target Group

Bu işlemde Target grubumuza bir isim veriyor, Protokol olarak HTTP ve 80 portuna açıyor; Protokol versiyon olarak da gRPC versiyonunu seçiyoruz. Yukarıda gösterilen test-vpc adlı VPC ise AWS CDK stack’iyle birlikte kurulu bir şekilde gelecektir. Uygulama sunucusu da bu VPC üzerinde bulunduğu için ALB’nin VPC kaynağı için test-vpc’yi seçerek devam edebilirsiniz.

Target grubun “Advanced Settings” kısmında healcheck değeri için ‘/HelloService.healthCheck’ girişini sağlayın ve status code olarak da 0 -sıfır- değerini girin.

gRPC Target Group Settings

Target grup yaratıldıktan sonra mevcut uygulamamızı “50051” portuyla birlikte target olarak bu grup içerisine ekliyoruz. Bu target’ın durumunu henüz bir Load Balancer ucu bu target gruba bakmadığı için “unused” durumunda göreceksiniz.

Application Load Balancer Yaratma

Bu kısımda yine AWS EC2 konsolu üzerinden Load Balancer yaratma kısmına geliyor ve Application Load Balancer seçeneğiyle beraber devam ediyoruz.

AWS Application Load Balancer
Application Load Balancer — Protocol

Load Balancer protokolü olarak HTTPS ve VPC olarak ise vpc-test seçimini gerçekleştiriyoruz.

AWS Application Load Balancer
Application Load Balancer — Security

Bu kısımda ACM üzerinde daha öncesinde yaratmış olduğumuz SSL sertifikasını seçerek devam ediyoruz.

AWS Application Load Balancer
Application Load Balancer — Security Group

Load balancer’ımız Ingress (In Bound) ucuna 443 (HTTPS) portunu giriyoruz.

AWS Application Load Balancer
Application Load Balancer — Routing

Routing kısmında ise önceden yaratmış olduğumuz gRPC Target grubumuzu seçiyor ve yukarıda bahsedilen health check ayarlarını yapıyoruz.

Bu routing ayarının hemen aşağısında, yukarıda belirtilen health check path’i ve status code değerini giriyoruz.

Bu kısımdan sonra Application Load Balancer’ımız yaratılmış oluyor. Şimdi EC2 konsolunda Security Group sekmesine giderek, Load Balancer için yaratmış olduğumuz Security Group değerini, uygulama Security Group’una Ingress (In Bound) kuralı olarak ekleyelim. Bunu, Load Balancer’ın uygulamaya “50051” portu ile ulaşabilmesi için gerçekleştiriyoruz.

Application Security Group — Ingress

Bu işlemi de kaydedip kapattıktan sonra geriye sadece son bir işlem kalıyor.

Son kısımda Amazon Route 53 servisi ya da hangi domain servis sağlayıcı ile çalışıyorsanız, yaratmış olduğumuz Load Balancer’a domain üzerinden yönlendirme sağlayacağız. Bu sayede üzerinde SSL takılı olan domain’imiz üzerinden gRPC Load Balancer’a ulaşabileceğiz.

Amazon Route 53, Load Balancer
Route 53 — ALB Routing

Bu işlem sonrası artık “grpc-service.azmimengu.com:443” URI’ı üzerinden gRPC Load Balancer’ına ulaşmış ve canlı ortamda kullanıma hazır hale getirmiş bulunduk.

Uygulama kod kaynağındaki gRPC test client’ı ile bağlanmak ve test etmek isterseniz aşağıdaki satırda bir değişiklik yapmanız gerekmekte.

```const grpcClient = new helloServiceProto(SERVER_URI, grpc.credentials.createInsecure()); ```

Burada yer alan “createInsecure fonksiyonunu “createSsl” fonksiyonu ile değiştirdiğinizde kurmuş olduğunuz yapıya ulaşabilecekseniz.

Bu kısma kadar sabırla takip edip okuduğunuz için teşekkür ederim. Uygulama kaynak kodunu her zamanki gibi aşağıda bulabilirsiniz. Yazının herhangi bir kısmında açıklık göremiyorsanız çekinmeden ulaşabilirsiniz. CloudFormation ve CDK gibi ürünlerin gRPC Load Balancer desteği sonrası AWS CDK kaynak kodunda bu değişiklikleri yapıyor olacağım. Bununla beraber yukarıda görmüş olduğunuz birçok ekrandaki işlemi elle yapmamıza gerek kalmayacaktır :)

İyi seneler, Hoşçakalın.

Github kaynak kodu için tıklayın.

--

--

Azmi Mengü
Azmi Mengü

Written by Azmi Mengü

Software Architect, AWS Community Builder

No responses yet