基于C#的无服务器函数:使用.NET的AWS Lambda

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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 }

博客

书籍推荐