Crearea de aplicații fără server cu funcții Azure și soluții .NET

Publicat: 2023-09-21

Crearea de aplicații fără server cu funcții Azure și soluții .NET

Calculul fără server este un model de execuție în cloud care permite dezvoltatorilor să construiască și să ruleze aplicații și servicii fără să se gândească la servere. Cu serverless, aplicațiile nu se bazează pe menținerea serverelor în funcțiune - furnizorul de cloud gestionează în mod dinamic alocarea și furnizarea serverelor. Acest lucru permite dezvoltatorilor să se concentreze mai degrabă pe codificarea logicii de afaceri decât pe managementul serverului.

Microsoft Azure Functions este un serviciu de calcul fără server pentru construirea și găzduirea punctelor finale web și a lucrărilor de procesare în fundal fără a fi nevoie să furnizeze sau să gestioneze servere. Cu Azure Functions, puteți rula cod la cerere ca răspuns la evenimente fără a fi necesar să furnizați sau să gestionați în mod explicit infrastructura. În această postare pe blog, vom explora cum să construim aplicații fără server cu Funcții Azure folosind soluții .NET, inclusiv prin utilizarea serviciilor de dezvoltare ASP.NET .

Ce este Azure Functions?

Azure Functions vă permite să rulați cod în cloud fără să implementați sau să gestionați infrastructura. Cu Functions, scrieți doar codul de care aveți nevoie pentru problema în cauză, fără să vă faceți griji cu privire la gestionarea serverelor. Azure gestionează toată infrastructura și serverele pentru dvs.

Câteva aspecte cheie și beneficii ale Azure Functions:

  • Controlat de evenimente: funcțiile sunt declanșate de evenimente din multe servicii Azure și terțe părți. Acestea includ solicitări HTTP, cronometre, cozi, API-uri fără server și multe altele. Puteți executa codul ca răspuns la aceste evenimente.
  • Scadează automat: Azure gestionează și scalează automat funcțiile în funcție de rata de solicitare primită și de sarcina de procesare. Nu trebuie să furnizați și să scalați serverele manual.
  • Plată-pe-execuție: plătiți doar pentru resursele de calcul necesare pentru a rula codul. Nu există taxe de inactivitate atunci când funcțiile dvs. nu rulează.
  • Limbi multiple: Functions acceptă C#, JavaScript, Python, PowerShell, Java și multe altele. Puteți dezvolta funcții în limba preferată.
  • Experiență fără server: cu Functions, vă concentrați pe scrierea codului și lăsați Azure să se ocupe de toate aprovizionarea, configurarea și gestionarea serverului. Obțineți o adevărată experiență fără server.

Dezvoltarea funcțiilor .NET la nivel local

Pentru a dezvolta funcții .NET la nivel local, aveți nevoie de Azure Functions Core Tools, care este o interfață de linie de comandă pentru dezvoltarea, testarea și implementarea funcțiilor Azure atât local, cât și în Azure.

Pentru a configura mediul de dezvoltare:

  1. Instalați cea mai recentă versiune .NET Core SDK
  2. Instalați Azure Functions Core Tools folosind instrumentul dotnet install -g Microsoft.Azure.WebJobs.Script.WebHost
  3. Creați un director pentru proiectul aplicației funcții și rulați func init
  4. Acest lucru va pune la dispoziție un exemplu de proiect de funcții cu un șablon de funcție

Acum puteți adăuga codul funcției, îl puteți testa local și puteți publica în Azure folosind func CLI. Adăugați un fișier run.csx pentru o funcție C# declanșată de HTTP:

Sursa {csharp}

Copie

#r „Newtonsoft.Json”

folosind Microsoft.AspNetCore.Mvc;

folosind Microsoft.Extensions.Primitives;

folosind Newtonsoft.Json;

folosind System.Net;

folosind System.Threading.Tasks;

Public static async Task<IActionResult> Run(HttpRequest req, ILogger log)

{

log.LogInformation(„Funcția de declanșare HTTP C# a procesat o solicitare.”);

nume șir = req.Query[„nume”];

string requestBody = așteaptă un nou StreamReader(req.Body).ReadToEndAsync();

date dinamice = JsonConvert.DeserializeObject(requestBody);

nume = nume ?? date?.nume;

return name != null

? (ActionResult)nou OkObjectResult($”Bună ziua, {name}”)

: new BadRequestObjectResult(„Vă rugăm să treceți un nume pe șirul de interogare sau în corpul cererii”);

}

Testați-l local rulând func host start, care pornește gateway-ul de funcții pe localhost. Acum îl puteți declanșa folosind Postman sau browser cu http://localhost:7071/api/HttpExample?name=John.

Alegerea declanșatoarelor și legăturilor Azure Functions

Azure Functions acceptă multe surse și ținte de evenimente diferite numite declanșatori și legături. Alegerea declanșatoarelor și legăturilor potrivite este importantă în funcție de cazul dvs. de utilizare.

Câteva declanșatori obișnuiți în funcții sunt:

  • HTTP Trigger: pentru construirea de API-uri REST și puncte finale web. Codul este declanșat de solicitările HTTP.
  • Timer Trigger: Pentru joburi programate care rulează conform unui program, de exemplu la fiecare 5 minute.
  • Declanșare coadă: pentru procesarea mesajelor din cozile de stocare.
  • Blob Trigger: pentru a reacționa la blob-uri noi sau actualizate în stocarea blob Azure.

Legăturile permit funcțiilor să interacționeze cu depozitele și serviciile externe de date. Legăturile comune includ:

  • Coadă de stocare: Pentru trimiterea mesajelor către cozile de stocare.
  • Stocare blob: pentru citirea și scrierea în stocarea blob Azure.
  • Cosmos DB: pentru interogarea și modificarea documentelor în serviciul de bază de date Azure Cosmos DB.
  • Service Bus: Pentru gestionarea mesajelor din cozile și subiectele Azure Service Bus.

Alegerea declanșatorului și a legăturilor potrivite ajută la construirea de soluții end-to-end prin integrarea diferitelor funcții cu datele și serviciile.

Utilizarea funcțiilor durabile

Funcțiile durabile permit scrierea de funcții cu stare care permit ca secvențele de operații să fie efectuate în mod fiabil chiar și în caz de defecțiuni sau reporniri. Vă permite să structurați fluxurile de lucru de lungă durată ca mașini de stat.

De exemplu, puteți construi un flux de lucru folosind Funcții durabile care constă în:

  • Funcția de orchestrator: Acționează ca o mașină de stare care coordonează execuția funcțiilor activității în ordinea corectă.
  • Funcții de activitate: mici unități independente de lucru care pot fi apelate de funcțiile de orchestrator.

Beneficiile utilizării funcțiilor durabile includ:

  • Reîncercări de încredere: Durable Functions reîncearcă automat funcțiile de activitate dacă eșuează.
  • Apeluri asincrone: funcția de orchestrator poate rula funcții de activitate în mod asincron și poate aștepta finalizarea acestora.
  • Puncte de control: starea este controlată continuu, astfel încât fluxurile de lucru să poată fi restabilite chiar și după repornirea aplicației sau eșecuri.

Să vedem un flux de lucru simplu care orchestrează două activități:

Sursa {csharp}

Copie

[FunctionName(„Orchestrator”)]

Public static async Task RunOrchestrator(

[OrchestrationTrigger] IDurableOrchestrationContext context)

{

var output1 = await context.CallActivityAsync<string>(„DotNetActivity”, „Salut”);

var output2 = await context.CallActivityAsync<string>(„DotNetActivity”, output1);

// returnează rezultatul

return output2;

}

[FunctionName(„DotNetActivity”)]

public static Task<string> Run(

[ActivityTrigger] intrare șir,

Jurnal ILogger)

{

log.LogInformation($”Funcția DotNetActivity procesată: {input}”);

returnează Task.FromResult(input.ToUpper());

}

Funcțiile durabile permit defalcarea proceselor complexe în fluxuri de lucru fiabile.

Cele mai bune practici pentru dezvoltarea Azure Functions

Câteva bune practici de urmat pentru dezvoltarea Azure Functions:

  • Utilizați injecția de dependență: dependență Injectați servicii în funcții pentru o mai bună testabilitate.
  • Evitați procesele care rulează îndelung: funcțiile sunt menite să ruleze cod pe unități de procesare mici. Păstrați execuția codului scurtă.
  • Utilizați tipuri de date imuabile: funcțiile sunt apatride, așa că evitați tipurile/efectele secundare modificabile care pot cauza probleme.
  • Gestionarea centralizată a erorilor: adăugați o logică comună de gestionare a erorilor, mai degrabă decât gestionarea erorilor individual peste tot.
  • Înregistrare structurată: înregistrarea standardizată ajută la depanare, monitorizare și urmărire de audit.
  • Limitare și reîncercări: gestionați erorile de throttling prin implementarea reîncercărilor cu retrageri exponențiale.
  • Versiune: declanșează puternic versiuni, legături și intrări/ieșiri pentru a evita modificările rupturi.
  • Monitorizare și instrumentare: utilizați instrumente precum Application Insights pentru înregistrare, monitorizarea performanței și analiza utilizării.
  • Utilizați legăturile de context: folosiți legăturile de context pentru a accesa lucruri precum setările aplicației fără dependențe suplimentare.

Respectarea acestor bune practici ajută la construirea de aplicații fără server robuste, fiabile și scalabile cu Azure Functions.

Implementarea funcțiilor în Azure

Odată ce funcțiile sunt gata, le puteți implementa în Azure prin Azure CLI, PowerShell, Visual Studio sau direct din CLI pentru instrumentele de bază Azure Functions:

Copie

func azure functionapp publish <function-app-name>

Acest lucru va publica folderul proiectului de funcții într-o aplicație Azure Function. Câteva beneficii cheie ale implementării funcțiilor în Azure includ:

  • Scalare automată – Funcțiile se scalează pe baza volumului cererilor primite sau a timpului de declanșare.
  • Disponibilitate ridicată – Mai multe instanțe din centrele de date oferă o disponibilitate ridicată.
  • Monitorizare și înregistrare – Folosiți instrumente precum Application Insights pentru a monitoriza performanța, erorile etc.
  • Platformă fără server – Nu există servere de furnizat/administrat. Te concentrezi doar pe cod.
  • Implementare continuă – Utilizați conducte CI/CD pentru implementarea automată a modificărilor codului.

Azure gestionează toată infrastructura, evită costurile inactiv și oferă o platformă complet fără server pentru a rula aplicații fără server la scară fiabilă.

Concluzie

Calculul fără server cu funcții Azure le permite dezvoltatorilor să se concentreze pe logica afacerii în timp ce descarcă întreaga infrastructură și managementul operațiunilor în Azure. Suportul nativ pentru dezvoltare .NET, inclusiv opțiunea de a angaja dezvoltatori ASP.NET Core , permite construirea de soluții robuste fără server cu ușurință în C#. Cu declanșatoare, legături și Funcții durabile, dezvoltatorii pot construi arhitecturi și fluxuri de lucru bazate pe evenimente end-to-end ca funcții fără stat și cu stare. Combinate cu cele mai bune practici, Azure Functions permite construirea și implementarea aplicațiilor fără server în cloud cu simplitate și scară.