Rodando programas .NET sem a necessidade de um servidor na plataforma da AWS Lambda.

A Amazon facilita a criação de funções Lambda em C# por meio de recursos como Lambda Annotations, os quais utilizam geradores de código C# para produzir código de um endpoint da API REST. Além disso, está previsto o suporte para .NET 8 em breve.

Observar o progresso recente do .NET tem sido interessante. Com a transição para uma plataforma de código aberto, a promessa de plataforma cruzada foi finalmente cumprida. Além disso, o suporte ao Linux tem impulsionado sua presença na computação em nuvem, com as versões mais recentes oferecendo suporte ao tempo de execução de contêiner.
Ter a capacidade de ser executado em diferentes plataformas significa que é possível rodar o código .NET em qualquer serviço de nuvem. Basta ter uma máquina virtual Linux compatível como host ou um ambiente Kubernetes que suporte contêineres. Com isso, é possível executar o código .NET em infraestruturas de serviço, como a AWS, ou em ambientes Kubernetes gerenciados, como o Google Kubernetes Engine (GKE). O código pode ser facilmente migrado entre diferentes plataformas, utilizando APIs REST para acessar os serviços disponíveis. Além disso, em alguns casos, existem SDKs disponíveis, fornecidos pelo provedor de plataforma ou desenvolvidos pela comunidade.
A capacidade de portabilidade é positiva, pois possibilita a transferência de dados entre diferentes plataformas na nuvem com poucas alterações no código, desde que não sejam utilizados aplicativos específicos de um serviço. No entanto, essa portabilidade apresenta limitações, pois impede a utilização dos recursos de plataformas sem servidor que permitem aproveitar a escalabilidade e os benefícios econômicos da computação em nuvem. Sem esses recursos, a movimentação de dados entre plataformas se torna apenas uma transferência simples, sem explorar todo o potencial disponível.
Utilizando a linguagem C# na plataforma AWS Lambda.
Se você está utilizando AWS Lambda para seus aplicativos sem servidor, você tem tido a possibilidade de utilizar .NET com C# por um período considerável, juntamente com JavaScript, Go, Python, Java, Ruby, Rust, PowerShell e TypeScript. O suporte da Amazon começou com o .NET Core e foi atualizado com versões posteriores da plataforma. Neste momento, tanto o .NET 6 quanto o .NET 7 são suportados. É recomendável optar pelo uso do .NET 6 no momento, uma vez que o .NET 7 está disponível somente para contêineres hospedados.
Semelhante ao Azure Functions, o AWS Lambda é uma plataforma de computação sem servidor baseada em operações orientadas a eventos. As funções do Lambda são acionadas por eventos, frequentemente provenientes de outros serviços da AWS, e podem ser empregadas para diversas finalidades, como processamento de dados, processamento de fluxo, criação de APIs para aplicações web e móveis, e suporte a implementações de IoT, entre outras possibilidades.
A principal característica da AWS Lambda é que, da mesma forma que o Azure Functions, não se tem domínio sobre os recursos de computação utilizados. O serviço se expande conforme necessário e você é cobrado pelos recursos consumidos.
Criando funções Lambda no ambiente .NET
Utilizar .NET com AWS Lambda não implica em modificação na seleção de ferramentas de desenvolvimento. Pode-se empregar o Visual Studio, Visual Studio Code ou outro ambiente de desenvolvimento integrado. Basta instalar um conjunto de modelos AWS do NuGet por meio do .NET CLI.
No centro das operações C# da AWS está um controlador de função Lambda, que é a função que o serviço invoca para executar seu código. Esse controlador é fundamental para uma função Lambda, pois fornece um evento e um contexto ao código. O evento contém informações sobre o evento ocorrido, sendo o mais útil, enquanto o contexto oferece detalhes sobre o ambiente de execução. É necessário serializar os dados como um objeto JSON para utilizá-los no código.
Entender o contexto do objeto é crucial para assegurar o bom funcionamento do seu código em C#. A valiosa informação fornecida pelo tempo de execução inclui o tempo disponível antes de um timeout e a recuperação de recursos pela AWS. Esses dados podem ser utilizados para desenvolver controles adequados de tratamento de erros, cancelamento de tarefas e envio de notificações caso um timeout esteja próximo de ser acionado.
O código C# na AWS Lambda pode ser acionado de duas formas distintas. Uma delas consiste em disponibilizar uma função como uma biblioteca de classe, definindo os detalhes do serviço com os nomes das classes e montagem necessários, bem como o método que será ativado ao acionar a função. A outra alternativa é fornecer um conjunto executável que será acionado quando chamado.
Simplificação da criação de funções em C# com adição de conceitos Lambda.
A Amazon oferece ferramentas extras que podem facilitar a criação de uma função em C#. O framework Lambda Annotations permite ocultar grande parte do código específico do Lambda de sua lógica de negócios, utilizando geradores de código para criá-lo a partir de um caminho de API REST e construir os manipuladores Lambda necessários. Um exemplo de como construir um projeto utilizando o Annotations Framework pode ser encontrado no kit de ferramentas AWS para o Visual Studio, disponível como parte dos pacotes planejados.
Por meio do Quadro de Notas, é possível programaticamente estabelecer características de funções Lambda, como a inclusão de limites de tempo e de memória durante a definição inicial da função. Depois que seu código estiver finalizado, é simples construí-lo e implantá-lo diretamente na AWS a partir do Visual Studio.
Uma alternativa disponível com as funcionalidades do .NET 7 é a utilização da compilação AOT (ahead-of-time) para diminuir os períodos de inicialização. Para isso, é necessário executar o AOT no ambiente de destino, compilando o código em um recipiente do Amazon Linux e utilizando o Docker como hospedeiro. Esse processo é simples, envolvendo o uso do .NET CLI e do Lambda templating para baixar a imagem Linux. A compilação ocorre de forma automática durante a implementação do seu código na AWS.
Você não precisa se restringir a aplicativos C# independentes. Lambda também pode ser empregado para hospedar e executar aplicações web ASP.NET principais, fornecendo uma infraestrutura de back-end sob demanda para sites que têm um uso relativamente baixo ou que precisam lidar com picos de demanda.
Utilizando a versão 8 do .NET na plataforma AWS Lambda.
A Amazon está trabalhando para implementar suporte para hosts AWS Lambda com .NET 8, e a versão final está prevista para ser lançada em breve. De acordo com um problema identificado no GitHub, há vários componentes em movimento que precisam ser integrados para garantir a estabilidade a longo prazo do tempo de execução gerenciado. Além de criar um novo host com base nos lançamentos mais recentes da distribuição interna do Linux da Amazon, a equipe .NET também está aprimorando e testando um conjunto atualizado de APIs e ferramentas CLI para facilitar a construção e atualização de Lambdas.
O ponto final mencionado é relevante, porque a AWS planeja descontinuar o suporte para .NET 6 e .NET 7 em 2024, com um prazo final de atualização para o .NET 6 em fevereiro de 2025. Ao migrar para a versão de suporte de longo prazo do .NET, você garante que seu código continuará sendo suportado tanto pela Microsoft quanto pela Amazon. Já existem algumas ferramentas disponíveis, como uma atualização para o AWS Toolkit for Visual Studio, que possibilita a criação de modelos de tempo de execução personalizados com base no .NET 8 e suporte para uma imagem base de contêiner .NET 8.
Se você pretende utilizar a imagem base do Amazon Linux 3, será necessário replicar o repositório AWS . NET GitHub e criar a imagem em seus próprios ambientes de desenvolvimento. Dessa forma, você poderá testar o código antes de empacotá-lo e implantá-lo na AWS. Uma vez que a AWS conclua suas ferramentas .NET 8, elas serão integradas à plataforma, permitindo que você as utilize como parte de seu procedimento de construção habitual.
O suporte para .NET na AWS através do AWS Lambda amplia suas capacidades. Isso vai além do desenvolvimento tradicional de aplicativos e plataformas nativas em nuvem do Azure. Vale ressaltar que esse suporte é um projeto contínuo, com várias atualizações para manter-se alinhado com o ciclo de vida da NET. Com abstrações eficazes que facilitam o foco no código, a AWS oferece uma abordagem que simplifica a migração de código .NET para outras plataformas de nuvem, incluindo aplicações locais.