Serverless Functions in C#: AWS Lambda with .NET

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Serverless функции на C#: Полное руководство по AWS Lambda с .NET



Serverless-архитектура становится стандартом для современных приложений. AWS Lambda — один из самых популярных сервисов для выполнения кода без управления серверами. В этой статье мы разберем, как создавать serverless функции на C# с использованием .NET 6/8, настроить окружение, написать эффективный код и развернуть его в облаке.



Что такое AWS Lambda и почему C#?



AWS Lambda — это вычислительный сервис, который запускает ваш код в ответ на события и автоматически управляет вычислительными ресурсами. C# с .NET — отличный выбор для Lambda благодаря:



  • Высокой производительности — .NET 6+ обеспечивает быстрый холодный старт (около 200-500 мс).
  • Знакомому синтаксису — если вы уже пишете на C#, порог входа минимален.
  • Богатой экосистеме — доступны все библиотеки NuGet.
  • Интеграции с AWS — SDK для .NET позволяет легко работать с S3, DynamoDB, SQS и другими сервисами.


Serverless функции на C# идеально подходят для обработки файлов, REST API (через API Gateway), ETL-процессов и микросервисов.



Настройка проекта для AWS Lambda на C#



Для начала работы вам понадобится:

  • .NET SDK 6.0 или выше
  • Учетная запись AWS
  • AWS CLI (рекомендуется)
  • Инструмент dotnet lambda (устанавливается через dotnet tool install -g Amazon.Lambda.Tools)


Создадим новый проект:



dotnet new lambda.EmptyFunction --name MyFirstLambdacd MyFirstLambda


Структура проекта включает:

  • Function.cs — основной файл с логикой.
  • aws-lambda-tools-defaults.json — настройки деплоя.
  • MyFirstLambda.csproj — файл проекта с необходимыми пакетами.


Убедитесь, что в .csproj есть ссылки на пакеты:



<PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /><PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />


Написание первой serverless функции на C#



Откроем Function.cs и напишем простой обработчик, который принимает имя и возвращает приветствие:



using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;

[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]

public class Function{ public string FunctionHandler(Input input, ILambdaContext context) { context.Logger.LogInformation($"Обработка запроса для: {input.Name}"); return $"Привет, {input.Name}! Время: {DateTime.UtcNow}"; }}

public class Input{ public string Name { get; set; }}


Разберем ключевые моменты:

  • LambdaSerializer — указывает, как сериализовать/десериализовать JSON. SystemTextJson — быстрый и современный вариант.
  • ILambdaContext — предоставляет информацию о текущем вызове: остаток времени, логгер, ID запроса.
  • Input — простой POCO-класс для входных данных.


Для тестирования локально используйте:



dotnet lambda invoke-function MyFirstLambda --payload "{\\"Name\\": \\"Мир\\"}"


Работа с AWS сервисами из Lambda



Реальная сила serverless функций на C# проявляется при интеграции с другими сервисами. Рассмотрим пример загрузки файла в S3:



using Amazon.S3;using Amazon.S3.Model;using Amazon.Lambda.Core;

public class S3Function{ private readonly IAmazonS3 _s3Client; public S3Function() { _s3Client = new AmazonS3Client(); // использует IAM роль Lambda }

Blogs

Book Recommendations