В этой главе подробно объясняется, как работать с лямбда-функцией 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) .
При необходимости вы можете изменить имя, оставив здесь имя по умолчанию. Нажмите OK, чтобы продолжить.
На следующем шаге вас попросят выбрать план .
Выберите пустую функцию для этого примера и нажмите Готово . Это создаст новую структуру проекта, как показано ниже —
Теперь выберите Function.cs, который является основным файлом, в котором для AWS Lambda создается обработчик с событием и контекстом.
Отображение файла Functions.cs выглядит следующим образом —
Вы можете использовать приведенную ниже команду для сериализации входных и выходных параметров в функцию 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», как показано ниже.
Введите имя функции и нажмите « Далее» . Следующий отображаемый экран — это подробные сведения о расширенной функции, как показано на рисунке —
Введите имя роли, память и время ожидания . детали Обратите внимание, что здесь мы выбрали существующую роль, созданную и использовавшую память как 128 МБ, а тайм-аут как 10 секунд. После этого нажмите « Загрузить», чтобы опубликовать его на консоли AWS Lambda.
Вы можете увидеть следующий экран после загрузки функции AWS Lambda. Нажмите Invoke, чтобы выполнить созданную функцию AWS Lambda. В настоящее время он показывает ошибку, поскольку требует некоторого ввода в соответствии с написанным кодом.
Теперь давайте введем пример ввода и снова вызовем его. Обратите внимание, что здесь мы ввели некоторый текст в поле ввода, и то же самое при нажатии вызывать отображается в верхнем регистре в разделе ответа. Вывод журнала отображается ниже —
Теперь давайте также проверим консоль AWS, чтобы увидеть, создана ли функция, так как мы развернули функцию из Visual Studio.
Лямбда-функция, созданная выше, — это AWS-лямбда, использующая csharp, и она отображается в консоли AWS, как показано на скриншотах, приведенных ниже.
Подпись обработчика
Обработчик является начальной точкой для выполнения 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 #, показан ниже:
Соответствующий вывод, который вы можете наблюдать при вызове вышеуказанного кода в Консоли 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"); }
Соответствующий вывод для приведенного выше кода показан здесь —
Вы можете получить журналы из CloudWatch, как показано ниже —
Обработка ошибок в 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!"); } } }
Соответствующий вывод для кода, приведенного выше, приведен ниже: