Internal Servislerin Status’unu Kontrol Etmek

Kerem Demirtürk
4 min readJul 1, 2021

Selamlar, bu yazımda internal servislerimizi yani internet trafiği dışarıya kapalı servislerin sağlığını, ayakta olup olmadığını nasıl kontrol edebileceğimizi anlatacağım. Bu kontrolü sağlamak için Python ile bir Lambda fonksiyon yazacağız ve önüne de API Gateway ile REST API oluşturup koyacağız.

Öncelikle AWS Console üzerinden Lambda servisine giderek, Create function seçeneğinden bir Lambda fonksiyonu oluşturacağız.

Fonksiyonumuzun adını ve kullanacağımız runtime’ı seçiyoruz. Ben Python3.6 üzerinde kodumu geliştireceğim için bu runtime’ı seçtim.

Bu adımı geçtikten sonra karşımıza dikkat etmemiz gereken bir adım gelecek çünkü servislerimiz internal olduğu için fonksiyonumuzu servislerle aynı VPC içine dahil etmezsek bizim de fonksiyonumuz bu servislere erişemez ve aynı VPC’ye dahil edeceğimiz gibi aynı zamanda Private Subnetler’i seçmeyi unutmamamız gerekir.

Fonksiyonumuzu oluşturduktan sonra kodumuza gelecek olursak, urllib3 kütüphanesini kullanmak bana yeterli oldu ama siz bunun yerine request kütüphanesini de kullanabilirsiniz tabii.

Öncelikle Lambda fonksiyon yazarken, kütüphaneleri dahil ederken

`from botocore.vendored import urllib3` 

botocore.vendored’i kullanıyoruz. Bunun yanında kodu kurgulama aşamasına gelecek olursak, bizim servislerimizin healthcheck’ini kontrol etmemiz gerekiyor. Öncelikle bunun için elimizde bir tane ‘url’ değişkeni olması gerekiyor. Bu url değişkeninin status’unu da kendimize geri döndürünce, Status Code’una göre servislerimizin düşüp düşmediğini anlamış olacağız. Bu geri dönüş işlemini de yapmak için iki tane yolumuz var, ister Slack WebHook kullanarak bir slack kanalına mesaj şeklinde yollayabiliriz, ister StatusCake gibi bir servise vererek hangi App’i kullanıyorsak buna notification basmasını sağlayabiliriz. Farklı bir yazımda Slack WebHook ile nasıl yapıldığını da ayrıca anlatacağım. Şimdi kodumuza geri dönecek olursak;

url = event['queryStringParameters']['url']

ile url değişkenimizi oluşturup bunun status’unu kontrol etmek için urllib3 ile request atacağız.

r = http.request('GET', url)#2. Construct the body of the response object                        transactionResponse = {}                        transactionResponse['url'] = url                        transactionResponse['message'] = r.status

devamında ise karşımıza url olarak girdiğimiz url’i , mesaj olarak ise r.status’u döndürmüş olacağız. Tabii ki bu bize ekrana json olarak bir çıktı gösterecektir yani biz sadece bunu yaparak gerçek status’umuzu öğrenemeyiz çünkü şu an çalışmayan bir siteyi bile döndürsek belki ekrana json olarak 400 yazacaktır ama arka planda bu 200 olarak dönüp gerçek sonucu veremeyecektir. Bu yüzden de bizim asıl olarak object’imize bu status’u döndürmemiz gerekir. Kodumuz bittikten sonra Deploy butonuna basarak fonksiyonumuzu güncellemeyi unutmayalım!

#4. Return the response object                        
return r.status

Kodun tamamına github üzerinden ulaşabilirsiniz aynı zamanda aynı repoda Lambda fonksiyonu olmadan Slack kanalınıza nasıl mesaj yollayabileceğiniz kod bulunmaktadır.

Tıklayarak repoya ulaşabilirsiniz.

Şimdi işin Lambda tarafı bitti ama bu url ile istek atabilmemiz için gereken API Gateway tarafını oluşturmaya geldi. Get requesti atacağımızı şimdiden bir köşeye yazalım ve yine AWS Console üzerinden API Gateway servisine gidelim. Create API => REST API , Build diyip

API Name vererek API’mizi oluşturalım. API oluştuktan sonra bizim önce bir adet resource, sonra da bu Resource’a ait bir Method (Get) oluşturup, deploy almamız gerekecek.

Resource’umuza bir isim vererek ilerleyeceğiz. Geri kalan kısımları ben doldurmadım açıklamaları aşağıda bulunmaktadır, isterseniz doldurabilirsiniz.

Resource oluştuktan sonra geldi buna bir Method oluşturmaya, yine Actions kısmından Create Method diyip,

GET methodunu seçip ilerlediğimiz zaman karşımıza Setup ekranı çıkacaktır, burada aslında Lambda fonksiyonu ile eşleştirmemizi yapacağız.

Lamdanın bulunduğu Region’u ve Fonksiyonu seçerek kurulumu tamamlamış olacağız. Sonlara doğru gelmiş bulunmaktayız, şimdi kurulumları tamamladıktan sonra yine Actions kısmından Deploy API yaparak, önce New Stage’den bir test stage’i oluşturup Deploy diyoruz.

Bundan sonra sol tarafta zaten isimlendirdiğiniz stage’in üzerine tıkladığınız zaman API’nizin url’i karşınıza çıkacaktır.

Url’imiz alıp tarayıcımıza yapıştırıp değişkenimizi ve status’unu kontrol edeceğiz.

Görüldüğü üzere url’e verdiğimiz linki ve karşılığında dönen status’u gösterecektir.

Okuduğunuz için teşekkür ederim, farklı yazılarla görüşmek üzere.

--

--