Header Ads

Como executar uma API Web ASP.NET na AWS com Lambda e API Gateway

O AWS Lambda é uma plataforma sem servidor para executar código sem gerenciar o hardware subjacente. É muito flexível e pode executar muitas cargas de trabalho diferentes, incluindo APIs C # completas usando ASP. NET Core.

Espere, você pode fazer isso no Lambda?

Sim! Você pode não apenas executar funções com base em tempos de execução . NET, mas também responder a solicitações usando todas as ferramentas fornecidas a você pelo ASP. NET. Você pode criar APIs que se comunicam com bancos de dados, como o banco de dados RDS gerenciado da AWS, ao mesmo tempo em que são perfeitamente escalonáveis ​​em funções sem servidor.

Embora as versões anteriores do ASP. NET executem no . NET Framework (o mais antigo, o tempo de execução somente para Windows) sejam conhecidas por serem volumosas, a nova pilha do ASP. NET Core em execução no . NET Core 3.1 e no . NET 5 mais recente fizeram melhorias significativas de desempenho e uso de memória.

Isso normalmente não seria possível, pois o ASP. NET usa seu próprio servidor da web HTTP chamado Kestrel para responder às solicitações, que não funcionaria como está manipulado pelo tempo de execução do Lambda. No entanto, a AWS forneceu uma solução engenhosa para isso; tradicionalmente, uma configuração de ASP. NET geralmente envolve seu servidor da Web Kestrel por trás de IIS ou NGINX. Isso se comunica com a estrutura ASP. NET para lidar com solicitações.

A AWS criou uma classe de proxy, Amazon. Lambda. AspNetCoreServer, que cuida de tudo na frente do ASP. NET. Isso permite que você reutilize a maior parte do seu código enquanto conecta sua API ao Lambda.

Publicidade

Isso significa que você precisará usar o API Gateway, mas isso não é uma coisa ruim, pois o API Gateway é muito útil para gerenciar sua API. Ele permite que você defina estritamente todas as regras que fazem sua API funcionar; é claro, você precisará ter seu aplicativo ASP. NET configurado para lidar com todas as solicitações do API Gateway.

No entanto, esta não será a melhor experiência em termos de tempo de inicialização. Em comparação com linguagens de script leves, como JavaScript e Python, os pacotes . NET têm muito mais sobrecarga. Existem alguns truques que você pode fazer para acelerar o desempenho, e você pode até pagar por isso com capacidade provisionada. Caso contrário, você deve estar preparado para tempos de inicialização a frio em torno de 1 a 2 segundos.

Isso não significa que cada execução levará 2 segundos para carregar a página. Assim que o primeiro carregamento acontece, tudo é inicializado e é mantido “ quente ” em Lambda por 5 minutos. Se outra pessoa solicitar, a função tratará a solicitação como normalmente faria em um servidor real.

Configurando ASP. NET

AWS inclui um gerador para projetos ASP. NET Lambda que é pré-configurado com o código padrão e implantação no CloudFormation. Recomendamos que você comece aqui, teste as coisas e, em seguida, mova seu código de API, mas se você quiser encaixá-lo em um projeto existente, a AWS tem um guia para isso também.

Você precisará da extensão AWS Toolkit for Visual Studio instalada, que pode ser gerenciada em “ Extensões ” na barra de menu. Isso é o que contém os modelos de projeto para aplicativos AWS.

Na tela inicial principal do Visual Studio, crie um novo projeto:

Publicidade

Você provavelmente desejará colocar isso em sua própria solução, então selecione “ Solução em branco ” em “ Outro. ”

Em seguida, você pode clicar com o botão direito no painel de arquivos para adicionar um novo projeto e selecionar “ AWS Serverless Application, ” ou “ Aplicativo sem servidor AWS com testes, ” o que você preferir.

Certifique-se de que esteja em C #, a menos que queira usar F # por algum motivo.

Lembre-se também de que este é um “ Aplicativo sem servidor ” projeto, que gerencia todos os recursos por meio do serviço de infraestrutura como código da AWS, CloudFormation. Se você quiser apenas fazer algumas funções do Lambda, há um projeto para isso também.

Você será levado a um submenu onde poderá escolher o tipo de planta que deseja construir. Selecione “ ASP. NET Core Web API ” e crie o projeto.

Na maior parte, isso é configurado como um projeto ASP. NET padrão. A principal diferença é que o Program. cs tradicional é substituído por LambdaEntryPoint. cs como o ponto de entrada principal e contém a classe de shim que conecta o código da AWS ao ASP. NET IWebHostBuilder, que é usado para iniciar o aplicativo.

Publicidade

Quando estiver tudo pronto e funcionando, você precisará copiar seus controladores, modelos e serviços e substituir Startup. cs pela sua configuração.

Usando sua API

Para implantar este projeto, a AWS inclui opções de publicação integradas usando a AWS Toolkit Extension. Clique com o botão direito em seu projeto e selecione “ Publicar no AWS Lambda … ”

Você precisará fornecer um intervalo para fazer o upload e definir um nome para a implantação do CloudFormation.

O upload e a publicação levará um segundo, mas você poderá acessar o AWS Lambda Management Console para visualizar sua função. Ele terá um nome gerado automaticamente usando o nome da pilha CloudFormation como prefixo.

Em Configuração > Gatilhos, você pode ver todos os gatilhos do API Gateway que chamam esta função e testá-los por si mesmo usando o endpoint.

Publicidade

Você também pode visualizar a pilha CloudFormation completa que é criada automaticamente usando sua configuração.

Se quiser alterá-lo, você precisará editar o serverless. template em seu projeto. Para obter mais informações, você pode consultar nosso guia sobre como usar o AWS CloudFormation.

RELACIONADO: Codifique sua infraestrutura AWS com CloudFormation

Nenhum comentário