Начало работы с AWS Lambda на C#

Привет! Сегодня мы обсудим создание бессерверных приложений с помощью AWS Lambda и C#. Да, вы не ослышались. Теперь мы можем использовать возможности C# для создания бессерверных приложений на платформе AWS, не беспокоясь об инфраструктуре, серверах или даже операционных системах.

Но прежде чем мы углубимся в детали, давайте сделаем шаг назад и поговорим о том, что такое бессерверные вычисления. По своей сути бессерверные вычисления — это способ создания и запуска приложений без необходимости управления серверами. Вместо того, чтобы беспокоиться о масштабировании, обслуживании и инфраструктуре, вы можете сосредоточиться исключительно на написании кода, а все остальное сделает поставщик облачных услуг.

Теперь поговорим об AWS Lambda. Это вычислительная служба, которая позволяет вам запускать свой код без подготовки или управления серверами. Вместо этого вы можете загрузить свой код в Lambda и позволить ему сделать все остальное. Кроме того, он автоматически масштабирует ваше приложение в ответ на входящий трафик и взимает плату только за потребленное вычислительное время.

Итак, без лишних слов, давайте углубимся в бессерверные вычисления с помощью AWS Lambda и C#.

Сначала мы должны настроить нашу среду для создания бессерверных приложений с помощью AWS Lambda и C#. К счастью, это достаточно простой процесс.

Во-первых, нам нужно установить и настроить AWS Toolkit для Visual Studio. Набор инструментов AWS — это набор инструментов, упрощающих разработку, отладку и развертывание приложений .NET на платформе AWS. Он включает в себя проводник AWS, позволяющий просматривать ресурсы AWS, мастер функций Lambda, помогающий создавать новые функции, и набор шаблонов, которые можно использовать для быстрого начала работы.

Установите AWS Toolkit для Visual Studio, следуя инструкциям здесь.

После установки и настройки AWS Toolkit мы можем создать новую функцию AWS Lambda в Visual Studio. Для этого мы можем использовать мастер функций Lambda, включенный в набор инструментов AWS. Мастер проведет нас через создание новой функции, настройку ее триггеров и разрешений, а также настройку переменных среды выполнения и среды.

Теперь, когда наша среда настроена, давайте рассмотрим несколько примеров кода C# для функций AWS Lambda.

Во-первых, создайте простую функцию Hello World, которая отвечает на входящий HTTP-запрос.

Вот как будет выглядеть код:

using Amazon.Lambda.Core;
using Amazon.Lambda.APIGatewayEvents;

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace HelloWorld
{
    public class Function
    {
        public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            return new APIGatewayProxyResponse
            {
                StatusCode = 200,
                Body = "Hello, world!",
                Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }
            };
        }
    }
}

Во-первых, давайте разберем код.

Ключевое слово using позволяет нам импортировать пространства имен в наш код, предоставляя нам доступ к классам и функциям, которые они содержат. В данном случае мы импортируем пространства имен Amazon.Lambda.Core и Amazon.Lambda.APIGatewayEvents, которые включают классы, которые нам нужно использовать в нашей функции.

Ключевое слово namespace позволяет нам объявить пространство имен для нашего кода. В данном случае мы объявляем пространство имен с именем HelloWorld, которое содержит наш класс Function.

Затем мы используем атрибут [assembly: LambdaSerializer], чтобы указать сериализатор Lambda для сериализации и десериализации ввода и вывода нашей функции. В данном случае мы используем класс DefaultLambdaJsonSerializer из пространства имен Amazon.Lambda.Serialization.SystemTextJson.

Внутри нашего класса Function у нас есть метод FunctionHandler, который принимает объекты APIGatewayProxyRequest и объекты ILambdaContext в качестве параметров и возвращает объект APIGatewayProxyResponse.

Объект APIGatewayProxyRequest представляет входящий HTTP-запрос и содержит такую ​​информацию, как метод запроса, заголовки и тело. Объект ILambdaContext представляет контекст, в котором выполняется наша функция, и содержит такую ​​информацию, как идентификатор запроса AWS, имя функции и имя потока журнала.

Наш метод Hello возвращает новый объект APIGatewayProxyResponse с кодом состояния 200, телом «Hello, world!» и типом содержимого «text/plain».

Теперь, когда у нас есть функция Hello World, рассмотрим более сложные примеры.

Допустим, мы хотим создать функцию, которая считывает данные из корзины Amazon S3 и возвращает их в ответ на HTTP-запрос. Вот как будет выглядеть код:

using System.IO;
using Amazon.Lambda.Core;
using Amazon.Lambda.APIGatewayEvents;
using Amazon.S3;
using Amazon.S3.Model;

[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace S3Function
{
    public class Function
    {
        private readonly IAmazonS3 _s3Client;

        public Function()
        {
            _s3Client = new AmazonS3Client();
        }

        public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
        {
            var s3ObjectKey = request.QueryStringParameters["key"];

            var getObjectRequest = new GetObjectRequest
            {
                BucketName = "my-bucket",
                Key = s3ObjectKey
            };

            using (var getObjectResponse = await _s3Client.GetObjectAsync(getObjectRequest))
            using (var reader = new StreamReader(getObjectResponse.ResponseStream))
            {
                var responseBody = await reader.ReadToEndAsync();

                return new APIGatewayProxyResponse
                {
                    StatusCode = 200,
                    Body = responseBody,
                    Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }
                };
            }
        }
    }
}

Давайте разберем код.

Мы используем пространство имен System.IO для чтения данных из объекта S3. Мы также используем пространство имен Amazon.S3 для взаимодействия с S3.

Мы определили конструктор для нашего класса Function, который создает новый объект AmazonS3Client. Этот объект позволяет нам взаимодействовать с нашей корзиной S3.

Наш метод GetFileFromS3 принимает в качестве параметров объект APIGatewayProxyRequest и объект ILambdaContext и возвращает объект APIGatewayProxyResponse.

Внутри нашего метода FunctionHandler мы сначала извлекаем параметр key из строки запроса запроса. Этот параметр представляет собой ключ объекта S3, который мы хотим прочитать.

Затем мы создаем новый объект GetObjectRequest с именем корзины и ключом объекта, которые мы извлекли из запроса. Затем мы используем _s3Client object для вызова метода GetObjectAsync и получения объекта S3.

Получив объект S3, мы создаем новый объект StreamReader для чтения содержимого объекта. Затем мы вызываем метод ReadToEndAsync для чтения всего содержимого объекта в строковую переменную с именем responseBody.

Наконец, мы создаем новый объект APIGatewayProxyResponse с кодом состояния 200, телом responseBody и типом содержимого "текст/обычный".

Теперь мы увидели, как создать простую функцию Hello World и более сложную функцию, взаимодействующую с корзиной S3. Но как насчет локального тестирования этих функций перед их развертыванием в AWS Lambda?

К счастью, AWS предоставляет инструмент под названием AWS Toolkit для Visual Studio, который позволяет нам локально тестировать и отлаживать функции Lambda.

Просто нажмите на Mock Lambda Test Tool.

Visual Studio запустит локальную версию среды выполнения Lambda. Мы можем проверить нашу функцию, открыв веб-браузер и перейдя к http://localhost:55050.

Просто нажмите «Выполнить функцию», чтобы проверить свою лямбду.

Локальное тестирование нашей функции S3 требует большего, так как мы должны предоставить учетные данные AWS и настроить корзину S3. Вот как это сделать:

1. Создайте новый проект функции Lambda в Visual Studio.

2 - Заменяем содержимое сгенерированного Function.cs файла кодом из нашего S3Function.cs файла.

3. Добавьте следующие строки кода в конструктор Function, чтобы настроить клиент S3 с вашими учетными данными AWS:

var awsCredentials = new BasicAWSCredentials("ACCESS_KEY", "SECRET_KEY");
_s3Client = new AmazonS3Client(awsCredentials, new AmazonS3Config { RegionEndpoint = RegionEndpoint.USWest2 });

Замените ACCESS_KEY и SECRET_KEY вашим ключом доступа и секретным ключом AWS соответственно. Кроме того, замените USWest2 на соответствующий регион для вашей корзины S3.

Visual Studio запустит локальную версию среды выполнения Lambda с нашей функцией S3. Мы можем протестировать функцию, открыв веб-браузер и перейдя к http://localhost:5050, где «OBJECT_KEY» — это ключ объекта в нашей корзине S3. Далее мы должны увидеть содержимое объекта, отображаемое в браузере.

В заключение следует отметить, что AWS Lambda предоставляет мощную платформу для создания бессерверных приложений, которые могут динамически масштабироваться для обработки практически любого трафика. А благодаря возможности использовать C# и AWS SDK разработчики могут легко создавать надежные и масштабируемые бессерверные приложения с минимальными затратами на управление инфраструктурой.

Хотя поначалу бессерверные вычисления могут показаться сложными, эта статья показала, что это проще, чем может показаться. Обладая нужными инструментами и знаниями, любой может создавать бессерверные приложения с помощью AWS Lambda и C#.

Одна важная вещь, которую следует помнить при создании бессерверных приложений, — это важность тестирования и отладки. Используя AWS Toolkit для Visual Studio, разработчики могут локально тестировать и отлаживать свои функции Lambda перед их развертыванием в AWS, экономя время и ресурсы.

Помимо лямбда-выражений в этой статье, существует множество других вариантов использования AWS Lambda и C#, включая обработку изображений, обработку данных и многое другое. Возможности поистине безграничны.

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

Если вы нашли эту статью полезной, похлопайте ей в ладоши.

Отказ от ответственности: часть этой статьи была написана с помощью инструмента искусственного интеллекта.
Но автор просмотрел и отредактировал содержимое.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу