course
Azure Functions fac parte din serviciul Microsoft de computing fără servere. Îți permit pur și simplu să rulezi bucăți mici de cod ca răspuns la evenimente, fără să fii nevoit să gestionezi tu serverele.
De exemplu, o funcție poate rula atunci când sosește o cerere HTTP, când un fișier este încărcat în storage sau chiar când se atinge o oră programată.
„Fără servere” nu înseamnă neapărat că nu există servere. Înseamnă că Azure îți gestionează infrastructura. Azure se ocupă de provizionare, scalare și mentenanță în fundal.
În acest ghid voi acoperi elementele de bază: trigger-ele, binding-urile, opțiunile de găzduire și un exemplu practic ca să începi.
Ce sunt Azure Functions?
O Azure Function este, pur și simplu, o bucată mică de cod care rulează atunci când este declanșată de un eveniment ales de tine. Practic, tu scrii logica, iar Azure se ocupă de restul.
Există trei idei care definesc acest model.
- Execuția bazată pe evenimente permite rularea codului doar când se întâmplă ceva, nu tot timpul.
- Scalarea automată permite Azure să adauge sau să elimine resurse de calcul în funcție de cerere.
- Prețul bazat pe consum îți permite, în unele planuri de găzduire, să plătești doar pentru timpul în care codul tău chiar rulează.
Ideal, o singură funcție face o sarcină atomică, cum ar fi redimensionarea unei imagini sau procesarea unui mesaj. O Function App este containerul care conține una sau mai multe funcții. Ea gestionează setările comune, precum configurarea și deployment-ul, pentru toate funcțiile din interior.
Cum funcționează Azure Functions
Ciclul de viață al unei funcții urmează un tipar simplu, astfel:
- Are loc un eveniment, cum ar fi un upload de fișier sau un apel HTTP.
- Un trigger detectează evenimentul și pornește imediat funcția.
- Funcția își rulează codul.
- Binding-urile conectează funcția la alte servicii care citesc inputul sau trimit outputul necesar.
- Azure gestionează resursele de calcul din spatele acestui proces, desigur, în funcție de planul de găzduire ales.
Acest flux este exact același indiferent de limbaj sau opțiunea de găzduire (pentru majoritatea pașilor menționați). Doar trigger-ul, codul și binding-urile se schimbă.
Trigger-ele în Azure Functions
Fiecare funcție are exact un singur trigger. Trigger-ul definește cum pornește exact funcția. Iată cele mai frecvente tipuri pe care ar trebui să le cunoști:
- HTTP Trigger: Rulează o funcție atunci când primește o cerere HTTP. Este des folosit la construirea de API-uri.
- Timer Trigger: Rulează o funcție la intervale programate, de exemplu, la fiecare oră sau o dată pe zi.
- Blob Storage Trigger: Rulează o funcție când un fișier este adăugat sau modificat în Azure Blob Storage.
- Queue Trigger: Rulează o funcție când sosește un mesaj nou într-o coadă.
- Event Hub Trigger: Rulează o funcție ca răspuns la un flux de evenimente. Este foarte util pentru volume mari de date.
Binding-urile în Azure Functions
Cred că trigger-ele și binding-urile sunt adesea confundate, dar, deși par similare, au roluri complet diferite. Un trigger pornește o funcție, în timp ce un binding conectează funcția la date, citindu-le sau trimițându-le mai departe.
Input bindings
Aici, practic oferi funcției tale date fără să scrii cod de integrare personalizat. De exemplu, o funcție poate citi automat un înregistrare dintr-o bază de date doar declarând binding-ul.
Output bindings
Acestea îți permit să trimiți rezultatul funcției în altă parte. De pildă, poți folosi output bindings pentru a scrie un mesaj procesat într-o coadă.
Iată un exemplu util: Un trigger Blob Storage pornește o funcție când este încărcată o imagine. Un output binding salvează apoi imaginea redimensionată într-un alt container de stocare. Procedând astfel, nu este nevoie de cod manual pentru clientul de stocare.
Cum să creezi prima ta Azure Function
Iată un exemplu simplu de funcție declanșată de HTTP care returnează un salut. Fluxul este următorul:
- Creează o Function App. Acesta este containerul pentru funcția ta în Azure.
- Alege un runtime și selectează limbajul în care vrei să scrii codul.
- Creează funcția pentru a adăuga o nouă funcție în Function App-ul tău.
- Selectează HTTP trigger pentru ca funcția să răspundă la solicitări web.
- Adaugă o funcționalitate simplă, cum ar fi citirea unui nume din cerere și returnarea „Salut, [name].”
- Rulează și testează funcția folosind instrumentele de testare incluse sau trimițând pur și simplu o cerere din browser.
- Fă deploy în Azure ca să fie live și accesibilă.
Am făcut intenționat acest exemplu foarte mic ca să-ți arăt tiparul și să-ți las creativitatea să facă restul.
Limbaje acceptate de Azure Functions
Azure Functions acceptă multe limbaje, precum:
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
Modelele de suport și dezvoltare pot varia în funcție de limbaj și versiune. De aceea, îți recomand să verifici documentația Azure actuală înainte de a începe un proiect nou, deoarece aceste detalii se schimbă frecvent.
Opțiuni de găzduire pentru Azure Functions
Nu fiecare Azure Function rulează la fel. Prin urmare, Azure oferă planuri de găzduire diferite, iar fiecare face compromisuri diferite pe care le alegi în funcție de cazul tău specific. Aceste compromisuri sunt:
- Scalare: Unele planuri scalează automat și instantaneu, în timp ce altele au nevoie de mai mult control manual.
- Comportament la pornire: Unele planuri mențin funcțiile „calde”. Asta înseamnă, pur și simplu, că sunt gata să ruleze instant, în timp ce altele pornesc funcțiile la cerere.
- Rețelistică: Unele planuri acceptă funcții avansate de rețea, cum ar fi conectarea la o rețea virtuală privată, în timp ce altele nu.
- Cost: Modelele de preț diferă drastic, de la plată per execuție până la costuri lunare fixe.
Scalare și cold start în Azure Functions
Mai sunt două concepte care contează atunci când funcția ta rulează în producție. Acestea sunt:
Scalare automată
Aici, Azure monitorizează încărcarea pe funcția ta și, când cererea crește, adaugă mai multe instanțe de calcul, iar când cererea scade, le elimină. Nu trebuie să gestionezi asta manual.
Cold starts
Dacă o funcție nu a rulat recent, s-ar putea să aibă nevoie de un moment ca să pornească înainte de a putea prelua o nouă cerere. Această întârziere se numește cold start. Unele planuri de găzduire reduc sau evită acest lucru menținând instanța „caldă”, cum am menționat.
Cazuri de utilizare comune pentru Azure Functions
Modelul bazat pe evenimente se potrivește multor probleme întâlnite zi de zi. În special:
API-uri și webhook-uri
Pentru a gestiona cererile HTTP primite fără să fie nevoie să rulezi un server web complet non-stop.
Procesare de fișiere și imagini
Declanșează o funcție ori de câte ori un fișier ajunge în storage, apoi îl redimensionezi, convertești sau doar îl scanezi.
Joburi programate
Rulează task-uri de curățare, rapoarte sau remindere la intervale, fără nevoia unui server dedicat, mereu pornit.
Fluxuri de procesare a datelor
Procesează mesaje sau evenimente pe măsură ce sosesc, pas cu pas.
IoT și procesarea evenimentelor
Gestionează volume mari de date din senzori sau dispozitive pe măsură ce sunt transmise.
Task-uri de fundal
Externalizează munca lentă sau ocazională, cum ar fi trimiterea de emailuri, ca să nu blochezi aplicația ta principală.
Monitorizarea și depanarea Azure Functions
Odată ce o funcție este live, ai nevoie de vizibilitate asupra modului în care performează.
Poți, de exemplu, să vezi jurnalele care salvează ce s-a întâmplat în fiecare rulare, lucru foarte util pentru debugging. Poți de asemenea să verifici Application Insights în instrumentele Azure, care practic urmăresc performanța, cererile și erorile într-un singur loc central.
Ar trebui să urmărești și eșecurile de invocare ca să știi când și de ce nu s-a finalizat o funcție. Monitorizarea performanței te ajută, de asemenea, să depistezi funcțiile lente înainte să devină o problemă și, desigur, comportamentul de retry poate fi configurat astfel încât execuțiile eșuate să încerce din nou automat.
Concluzie
Azure Functions îți oferă o modalitate de a rula cod ca răspuns la evenimente, fără să gestionezi serverele dedesubt. Trigger-ele decid când pornește o funcție. Binding-urile, pe de altă parte, fac ușoară conectarea acelei funcții la alte servicii fără cod de integrare suplimentar.
Pe măsură ce treci de la o funcție de test simplă la ceva care rulează în producție, alegerile de găzduire și scalare contează mult mai mult. Planul potrivit nu îți afectează doar costul, ci și viteza și fiabilitatea.
Întrebări frecvente
Ce sunt Azure Functions?
Un serviciu serverless care rulează bucăți mici de cod ca răspuns la evenimente, fără ca tu să gestionezi serverele.
Ce declanșează o Azure Function?
Evenimente precum cereri HTTP, cronometre, încărcări de fișiere sau mesaje în cozi.
Care este diferența dintre un trigger și un binding?
Un trigger pornește funcția. Un binding o conectează la alte servicii pentru input sau output.
Ce este un cold start?
O scurtă întârziere când o funcție pornește după ce a stat inactivă.
Ce limbaje acceptă Azure Functions?
C#, JavaScript/TypeScript, Python, Java și PowerShell.