azure-functions-1-ci-hisse

Azure Functions -1ci hissə

Ölkəmizdə cloud based development hələ də geniş vüsət almasa da, əksər ölkələrdə development prosesində cloud sistem əsas rol oynayır.

Bu məqaləmizdən başlayaraq qarşıdakı bir neçə məqalədə Azure Functions haqqında danışacağıq.  Bu məqalədən nələr öyrənəcəyik?

-Nədir axı bu Azure funksiyalar

-İlk Azure funksiyamız

Azure function-lar serverless arxitektura(növbəti məqalələrimizdə bu haqda detallı danışacağıq) elementlərindən olub , aşağıdakı üstünlükləri təmin edir:

1)İş vahidini təmsil edən kiçik kod hissəsini cloud sistemdə birbaşa host etmək olur. Bu imkan yaradır ki, əgər hər hansı bir iş görsək, onunçün məşhur template-lərdən birini seçmədən(Razor pages,MVC, APİ və.s), sadəcə verilən tapşırığı funksiya şəklində yazaraq publish edə bilək.

-Misalçün: .NET CORE platformasında hər hansı bir veb həll hazırlayan zaman, verilən defakto şablonlardan (ya MVC, ya APİ və.s) birini seçməli, onun üzərindən development prosesini aparmalıyıq. Ammakı Azure functions imkan verir ki, sadəcə bizdən tələb olunan tək funksiyamızı yazaraq onu publish edə bilək. Buna standard şablonlardan daha kiçik application vahidi olaraq baxa bilərsiniz. Azure Functions sayəsində application anlayışı 1 iş vahidini təmsil edən funksiya səviyyəsinə endirilib. Bu isə bizə bir xeyli üstünlüklər təmin edir.

2)Azure Functions bir neçə proqramlaşdırma dili dəstəkləyir. Əgər Siz Python, PHP, Javascript,F#,C# dillərindən birini bilirsinizsə, Azure functions yazmaqda davam edə bilərsiniz.

3)Azure bizim function-ları ehtiyac olarsa avtomatik genişləndirə bilir

4)Yalnız istifadə vaxtı qədər ödəniş edirik. Azure Functions-ın əsas üstünlüklərindən biri isə, təbiiki sadəcə istifadə etdiyimiz resurs və vaxta görə ödəniş etməyimizdir. Ümumiyyətlə, bulud həllərin bizə təqdim etdiyi ən müasir mexanizmlərdən biri də məhz budur.

Sadə formada ifadə etsək, Azure Functionslar adından məlum olduğu kimi, sadəcə funksiyalardır. Onlar Cloudda host olunur və kiçik iş vahidinin müstəqil formada deploy olunmasını təmin edir.

İlk Azure Funksiyamız

-Azure funksiyaları bir neçə yolla yaratmaq olar.

1) https://tryfunctions.com/ saytına daxil olaraq 1 saat müddətidən free trial versiyanı istifadə edə bilərsiniz. Bu sizə azure funksiyalarla kiçik də olsa tanışlığa imkan yaradacaq.

2)Visual Studio vasitəsilə

PS: Visual studio istifadə edərkən Azure Development yüklü olduğuna əmin olun


3)Azure portalda qeydiyyatdan keçərək birbaşa cloud vasitəsilə.

Portalla bağlı qeydlər:

-https://portal.azure.com/ saytına daxil olub qeydiyyatdan keçdikdən sonra, Azure sizə 200$ məbləğində balans verir və bunu istənilən servisi aktiv etmək üçün istifadə edə bilərsiniz.

-Qeydiyyat vaxtı sizdən kredit kartı tələb olunur. Bu sadəcə sizi verifikasiya etmək vasitələrindən biridir. Əgər siz pulla plaan keçməsəniz heç bir halda kartınızdan məbləğ çıxılmır. Ona görə rahatlıqla kartınızı qeyd edə bilərsiniz.

-Nəticə etibarilə publish vaxtı azure subscription lazım olacaq, ona görə hazır olduğunuzda portal üzərinən qeydiyaytan keçməyiniz məsləhətdir.

Məsələni mümkün qədər anlaşılan saxlamaq üçün ilk öncə funksiyaların yaradılmasına portal üzərindən baxacağıq.

1)İlk öncə https://portal.azure.com/ saytında qeydiyyatdan keçirik.

2)Portalın ana səhifəsindən Functions App seçirik

3) Add düyməsinə klik etdikdən sonra açılan pəncərədəki inputları doldururuq

4)Aşağı hissədə Review+Create düyməsinə klik edib ardından Create düyməsini basırıq

5)Hər şey hazır olduqdan sonra Go to resources düyməsinə klik edirik. Açılan səhifədə sağda Functions bölməsinə + işarəsinə klik edərək İn portal seçib portalda functions yaradacağıq.

6) İn portal seçimini etdikdən sonra Continue düyməsinə klik edirik.

Açılan pəncərədən Web hook+ APİ seçirik. Bu template forması spesifik trigger olub (triggerlər haqda növbəti dərslərimizdə tanış olacağıq) HTTP sorğular verilən zaman geriyə cavab qaytarır.


Azure portal bizə seçdiyimiz triggerə uyğun hazır kod nümunəsi generasiya edir. Onu modifikasiya edərək tələbimizə uyğun formaya sala bilərik

//Newtonsoft.Json assembly fayl;na referans saxlayaq
#r "Newtonsoft.Json"

//.net core ve nuget kitabxanalarIn adsahələrini qoşaq
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

//APİ trigger HttpRequest arqumenti alır
//Loglama üçün İLogger inject olunub
public static async Task Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Azure funksiyalar imkan verir ki, sistemə yüklü olan (framework tərəfindən verilən və ya nuget-dən yüklənən) istənilən assembly faylını sitifadə edə bilək.  Nuget vasitəsilə yüklədiyimiz assembly fayllarını istifadə etmək üçün #r(reference) əmrindən istifadə edirik. Assembly-ə referans verdikdən sonra onu rahatlıqla using vasitəsilə istifadə edə bilərik.

Bütün azure function-lar sıradan static funksiyalardır. Bu funksiyanın siqnaturası trigger formasına görə dəyişə bilir. Funksiyalar geriyə nəticə qaytara da qaytarmaya bilər, yenə də bu triggerdən asılıdır.

Əgər proqram məntiqini daha kiçik hissələrə parçalamaq lazımdırsa View Files- > Add- > function_name.csx yazmaqla yeni fayl əlavə ed' bilərik. Faylı qoşmaq üçün spesifik komandaya ehtiyac yoxdur, default olaraq verilən funksiya ilə eyni namespace-də olduğumuza görə sadəcə funksiyanı çağırıb istifadə edə bilərik.

Kod nümunəsini dəyişib kənar klasın istifadəsini göstərmək üçün sağ küncdə View Fields seçib oradan Add düyməsini basaraq HttpRequestParser.csx faylı yaradırıq və içərisinə aşağıdakı kodu əlavə edirik.

public class HttpRequestParser
{
     private readonly HttpRequest _httpRequest;
    public HttpRequestParser(HttpRequest request)
    {
        _httpRequest = request;
    }
    public string TryGet(string name)
    {
        return _httpRequest.Query["name"];
    }
    
}

Daha sonra run.csx faylına gələrək kodu bu formada dəyişirik.

#r "Newtonsoft.Json"


using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;


public static async Task Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    var httpRequestParser = new HttpRequestParser(req);
    string name = httpRequestParser.TryGet("name");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    return name != null
        ? (ActionResult)new OkObjectResult($"Hello, {name}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}

Görüdüyümüz kimi, kənar faylı qoşmaq üçün sadəcə klasın adını çağırıb istifadə etmək kifayət edir.

PS: fayllarda hər dəyişiklikdən sonra mütlər save düyməsini seçməliyik.

Artıq yazdığımız kodu test edə bilərik. Bununçün test bölməsinə gəlib Request body-yə json formatında məlumat veririk

{
    "name": "Simon"
}

Nəticəni səhifənin aşağısında output hissəsində görə bilərik.

Həmçinin test üçün  Get function URL seçərək URL-ə istənilən veb səyahətçi üzərindən sorğu verə bilərik.

Tural

Tural Süleymani

Süleymani Tural Microsoft-un MCSD statuslu mütəxəssisidir, 2008-ci ildən bu yana proqramlaşdırma üzrə tədris aparır

Müəllifin bu dildə ən son postları

Bu yazıları da bəyənə bilərsiniz