AWS Lambda - Funktion in C #

In diesem Kapitel erfahren Sie ausführlich, wie Sie mit der AWS Lambda-Funktion in C # arbeiten. Hier verwenden wir Visual Studio, um den Code für AWS Lambda zu schreiben und bereitzustellen. Informationen und Hilfe zur Installation von Visual Studio und zum Hinzufügen von AWS Toolkit zu Visual Studio finden Sie in derIntroductionKapitel in diesem Tutorial. Führen Sie nach Abschluss der Installation von Visual Studio die folgenden Schritte aus. Weitere Informationen finden Sie in den jeweiligen Screenshots.

Schritt 1

Öffnen Sie Ihr Visual Studio und befolgen Sie die Schritte zum Erstellen eines neuen Projekts. Klicke aufFile -> New -> Project.

Schritt 2

Nun wird der folgende Bildschirm angezeigt, in dem Sie auswählen AWS Lambda for Visual C#. WählenAWS Lambda Project (.NET Core).

Sie können den Namen bei Bedarf ändern, wobei hier der Standardname beibehalten wird. KlickenOK weitermachen.

Im nächsten Schritt werden Sie aufgefordert, a auszuwählen Blueprint.

Wählen Empty function für dieses Beispiel und klicken Sie auf Finish. Es wird eine neue Projektstruktur erstellt, wie unten gezeigt -

Wählen Sie nun Function.cs Dies ist die Hauptdatei, in der der Handler mit Ereignis und Kontext für AWS Lambda erstellt wird.

Die Anzeige der Datei Functions.cs lautet wie folgt:

Mit dem folgenden Befehl können Sie die Eingabe- und Ausgabeparameter für die AWS Lambda-Funktion serialisieren.

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

Handler-Details für C #

Der Handler wird wie folgt angezeigt:

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

Verschiedene Komponenten des obigen Codes werden unten erklärt -

FunctionHandler −Dies ist der Ausgangspunkt der C # AWS Lambda-Funktion.

String input − Die Parameter zum Handler string input hat alle Ereignisdaten wie S3-Objekt, API-Gateway-Details usw.

ILambdaContext context −ILamdaContext ist eine Schnittstelle mit Kontextdetails. Es enthält Details wie den Namen der Lambda-Funktion, Speicherdetails, Timeout-Details usw.

Der Lambda-Handler kann synchron und asynchron aufgerufen werden. Wenn Sie wie oben gezeigt synchron synchronisiert aufrufen, können Sie den Rückgabetyp verwenden. Wenn asynchron, muss der Rückgabetyp ungültig sein.

Lassen Sie uns nun das AWS Lambda C # bereitstellen und dasselbe testen. Klicken Sie mit der rechten Maustaste auf das Projekt und klicken Sie aufPublish to AWS Lambda wie unten gezeigt -

Füllen Sie die Function Name und klicken Sie auf Next. Der nächste angezeigte Bildschirm ist derAdvanced Function Details wie gezeigt -

Geben Sie die Role Name, Memory und Timeout. DetailsBeachten Sie, dass wir hier die vorhandene Rolle ausgewählt haben, die erstellt und Speicher als 128 MB und Timeout als 10 Sekunden verwendet wurde. Sobald Sie fertig sind, klicken Sie aufUpload zum Veröffentlichen in der AWS Lambda-Konsole.

Nach dem Hochladen der AWS Lambda-Funktion wird der folgende Bildschirm angezeigt. KlickenInvokeum die erstellte AWS Lambda-Funktion auszuführen. Derzeit wird ein Fehler angezeigt, da gemäß dem geschriebenen Code Eingaben erforderlich sind.

Lassen Sie uns nun einige Beispieleingaben und eingeben Invokees wieder. Beachten Sie, dass wir hier Text in das Eingabefeld eingegeben haben und dasselbe beim Klickeninvokewird im Antwortbereich in Großbuchstaben angezeigt. Die Protokollausgabe wird unten angezeigt -

Lassen Sie uns nun auch die AWS-Konsole überprüfen, um festzustellen, ob die Funktion erstellt wurde, während wir die Funktion in Visual Studio bereitgestellt haben.

Die oben erstellte Lambda-Funktion ist aws lambda using csharp und dasselbe wird in der AWS-Konsole angezeigt, wie in den folgenden Screenshots gezeigt -

Handler-Unterschrift

Der Handler ist der Startpunkt für die Ausführung von AWS. Der Name des Handlers sollte definiert werden als -

ASSEMBLY::TYPE::METHOD

Die Details der Unterschrift werden wie folgt erklärt -

ASSEMBLY- Dies ist der Name der .NET-Assembly für die erstellte Anwendung. Dies ist im Grunde der Name des Ordners, aus dem das Projekt erstellt wird.

TYPE- Dies ist der Name des Handlers. Es ist im Grunde der Namespace.Klassenname.

METHOD - Dies ist der Name des Funktionshandlers.

Der Code für die Handlersignatur lautet wie folgt:

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();
      }
   }
}

Beachten Sie, dass hier die Baugruppe ist AWSLamda3, Typ ist Namespace.Klassenname AWSLambda3.Function und Methode ist FunctionHandler. Somit ist die HandlersignaturAWSLamda3::AWSLambda3.Function::FunctionHandler

Kontextobjekt in C #

Das Kontextobjekt enthält nützliche Informationen zur Laufzeit in einer AWS-Umgebung. Die im Kontextobjekt verfügbaren Eigenschaften sind in der folgenden Tabelle aufgeführt:

Sr.Nr. Eigenschaften & Beschreibung
1

MemoryLimitInMB

Dies gibt Details zum Speicher an, der für die AWS Lambda-Funktion konfiguriert ist

2

FunctionName

Name der AWS Lambda-Funktion

3

FunctionVersion

Version der AWS Lambda-Funktion

4

InvokedFunctionArn

ARN wurde verwendet, um diese Funktion aufzurufen.

5

AwsRequestId

AWS-Anforderungs-ID für die erstellte AWS-Funktion

6

LogStreamName

Name des Cloudwatch-Protokolldatenstroms

7

LogGroupName

Name der Cloudwatch-Gruppe

8

ClientContext

Informationen zur Clientanwendung und zum Clientgerät bei Verwendung mit AWS Mobile SDK

9

Identity

Informationen zur Amazon Cogbnito-Identität bei Verwendung mit AWS Mobile SDK

10

RemainingTime

Verbleibende Ausführungszeit bis zum Beenden der Funktion

11

Logger

Der dem Kontext zugeordnete Logger

Beispiel

Lassen Sie uns in diesem Abschnitt einige der oben genannten Eigenschaften in AWS Lambda in C # testen. Beachten Sie den unten angegebenen Beispielcode -

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");            
      }
   }
}

Die zugehörige Ausgabe, die Sie beobachten können, wenn Sie den obigen Code in aufrufen C# ist wie unten gezeigt -

Die zugehörige Ausgabe, die Sie beobachten können, wenn Sie den obigen Code in aufrufen AWS Console ist wie unten gezeigt -

Protokollierung mit C #

Für die Protokollierung können Sie zwei Funktionen verwenden:

  • context.Logger.Log

  • LambdaLogger.Log

Beachten Sie das folgende hier gezeigte Beispiel -

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");            
}

Die entsprechende Ausgabe für den oben angegebenen Code wird hier angezeigt -

Sie können die Protokolle wie unten gezeigt von CloudWatch abrufen -

Fehlerbehandlung in C # für Lambda-Funktion

In diesem Abschnitt wird die Fehlerbehandlung in C # erläutert. Zur FehlerbehandlungException Klasse muss wie im folgenden Beispiel gezeigt erweitert werden -

Beispiel

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!");
     }
   }
}

Die entsprechende Ausgabe für den oben angegebenen Code ist wie folgt:

{
   "errorType": "LambdaException",
   "errorMessage": "Error in AWS Lambda!"
}