Azure Functions NodeJS REST API’si Nasıl Yazılır?

Mertcan Kibar
KoçSistem
Published in
7 min readMar 31, 2021

VSCode Üzerinden Uygulama Oluşturma, Yayınlama ve Test

Azure Functions NodeJS REST API

Azure Functions, bulutta küçük kod parçalarını çalıştırmanın basit bir yoludur. Kodu barındırmak için gereken altyapı konusunda endişelenmenize gerek olmadan microservice’ler yazdığınızı düşünebilirsiniz. Bulut sağlayıcıları bütün operasyonel işleri üstlendiğinden serverless denmektedir.

Web’in ilk günlerinde, bir web uygulaması oluşturmak isteyen herkesin, bir sunucuyu çalıştırmak için gerekli olan fiziksel donanıma sahip olması gerekiyordu, bu da külfetli ve pahalı bir işti.

Ardından, sabit sayıda sunucunun veya sunucu alanının uzaktan kiralanabileceği bulut bilişim geldi. Bu sabit sunucu alanı birimlerini kiralayan geliştiriciler ve şirketler, trafik veya etkinlikteki bir artışın aylık sınırlarını aşmamasını ve uygulamalarını bozmamasını sağlamak için genellikle büyük ölçekli satın alım yaparlar (CPU, RAM, Storage). Bu, ödenen sunucu alanının çoğunun boşa gidebileceği anlamına gelir. Bulut tedarikçileri, sorunu çözmek için otomatik ölçeklendirme modelleri geliştirdiler ancak DDoS saldırısı gibi etkinliklerdeki istenmeyen artışları otomatik olarak ölçeklendirmek bile çok pahalı olmaktadır.

Serverless — Maliyet Avantajları
Serverless — Maliyet Avantajları Tablosu

Serverless ile birlikte geliştiricilerin servisleri esnek bir “kullandıkça öde” esasına göre satın almalarına olanak tanınır. Geliştiricilerin yalnızca kullandıkları hizmetler için ödeme yapması gerektiği anlamına gelmektedir.

Serverless yerine kullanılan diğer bir isim ise FaaS (Function as a Service) ’dir.

Önde gelen bulut sağlayıcılarda Microsoft Azure — Azure Functions, Amazon Web Services — AWS Lambda, Google Cloud’ birden fazla hizmeti, IBM Cloud —IBM Cloud Functions hizmetleri bulunmaktadır.

Kısaca serverless nedir anlattıktan sonra asıl konumuz Azure Functions kullanarak Nodejs REST API’nin nasıl yazılacağını uygulamalı olarak inceleyelim.

Azure İşlevlerinin Temelleri

Yukarıda belirttiğim gibi küçük kod parçalarını Azure Functions ile nasıl bir altyapının gerekli olmasından endişe etmeden çalıştırabilirsiniz. Azure Functions, talebe göre ölçeklenir. Azure Functions’da en çok kullanılan tetikleyici (Azure Trigger) türlerine biraz deyinecek olursak.

HTTP Tetikleyici (HTTP Trigger)
HTTP protokolü aracılığıyla gönderilen bir isteğe yanıt olarak kodu yürütmek istediğinizde bu tetikleyici türü kullanılır.

Zamanlayıcı Tetikleyici (Timer Trigger)
Kodun bir programa(zamana) göre çalışmasını istediğinizde bu tetikleyici türü kullanılır.

Blob Tetikleyici (Blob Trigger)
Bir Azure Depolama hesabına yeni bir blob eklendiğinde kodun yürütülmesini istediğinizde bu tetikleyici türü kullanılır.

CosmosDB Tetikleyici (CosmosDB)
Kodun bir NoSQL veritabanındaki yeni veya güncellenmiş belgelere yanıt olarak yürütülmesini istediğinizde de bu tetikleyici türü kullanılır.

Diğer tetikleme türleri hakkında bilgi almak için https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings adresini ziyaret edebilirsiniz.

Azure Functions Uygulaması Oluşturma

Function’lar, Azure Functions uygulaması adı verilen bir servis altında çalıştırılır. Bu yüzden bir Functions uygulaması tanımlanması gerekmektedir.

Bir Functions uygulamasını iki şekilde oluşturabilirsiniz. Bunu doğrudan Azure portalinden oluşturabilirsiniz veya başka bir yolu da VSCode aracılığıyla oluşturmaktır.

VSCode aracılığıyla nasıl bir işlev uygulaması oluşturabileceğimizi göreceğiz.

Öncelikle, Azure Functions eklentisini yüklemeniz gerekir. Visual Studio Code için Azure Functions eklentisini yükledikten sonra, VSCode’un kendisinden tüm projeyi oluşturabilirsiniz. Yapmanız gereken ilk şey, Azure Hesabı ile kimlik doğrulaması yapmak ve Azure’da oturum açarak uygun aboneliği seçmektir.

Azure Functions Uygulaması Oluşturma

Kullanılabilir herhangi bir aboneliğe sağ tıklayıp Azure Function Uygulaması oluştur butonuna tıklayarak teknoloji seçebilirsiniz. Hangi Nodejs versiyonunda çalışacaksak seçerek devam ediyoruz.

Yine aynı bölümde lokasyon seçimi soruluyor burada da kullanmak istediğiniz lokasyonu seçtikten sonra uygulamamız oluşturuluyor.

Otomatik olarak uygulamamıza verdiğimiz isimde kaynak grubu ve depolama hesapları oluşturuluyor. İşlemler tamamlandığında sol bölümde Azure Functions uygulamasını göreceksiniz. Otomatik şekilde oluşan Functions uygulamasında barındırma seçeneği olarak Tüketim hizmeti seçili gelmektedir.

Tüketim hizmet planı, otomatik ölçeklendirme sağlar ve functionlarınız çalıştığı kadar size faturalandırır. Varsayılan olarak zaman aşımı süresi 5 dakikadır, ancak 10 dakika kadar uzun bir zaman aşımı olacak şekilde de yapılandırılabilir.

Azure App Service hizmet planı, functionlarınız tanımladığınız bir VM’de sürekli olarak çalışmasını sağlayarak zaman aşımı sürelerinden kaçınmanıza olanak tanır. Bir App Service planını kullanırken, functions üzerinde çalıştığı uygulama kaynaklarını yönetmekten siz sorumlusunuz, bu nedenle bu teknik olarak sunucusuz bir plan değildir. Kısacası functionlarınızın sürekli ayakta kalmasını istiyorsanız bu planı seçebilirsiniz ancak bu planda tükettiğin kadar öde yerine sabit ücret ödersiniz.

VSCode’da oluşturduğunuz kaynak grubu, depolama hesabı, functions uygulaması vb. şeyleri Azure portalinde de görülebiliriz.

Azure Portal Üzerinde Functions Uygulamasnın Gösterimi

NodeJS REST API Oluşturma

Bir functions uygulaması oluşturduk, şimdide VSCode’daki klasör simgesine tıklayarak yeni bir local proje oluşturalım.

Daha sonra bizden ilk olarak hangi tetikleme türüne ait function istediğimiz sorulmakta HTTP şablonu seçerek devam ediyoruz. Oluşturma bittiğinde function’ı yine sol bölümde göreceksiniz.

Yukarıdaki pencere size Azure functionlarınızın genel görüntüsünü göstermekte gerçek kod tabanı VSCode’daki kaynağa tıkladığınızda görebilirsiniz.

Ufak bir uygulama yapmak için sağ tıklayıp user-get isimli yeni klasör açıyorum ve içerisine index.js ve function.json dosyaları oluşturuyorum.

Bir de yine ana dizinde services isimli bir klasör daha açıyorum örnek api’ye data alışverişini yapacak bir servis hazırlayalım.

user-get index.js

Her function’ın başlangıç noktası olarak bir index.js dosyası vardır. HTTP isteğini ve bağlam nesnelerini alır geri bir HTTP yanıtı gönderir. HTTP isteğine ve yanıtına bağlam nesnesi aracılığıyla erişebilirsiniz (context, request).

user-get function.json

Her function’ın route bilgisini, HTTP yönteminin türünü, isteğin yönlerini ve yanıt nesnelerini tanımlayan bir function.json dosyası vardır.

Şuana kadar yaptığımız uygulamayı çalıştırmayı deneyelim. Bu arada package.json dosyasına bakarsanız, start komutu “func start” dır.

Terminale “func start” yazdığımızda uygulamanın default olarak 7071 port’undan ayağa kalktığını görebilirsiniz.

Azure Function — ”func start”

Oluşturduğumuz get api’sine tarayıcı üzerinden istek attığımız da aşağıdaki ekran görüntüsünün oluşmuş olması gerekmekte.

RestAPI — GET Function Oluşturulması

Bir tanede post api’si örneği yaparak test projemizi tamamlayalım.

user-post index.js

Yine ana dizine user-post isimli bir klasör açıyorum ve içine index.js ve function.json dosyaları oluşturuyorum.

Bu bir POST isteği olduğundan, isteğin BODY’sini okuduktan sonra yardımcı function’a gönderiyoruz.

user-post function.json

Burada diğer yaptığımız functiondan farklı methods dizinde GET yerine body’de data alacağımızdan POST yazmamızdır.

POST function’ını da oluşturuduktan sonra tekrardan “func start” yaparak yeniden başlatıyoruz API’yi.

İki tane API hazırlamış olduk örnekteki şekilde service katmanında çeşitli veri işlemleri yaparak, authentication, validation gibi özellikler ekleyerek daha kapsamlı projeler oluşturulabilir.

Azure Functions Uygulamasını Yayınlama

Lokal proje olarak örnek bir REST API’yi geliştirdik. Bunu Function Uygulamasına yerleştirelim. Function uygulamasına yayınladığınızda bunu Azure portalında da görebilirsiniz.

Bunu yayınlamak için VSCode’daki Azure Functions eklentisindeki yukarı ok simgesine tıklayabilirsiniz.

Azure Functions Uygulamasını Yayınlama

Daha sonra yukarıda oluşturduğumuz aboneliği ve functions uygulamasını seçiyoruz. Ve uygulama yayınlama işlemine başlıyor. İşlem tamamlandığında Azure Portal üzerinde Functions uygulamanızı görebilirsiniz.

Test

Azure portalından hızlıca bir test gerçekleştirelim. Azure portalında geliştirdiğimiz tüm REST API’leri görebiliyoruz. Hatta kodu görebilir ve bir function’a tıklayarak test edebilirsiniz.

Yazmış Olduğumuz Function’lar

Herhangi bir function’a tıklayarak detay bilgisini, loglarını ve test edebileceğiniz bir ekran bulunmaktadır.

Yazdığımız Bir Function’ın Code+Test Ekranında Gösterimi ve Test

Genel görünüm ekranında URL olarak gördüğümüz adres uygulamamızın yayınlandığı adrestir. Adresi tarayıcıya kopyaladığımızda Functions uygulamamızın ayakta olduğunu görebilisiniz.

Test Azure Functions Uygulamasının Görünümü

Özet

  • Kaynakları daha kolay yönetmek, dağıtmak ve paylaşmak için functionları mantıksal bir birimde gruplayan konteyner’a Function uygulaması denir.
  • Serverless, bir servis olarak function (FaaS) veya bir bulut platformunda barındırılan bir mikro servis olarak düşünülebilir. İş mantığınız function olarak çalışır ve altyapıyı manuel olarak oluşturmanız veya ölçeklendirmeniz gerekmez.
  • Azure Functions, sunucusuz bir uygulama platformudur. Geliştiricilerin, altyapı sağlamadan yürütülebilen iş mantığını barındırmasına olanak tanır.
  • Azure işlevlerini C #, java, javascript, typcript, Python vb. gibi çeşitli diller de yazabilirsiniz.
  • HTTP protokolü aracılığıyla gönderilen bir isteğe yanıt olarak kodu yürütmek istediğinizde bu tetikleyiciyi kullanmanız gerekir.
  • Visual Studio Code için Azure Functions uzantısını yükledikten sonra, VSCode’un kendisinden tüm projeyi oluşturabilirsiniz.
  • Function uygulamaları, iki tür hizmet planı bulunmakta. İlk hizmet planı Tüketim hizmet planı, diğeri ise Uygulama Hizmet Planıdır.
  • Azure portalındaki her function’ın İzleme bölümüne erişerek API loglarını veya durumunu izleyebilirsiniz.

Sonuç

Azure Functions ile altyapıyı manuel olarak hazırlamanız gerekmez, böylece hiçbir zaman fazla ödeme yapmazsınız. Bunların, yürütme süresi ve yürütme sıklığı gibi bazı dezavantajları da vardır tabiki. Bu seçeneğe karar vermeden önce tüm artıları ve eksileri göz önünde bulundurduğunuzdan emin olun.

Kaynaklar

--

--