Учебники

AWS Lambda — функция в C #

В этой главе подробно объясняется, как работать с лямбда-функцией AWS в C #. Здесь мы собираемся использовать Visual Studio для написания и развертывания кода в AWS Lambda. Для получения любой информации и помощи относительно установки Visual studio и добавления инструментария AWS в Visual Studio, пожалуйста, обратитесь к главе Введение в этом руководстве. После завершения установки Visual Studio, пожалуйста, следуйте инструкциям ниже. Обратитесь к соответствующим скриншотам для лучшего понимания —

Шаг 1

Откройте Visual Studio и следуйте инструкциям по созданию нового проекта. Нажмите Файл -> Новый -> Проект .

Вступление

Шаг 2

Теперь отображается следующий экран, в котором вы выбираете AWS Lambda для Visual C # . Выберите AWS Lambda Project (.NET Core) .

Visual Csharp

При необходимости вы можете изменить имя, оставив здесь имя по умолчанию. Нажмите OK, чтобы продолжить.

На следующем шаге вас попросят выбрать план .

Выберите план

Выберите пустую функцию для этого примера и нажмите Готово . Это создаст новую структуру проекта, как показано ниже —

Обозреватель решений

Теперь выберите Function.cs, который является основным файлом, в котором для AWS Lambda создается обработчик с событием и контекстом.

Отображение файла Functions.cs выглядит следующим образом —

Функция Csharp

Вы можете использовать приведенную ниже команду для сериализации входных и выходных параметров в функцию AWS Lambda.

[assembly: 
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

Детали обработчика для C #

Обработчик отображается следующим образом —

public string FunctionHandler(string input, ILambdaContext context) {
   return input?.ToUpper();
}

Различные компоненты приведенного выше кода объяснены ниже —

FunctionHandler — это отправная точка лямбда-функции C # AWS.

String input — параметры для ввода строки обработчика содержат все данные события, такие как объект S3, сведения о шлюзе API и т. Д.

Контекст ILambdaContext — ILamdaContext — это интерфейс, в котором есть детали контекста. Он содержит такие детали, как имя лямбда-функции, детали памяти, тайм-аут и т. Д.

Лямбда-обработчик может быть вызван синхронно и асинхронно. Если вызывается синхронно, как показано выше, вы можете иметь тип возвращаемого значения. Если async, то возвращаемый тип должен быть void.

Теперь давайте развернем AWS Lambda C # и протестируем то же самое. Щелкните правой кнопкой мыши проект и выберите « Опубликовать в AWS Lambda», как показано ниже.

Опубликовать Explorer

Загрузить лямбду

Введите имя функции и нажмите « Далее» . Следующий отображаемый экран — это подробные сведения о расширенной функции, как показано на рисунке —

Расширенная функция

Введите имя роли, память и время ожидания . детали Обратите внимание, что здесь мы выбрали существующую роль, созданную и использовавшую память как 128 МБ, а тайм-аут как 10 секунд. После этого нажмите « Загрузить», чтобы опубликовать его на консоли AWS Lambda.

Функция загрузки

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

взывать

Теперь давайте введем пример ввода и снова вызовем его. Обратите внимание, что здесь мы ввели некоторый текст в поле ввода, и то же самое при нажатии вызывать отображается в верхнем регистре в разделе ответа. Вывод журнала отображается ниже —

Функция лямбда

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

Лямбда-функция, созданная выше, — это AWS-лямбда, использующая csharp, и она отображается в консоли AWS, как показано на скриншотах, приведенных ниже.

Создать функцию Csharp

Информация о коде функцииРоль казни Csharp

Основные настройки Csharp

Подпись обработчика

Обработчик является начальной точкой для выполнения AWS. Имя обработчика должно быть определено как —

ASSEMBLY::TYPE::METHOD

Детали подписи объяснены как ниже —

СБОРКА — это имя сборки .NET для созданного приложения. В основном это имя папки, из которой создается проект.

ТИП — это имя обработчика. Это в основном namespace.classname.

МЕТОД — это имя обработчика функции.

Код для подписи обработчика показан ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda3 {
   public class Function {

      /// <summary>
      /// A simple function that takes a string and does a ToUpper
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public string FunctionHandler(string input, ILambdaContext context) {
         return input?.ToUpper();
      }
   }
}

Обратите внимание, что здесь сборкой является AWSLamda3 , типом является namespace.classname, которое является AWSLambda3.Function, а Method является FunctionHandler . Таким образом, подпись обработчика является AWSLamda3 :: AWSLambda3.Function :: FunctionHandler

Контекстный объект в C #

Context Object предоставляет полезную информацию о среде выполнения в среде AWS. Свойства, доступные в объекте контекста, показаны в следующей таблице:

Sr.No Свойства и описание
1

MemoryLimitInMB

Это даст подробную информацию о памяти, настроенной для функции AWS Lambda.

2

FunctionName

Название лямбда-функции AWS

3

FunctionVersion

Версия функции AWS Lambda

4

InvokedFunctionArn

ARN раньше вызывал эту функцию.

5

AwsRequestId

Идентификатор запроса AWS для созданной функции AWS

6

LogStreamName

Имя потока журнала Cloudwatch

7

LogGroupName

Название группы Cloudwatch

8

ClientContext

Информация о клиентском приложении и устройстве при использовании с AWS mobile SDK

9

тождественность

Информация об идентичности Amazon cogbnito при использовании с мобильным SDK AWS

10

Оставшееся время

Оставшееся время выполнения до завершения функции

11

лесоруб

Регистратор, связанный с контекстом

MemoryLimitInMB

Это даст подробную информацию о памяти, настроенной для функции AWS Lambda.

FunctionName

Название лямбда-функции AWS

FunctionVersion

Версия функции AWS Lambda

InvokedFunctionArn

ARN раньше вызывал эту функцию.

AwsRequestId

Идентификатор запроса AWS для созданной функции AWS

LogStreamName

Имя потока журнала Cloudwatch

LogGroupName

Название группы Cloudwatch

ClientContext

Информация о клиентском приложении и устройстве при использовании с AWS mobile SDK

тождественность

Информация об идентичности Amazon cogbnito при использовании с мобильным SDK AWS

Оставшееся время

Оставшееся время выполнения до завершения функции

лесоруб

Регистратор, связанный с контекстом

пример

В этом разделе мы протестируем некоторые из вышеуказанных свойств в AWS Lambda в C #. Соблюдайте пример кода, приведенный ниже —

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda6 {
   public class Function {

      /// <summary>
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public void FunctionHandler(ILambdaContext context) {
         LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
         context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
         LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
      }
   }
}

Соответствующий вывод, который вы можете наблюдать, когда вызываете приведенный выше код на C #, показан ниже:

Контекстный объект Csharp

Соответствующий вывод, который вы можете наблюдать при вызове вышеуказанного кода в Консоли AWS, показан ниже:

Вывод объекта контекста

Ведение журнала с использованием C #

Для регистрации вы можете использовать две функции —

  • context.Logger.Log

  • LambdaLogger.Log

context.Logger.Log

LambdaLogger.Log

Обратите внимание на следующий пример, показанный здесь —

public void FunctionHandler(ILambdaContext context) {
   LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
   context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
   LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
}

Соответствующий вывод для приведенного выше кода показан здесь —

Ведение журнала с использованием Csharp

Вы можете получить журналы из CloudWatch, как показано ниже —

Log Group

Обработка ошибок в C # для лямбда-функции

В этом разделе обсуждается обработка ошибок в C #. Для обработки ошибок класс Exception должен быть расширен, как показано в примере, показанном ниже:

пример

namespace example {            
   public class AccountAlreadyExistsException : Exception {
      public AccountAlreadyExistsException(String message) :
         base(message) {
      }
   }
} 
namespace example {
   public class Handler {
     public static void CreateAccount() {
       throw new AccountAlreadyExistsException("Error in AWS Lambda!");
     }
   }
}

Соответствующий вывод для кода, приведенного выше, приведен ниже: