AWS Lambda - Funzione in C #
Questo capitolo spiegherà in dettaglio come lavorare con la funzione AWS Lambda in C #. Qui utilizzeremo Visual Studio per scrivere e distribuire il codice in AWS Lambda. Per qualsiasi informazione e aiuto sull'installazione di Visual Studio e sull'aggiunta del toolkit AWS a Visual Studio, fare riferimento aIntroductioncapitolo in questo tutorial. Una volta terminata l'installazione di Visual Studio, seguire i passaggi indicati di seguito. Fare riferimento ai rispettivi screenshot per una migliore comprensione -
Passo 1
Apri il tuo Visual Studio e segui i passaggi per creare un nuovo progetto. Clicca suFile -> New -> Project.
Passo 2
Ora, viene visualizzata la seguente schermata in cui si seleziona AWS Lambda for Visual C#. SelezionareAWS Lambda Project (.NET Core).
È possibile modificare il nome se necessario, manterrà qui il nome predefinito. ClicOK continuare.
Il passaggio successivo ti chiederà di selezionare un file Blueprint.
Selezionare Empty function per questo esempio e fare clic su Finish. Creerà una nuova struttura del progetto come mostrato di seguito:
Ora seleziona Function.cs che è il file principale in cui viene creato il gestore con evento e contesto per AWS Lambda.
La visualizzazione del file Functions.cs è la seguente:
È possibile utilizzare il comando fornito di seguito per serializzare i parametri di input e output nella funzione AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Dettagli del gestore per C #
Il gestore viene visualizzato come segue:
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
I vari componenti del codice precedente sono spiegati di seguito:
FunctionHandler −Questo è il punto di partenza della funzione C # AWS Lambda.
String input − I parametri al gestore string input ha tutti i dati dell'evento come l'oggetto S3, i dettagli del gateway API ecc.
ILambdaContext context −ILamdaContext è un'interfaccia con dettagli di contesto. Ha dettagli come il nome della funzione lambda, i dettagli della memoria, i dettagli del timeout ecc.
Il gestore Lambda può essere richiamato in modo sincronizzato e asincrono. Se richiamato in modo sincronizzato come mostrato sopra, puoi avere il tipo di ritorno. Se asincrono, il tipo restituito deve essere void.
Ora, distribuiamo AWS Lambda C # e testiamo lo stesso. Fare clic con il pulsante destro del mouse sul progetto e fare clicPublish to AWS Lambda come mostrato di seguito -
Riempi il file Function Name e fare clic su Next. La schermata successiva visualizzata èAdvanced Function Details come mostrato -
Inserisci il Role Name, Memory e Timeout. Si noti che qui abbiamo selezionato il ruolo esistente creato e utilizzato la memoria come 128 MB e il timeout come 10 secondi. Una volta fatto clicUpload per pubblicare sulla console AWS Lambda.
È possibile visualizzare la seguente schermata una volta caricata la funzione AWS Lambda. ClicInvokeper eseguire la funzione AWS Lambda creata. Al momento, mostra un errore in quanto necessita di input come da codice scritto.
Ora, inseriamo alcuni input di esempio e Invokenuovamente. Si noti che qui abbiamo inserito del testo nella casella di input e lo stesso facendo clicinvokeviene visualizzato in maiuscolo nella sezione della risposta. L'output del registro viene visualizzato di seguito:
Ora, controlliamo anche la console AWS per vedere se la funzione è stata creata poiché abbiamo distribuito la funzione da Visual Studio.
La funzione Lambda creata sopra è aws lambda using csharp e lo stesso viene visualizzato nella console AWS come mostrato negli screenshot riportati di seguito -
Firma del gestore
Il gestore è il punto di partenza per l'esecuzione di AWS. Il nome del gestore dovrebbe essere definito come -
ASSEMBLY::TYPE::METHOD
I dettagli della firma sono spiegati come di seguito:
ASSEMBLY- Questo è il nome dell'assembly .NET per l'applicazione creata. È fondamentalmente il nome della cartella da cui viene creato il progetto.
TYPE- Questo è il nome del gestore. È fondamentalmente il namespace.classname.
METHOD - Questo è il nome del gestore della funzione.
Il codice per la firma del gestore è come mostrato di seguito:
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();
}
}
}
Nota che qui l'assemblaggio è AWSLamda3, Type è namespace.classname che è AWSLambda3.Function e il metodo è FunctionHandler. Pertanto, la firma del gestore èAWSLamda3::AWSLambda3.Function::FunctionHandler
Oggetto contesto in C #
L'oggetto Context fornisce informazioni utili sul runtime nell'ambiente AWS. Le proprietà disponibili nell'oggetto contesto sono come mostrato nella seguente tabella:
Suor n | Proprietà e descrizione |
---|---|
1 | MemoryLimitInMB Ciò fornirà i dettagli della memoria configurata per la funzione AWS Lambda |
2 | FunctionName Nome della funzione AWS Lambda |
3 | FunctionVersion Versione della funzione AWS Lambda |
4 | InvokedFunctionArn ARN utilizzato per richiamare questa funzione. |
5 | AwsRequestId ID richiesta AWS per la funzione AWS creata |
6 | LogStreamName Nome del flusso di log di Cloudwatch |
7 | LogGroupName Nome del gruppo Cloudwatch |
8 | ClientContext Informazioni sull'applicazione client e sul dispositivo quando utilizzato con AWS Mobile SDK |
9 | Identity Informazioni sull'identità di amazon cogbnito se utilizzata con AWS Mobile SDK |
10 | RemainingTime Tempo di esecuzione rimanente fino al termine della funzione |
11 | Logger Il logger associato al contesto |
Esempio
In questa sezione, testiamo alcune delle proprietà precedenti in AWS Lambda in C #. Osservare il codice di esempio fornito di seguito -
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");
}
}
}
L'output correlato che è possibile osservare quando si richiama il codice precedente in C# è come mostrato di seguito -
L'output correlato che è possibile osservare quando si richiama il codice precedente in AWS Console è come mostrato di seguito -
Registrazione tramite C #
Per la registrazione, puoi utilizzare due funzioni:
context.Logger.Log
LambdaLogger.Log
Osservare il seguente esempio mostrato qui:
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");
}
L'output corrispondente per il codice dato sopra è mostrato qui -
Puoi ottenere i log da CloudWatch come mostrato di seguito:
Gestione degli errori in C # per la funzione Lambda
Questa sezione illustra la gestione degli errori in C #. Per la gestione degli errori,Exception la classe deve essere estesa come mostrato nell'esempio mostrato di seguito -
esempio
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!");
}
}
}
L'output corrispondente per il codice riportato sopra è come indicato di seguito:
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}