AWS Lambda - funkcja w C #
W tym rozdziale szczegółowo wyjaśnimy, jak pracować z funkcją AWS Lambda w języku C #. Tutaj zamierzamy użyć Visual Studio do napisania i wdrożenia kodu do AWS Lambda. Aby uzyskać informacje i pomoc dotyczącą instalacji programu Visual studio i dodawania zestawu narzędzi AWS do programu Visual Studio, zapoznaj się zIntroductionrozdział w tym samouczku. Po zakończeniu instalacji programu Visual Studio wykonaj czynności podane poniżej. Zapoznaj się z odpowiednimi zrzutami ekranu, aby lepiej zrozumieć -
Krok 1
Otwórz program Visual Studio i postępuj zgodnie z instrukcjami, aby utworzyć nowy projekt. KliknijFile -> New -> Project.
Krok 2
Teraz zostanie wyświetlony następujący ekran, na którym możesz wybrać AWS Lambda for Visual C#. WybierzAWS Lambda Project (.NET Core).
W razie potrzeby możesz zmienić nazwę, zachowa tutaj nazwę domyślną. KliknijOK kontynuować.
W następnym kroku zostaniesz poproszony o wybranie pliku Blueprint.
Wybierz Empty function dla tego przykładu i kliknij Finish. Utworzy nową strukturę projektu, jak pokazano poniżej -
Teraz wybierz Function.cs który jest głównym plikiem, w którym tworzona jest procedura obsługi ze zdarzeniem i kontekstem dla AWS Lambda.
Wyświetlenie pliku Functions.cs wygląda następująco -
Możesz użyć polecenia podanego poniżej, aby serializować parametry wejściowe i wyjściowe do funkcji AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Szczegóły obsługi dla języka C #
Program obsługi jest wyświetlany w następujący sposób -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Różne elementy powyższego kodu wyjaśniono poniżej -
FunctionHandler −To jest punkt wyjścia funkcji C # AWS Lambda.
String input − Parametry do programu obsługi string input zawiera wszystkie dane o zdarzeniach, takie jak obiekt S3, szczegóły bramy API itp.
ILambdaContext context −ILamdaContext to interfejs, który ma szczegóły kontekstu. Zawiera szczegóły, takie jak nazwa funkcji lambda, szczegóły pamięci, szczegóły limitu czasu itp.
Program obsługi Lambda można wywołać w sposób synchroniczny i asynchroniczny. Jeśli zostanie wywołany w sposób synchronizacyjny, jak pokazano powyżej, możesz mieć typ zwracany. Jeśli asynchroniczny niż typ zwracany musi być nieważny.
Teraz zastosujmy AWS Lambda C # i przetestujmy to samo. Kliknij projekt prawym przyciskiem myszy i kliknijPublish to AWS Lambda jak pokazano poniżej -
Wypełnij Function Name i kliknij Next. Następny wyświetlany ekran toAdvanced Function Details jak pokazano -
Wejdz do Role Name, Memory i Timeout. szczegóły Zwróć uwagę, że tutaj wybraliśmy istniejącą utworzoną rolę i używaliśmy pamięci jako 128 MB, a limit czasu to 10 sekund. Po zakończeniu kliknijUpload do publikacji na konsoli AWS Lambda.
Możesz zobaczyć następujący ekran po załadowaniu funkcji AWS Lambda. KliknijInvokedo wykonania utworzonej funkcji AWS Lambda. Obecnie pokazuje błąd, ponieważ wymaga pewnych danych wejściowych zgodnie z napisanym kodem.
Teraz wprowadźmy przykładowe dane wejściowe i Invoketo znowu. Zwróć uwagę, że tutaj wpisaliśmy tekst w polu wprowadzania i to samo po kliknięciuinvokejest wyświetlany wielkimi literami w sekcji odpowiedzi. Dane wyjściowe dziennika są wyświetlane poniżej -
Teraz sprawdźmy również konsolę AWS, aby zobaczyć, czy funkcja została utworzona tak, jak wdrożyliśmy funkcję z programu Visual Studio.
Utworzona powyżej funkcja Lambda to aws lambda using csharp i to samo jest wyświetlane w konsoli AWS, jak pokazano na zrzutach ekranu podanych poniżej -
Podpis opiekuna
Handler jest punktem startowym do wykonania przez AWS. Nazwę osoby obsługującej należy zdefiniować jako -
ASSEMBLY::TYPE::METHOD
Szczegóły podpisu wyjaśniono poniżej -
ASSEMBLY- To jest nazwa zestawu .NET dla utworzonej aplikacji. Jest to w zasadzie nazwa folderu, z którego tworzony jest projekt.
TYPE- To jest imię przewodnika. W zasadzie jest to namespace.classname.
METHOD - To jest nazwa programu obsługi funkcji.
Kod podpisu obsługi jest pokazany poniżej -
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();
}
}
}
Zwróć uwagę, że tutaj jest zespół AWSLamda3, Type to namespace.classname, czyli AWSLambda3.Function a metoda jest FunctionHandler. Tak więc podpis programu obsługi toAWSLamda3::AWSLambda3.Function::FunctionHandler
Obiekt kontekstu w C #
Obiekt kontekstu dostarcza przydatnych informacji o środowisku wykonawczym w środowisku AWS. Właściwości dostępne w obiekcie kontekstu są pokazane w poniższej tabeli -
Sr.No | Właściwości i opis |
---|---|
1 | MemoryLimitInMB To da szczegóły pamięci skonfigurowanej dla funkcji AWS Lambda |
2 | FunctionName Nazwa funkcji AWS Lambda |
3 | FunctionVersion Wersja funkcji AWS Lambda |
4 | InvokedFunctionArn ARN użył do wywołania tej funkcji. |
5 | AwsRequestId Identyfikator żądania AWS dla utworzonej funkcji AWS |
6 | LogStreamName Nazwa strumienia dziennika Cloudwatch |
7 | LogGroupName Nazwa grupy Cloudwatch |
8 | ClientContext Informacje o aplikacji klienckiej i urządzeniu w przypadku korzystania z mobilnego zestawu SDK AWS |
9 | Identity Informacje o tożsamości amazon cogbnito w przypadku korzystania z zestawu AWS Mobile SDK |
10 | RemainingTime Pozostały czas wykonywania funkcji do zakończenia funkcji |
11 | Logger Rejestrator powiązany z kontekstem |
Przykład
W tej sekcji przetestujmy niektóre z powyższych właściwości w AWS Lambda w C #. Obserwuj przykładowy kod podany poniżej -
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");
}
}
}
Powiązane dane wyjściowe, które można zaobserwować po wywołaniu powyższego kodu w C# jest jak pokazano poniżej -
Powiązane dane wyjściowe, które można zaobserwować po wywołaniu powyższego kodu w AWS Console jest jak pokazano poniżej -
Rejestrowanie za pomocą C #
Do logowania możesz użyć dwóch funkcji -
context.Logger.Log
LambdaLogger.Log
Zwróć uwagę na poniższy przykład pokazany tutaj -
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");
}
Odpowiednie wyjście dla podanego powyżej kodu jest pokazane tutaj -
Możesz pobrać dzienniki z CloudWatch, jak pokazano poniżej -
Obsługa błędów w języku C # dla funkcji Lambda
W tej sekcji omówiono obsługę błędów w języku C #. Do obsługi błędów,Exception klasę należy rozszerzyć, jak pokazano na poniższym przykładzie -
przykład
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!");
}
}
}
Odpowiednie wyjście dla kodu podanego powyżej jest takie, jak podano poniżej -
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}