Construindo aplicativos sem servidor com funções do Azure e soluções .NET

Publicados: 2023-09-21

Construindo aplicativos sem servidor com funções do Azure e soluções .NET

A computação sem servidor é um modelo de execução em nuvem que permite aos desenvolvedores criar e executar aplicativos e serviços sem pensar em servidores. Com o serverless, os aplicativos não dependem de manter os servidores em execução: o provedor de nuvem gerencia dinamicamente a alocação e o provisionamento dos servidores. Isso permite que os desenvolvedores se concentrem na codificação da lógica de negócios, em vez do gerenciamento de servidores.

O Microsoft Azure Functions é um serviço de computação sem servidor para criar e hospedar endpoints da Web e trabalhos de processamento em segundo plano sem precisar provisionar ou gerenciar servidores. Com o Azure Functions, você pode executar código sob demanda em resposta a eventos sem precisar provisionar ou gerenciar explicitamente a infraestrutura. Nesta postagem do blog, exploraremos como criar aplicativos sem servidor com Azure Functions usando soluções .NET, inclusive aproveitando os serviços de desenvolvimento ASP.NET .

O que são funções do Azure?

O Azure Functions permite executar código na nuvem sem implantar ou gerenciar infraestrutura. Com o Functions, você escreve apenas o código necessário para o problema em questão, sem se preocupar com o gerenciamento de servidores. O Azure gerencia toda a infraestrutura e servidores para você.

Alguns aspectos e benefícios principais do Azure Functions:

  • Orientado a eventos: as funções são acionadas por eventos de muitos serviços do Azure e de terceiros. Isso inclui solicitações HTTP, temporizadores, filas, APIs sem servidor e muito mais. Você pode executar o código em resposta a esses eventos.
  • Dimensiona automaticamente: o Azure gerencia e dimensiona funções automaticamente com base na taxa de solicitação recebida e na carga de processamento. Você não precisa provisionar e dimensionar servidores manualmente.
  • Pagamento por execução: você paga apenas pelos recursos de computação necessários para executar seu código. Não há cobranças de inatividade quando suas funções não estão em execução.
  • Vários idiomas: o Functions oferece suporte a C#, JavaScript, Python, PowerShell, Java e muito mais. Você pode desenvolver funções no seu idioma preferido.
  • Experiência sem servidor: com o Functions, você se concentra em escrever código e deixa o Azure cuidar de todo o provisionamento, configuração e gerenciamento do servidor. Você obtém uma verdadeira experiência sem servidor.

Desenvolvendo funções .NET localmente

Para desenvolver funções .NET localmente, você precisa das Ferramentas Principais do Azure Functions, que é uma interface de linha de comando para desenvolver, testar e implantar o Azure Functions localmente e no Azure.

Para configurar o ambiente de desenvolvimento:

  1. Instale a versão mais recente do SDK do .NET Core
  2. Instale as ferramentas principais do Azure Functions usando a ferramenta dotnet install -g Microsoft.Azure.WebJobs.Script.WebHost
  3. Crie um diretório para o projeto do aplicativo de funções e execute func init
  4. Isso criará um projeto de amostra de funções com um modelo de função

Agora você pode adicionar código de função, testá-lo localmente e publicar no Azure usando a CLI func. Adicione um arquivo run.csx para uma função C# acionada por HTTP:

Fonte {csharp}

cópia de

#r “Newtonsoft.Json”

usando Microsoft.AspNetCore.Mvc;

usando Microsoft.Extensions.Primitives;

usando Newtonsoft.Json;

usando System.Net;

usando System.Threading.Tasks;

tarefa assíncrona estática pública <IActionResult> Run (requisição HttpRequest, log ILogger)

{

log.LogInformation(“A função de gatilho HTTP C# processou uma solicitação.”);

string nome = req.Query[“nome”];

string requestBody = aguarda novo StreamReader(req.Body).ReadToEndAsync();

dados dinâmicos = JsonConvert.DeserializeObject(requestBody);

nome = nome ?? dados?.nome;

nome de retorno! = nulo

? (ActionResult)new OkObjectResult($”Olá, {nome}”)

: new BadRequestObjectResult(“Por favor, passe um nome na string de consulta ou no corpo da solicitação”);

}

Teste-o localmente executando func host start que inicia o gateway de funções em seu host local. Agora você pode acioná-lo usando o Postman ou o navegador com http://localhost:7071/api/HttpExample?name=John.

Escolhendo gatilhos e vinculações do Azure Functions

As Funções do Azure dão suporte a muitas fontes e alvos de eventos diferentes, chamados gatilhos e associações. Escolher os gatilhos e ligações corretos é importante com base no seu caso de uso.

Alguns gatilhos comuns em Funções são:

  • Gatilho HTTP: para construir APIs REST e endpoints da web. O código é acionado por solicitações HTTP.
  • Gatilho de timer: Para trabalhos agendados que são executados de acordo com uma programação, por exemplo, a cada 5 minutos.
  • Queue Trigger: Para processar mensagens de filas de armazenamento.
  • Blob Trigger: Para reagir a blobs novos ou atualizados no armazenamento de Blobs do Azure.

As ligações permitem que as funções interajam com armazenamentos e serviços de dados externos. As ligações comuns incluem:

  • Fila de armazenamento: para enviar mensagens para filas de armazenamento.
  • Armazenamento de Blobs: para ler e gravar no armazenamento de Blobs do Azure.
  • Cosmos DB: para consultar e modificar documentos no serviço de banco de dados Azure Cosmos DB.
  • Barramento de Serviço: Para lidar com mensagens de filas e tópicos do Barramento de Serviço do Azure.

A escolha do gatilho e das ligações corretas ajuda a construir soluções ponta a ponta, integrando diferentes funções com dados e serviços.

Usando funções duráveis

As Funções Duráveis ​​permitem escrever funções com estado que permitem que sequências de operações sejam realizadas de forma confiável, mesmo em caso de falhas ou reinicializações. Ele permite estruturar fluxos de trabalho de longa duração como máquinas de estado.

Por exemplo, você pode criar um fluxo de trabalho usando funções duráveis ​​que consiste em:

  • Função orquestradora: atua como uma máquina de estado que coordena a execução de funções de atividade na ordem adequada.
  • Funções de atividade: pequenas unidades de trabalho independentes que podem ser chamadas por funções do orquestrador.

Os benefícios do uso de funções duráveis ​​incluem:

  • Novas tentativas confiáveis: as funções duráveis ​​repetem automaticamente as funções de atividade se elas falharem.
  • Chamadas assíncronas: a função orquestradora pode executar funções de atividade de forma assíncrona e aguardar sua conclusão.
  • Pontos de verificação: o estado é verificado continuamente para que os fluxos de trabalho possam ser restaurados mesmo após reinicializações ou falhas do aplicativo.

Vejamos um fluxo de trabalho simples que orquestra duas atividades:

Fonte {csharp}

cópia de

[FunctionName(“Orquestrador”)]

tarefa assíncrona estática pública RunOrchestrator (

[OrchestrationTrigger] Contexto IDurableOrchestrationContext)

{

var saída1 = aguardar context.CallActivityAsync<string>(“DotNetActivity”, “Olá”);

var saída2 = aguardar context.CallActivityAsync<string>(“DotNetActivity”, saída1);

//retorna o resultado

retornar saída2;

}

[NomedaFunção(“DotNetActivity”)]

tarefa estática pública<string> Run(

Entrada de string [ActivityTrigger],

Registro do ILogger)

{

log.LogInformation($”Função DotNetActivity processada: {input}”);

retornar Task.FromResult(input.ToUpper());

}

Funções Duráveis ​​permitem dividir processos complexos em fluxos de trabalho confiáveis.

Melhores práticas para desenvolvimento do Azure Functions

Algumas práticas recomendadas a serem seguidas para o desenvolvimento do Azure Functions:

  • Use injeção de dependência: serviços de injeção de dependência em funções para melhor testabilidade.
  • Evite processos de longa execução: as funções destinam-se a executar código em pequenas unidades de processamento. Mantenha a execução do código curta.
  • Use tipos de dados imutáveis: as funções não têm estado, portanto, evite tipos mutáveis/efeitos colaterais que podem causar problemas.
  • Tratamento centralizado de erros: adicione uma lógica comum de tratamento de erros em vez de tratar erros individualmente em todos os lugares.
  • Registro estruturado: o registro padronizado ajuda na depuração, monitoramento e trilhas de auditoria.
  • Limitação e novas tentativas: lide com erros de limitação implementando novas tentativas com esperas exponenciais.
  • Versionamento: versão forte de gatilhos, ligações e entradas/saídas para evitar alterações significativas.
  • Monitoramento e instrumentação: use ferramentas como Application Insights para registrar em log, monitorar desempenho e análise de uso.
  • Use vinculações de contexto: aproveite as vinculações de contexto para acessar coisas como configurações de aplicativos sem dependências adicionais.

Seguir essas práticas recomendadas ajuda a criar aplicativos sem servidor robustos, confiáveis ​​e escalonáveis ​​com o Azure Functions.

Implantando funções no Azure

Quando as funções estiverem prontas, você poderá implantá-las no Azure por meio da CLI do Azure, do PowerShell, do Visual Studio ou diretamente da CLI das ferramentas principais do Azure Functions:

cópia de

func azure functionapp publicar <nome do aplicativo de função>

Isto publicará a pasta do projeto de funções em um aplicativo de funções do Azure. Alguns benefícios principais da implantação de funções no Azure incluem:

  • Escalabilidade automática – As funções são escalonadas com base no volume de solicitações recebidas ou nos acionadores de tempo.
  • Alta disponibilidade – Múltiplas instâncias em datacenters fornecem alta disponibilidade.
  • Monitoramento e registro – Use ferramentas como Application Insights para monitorar desempenho, erros, etc.
  • Plataforma sem servidor – Não há servidores para provisionar/gerenciar. Você apenas se concentra no código.
  • Implantação contínua – Use pipelines de CI/CD para implantação automatizada em alterações de código.

O Azure lida com toda a infraestrutura, evita custos ociosos e fornece uma plataforma totalmente sem servidor para executar aplicativos sem servidor em escala de maneira confiável.

Conclusão

A computação sem servidor com Azure Functions permite que os desenvolvedores se concentrem na lógica de negócios enquanto transferem toda a infraestrutura e gerenciamento de operações para o Azure. O suporte nativo ao desenvolvimento .NET, incluindo a opção de contratar desenvolvedores ASP.NET Core , permite criar soluções robustas sem servidor com facilidade em C#. Com gatilhos, vinculações e funções duráveis, os desenvolvedores podem criar arquiteturas e fluxos de trabalho orientados a eventos de ponta a ponta como funções sem estado e com estado. Combinado com as práticas recomendadas, o Azure Functions permite criar e implantar aplicativos sem servidor na nuvem com simplicidade e escala.