AWS Lambda: función en C #

Este capítulo le explicará cómo trabajar con la función AWS Lambda en C # en detalle. Aquí, usaremos Visual Studio para escribir e implementar el código en AWS Lambda. Para obtener información y ayuda sobre la instalación de Visual Studio y la adición del kit de herramientas de AWS a Visual Studio, consulte laIntroductioncapítulo de este tutorial. Una vez que haya terminado con la instalación de Visual Studio, siga los pasos que se indican a continuación. Consulte las capturas de pantalla respectivas para una mejor comprensión:

Paso 1

Abra su Visual Studio y siga los pasos para crear un nuevo proyecto. Haga clic enFile -> New -> Project.

Paso 2

Ahora, se muestra la siguiente pantalla en la que selecciona AWS Lambda for Visual C#. SeleccioneAWS Lambda Project (.NET Core).

Puede cambiar el nombre si es necesario, mantendrá aquí el nombre predeterminado. Hacer clicOK continuar.

El siguiente paso le pedirá que seleccione un Blueprint.

Seleccione Empty function para este ejemplo y haga clic en Finish. Creará una nueva estructura de proyecto como se muestra a continuación:

Ahora, seleccione Function.cs que es el archivo principal donde se crea el controlador con evento y contexto para AWS Lambda.

La visualización del archivo Functions.cs es la siguiente:

Puede utilizar el comando que se proporciona a continuación para serializar los parámetros de entrada y salida en la función AWS Lambda.

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

Detalles del controlador para C #

El controlador se muestra de la siguiente manera:

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

Varios componentes del código anterior se explican a continuación:

FunctionHandler −Este es el punto de partida de la función C # AWS Lambda.

String input − Los parámetros para el controlador string input tiene todos los datos del evento, como el objeto S3, los detalles de la puerta de enlace API, etc.

ILambdaContext context −ILamdaContext es una interfaz que tiene detalles de contexto. Tiene detalles como el nombre de la función lambda, detalles de la memoria, detalles del tiempo de espera, etc.

El controlador Lambda se puede invocar de forma sincronizada y asincrónica. Si se invoca de forma sincronizada como se muestra arriba, puede tener el tipo de retorno. Si es asíncrono, el tipo de retorno debe ser nulo.

Ahora, implementemos AWS Lambda C # y probemos lo mismo. Haga clic derecho en el proyecto y haga clic enPublish to AWS Lambda como se muestra a continuación -

Llena el Function Name y haga clic en Next. La siguiente pantalla que se muestra es laAdvanced Function Details como se muestra -

Introducir el Role Name, Memory y Timeout. detalles Tenga en cuenta que aquí hemos seleccionado la función existente creada y la memoria utilizada como 128 MB y el tiempo de espera como 10 segundos. Una vez hecho, haga clic enUpload para publicar en la consola de AWS Lambda.

Puede ver la siguiente pantalla una vez que se cargue la función AWS Lambda. Hacer clicInvokepara ejecutar la función AWS Lambda creada. En la actualidad, muestra un error ya que necesita alguna entrada según el código escrito.

Ahora, ingresemos una entrada de muestra y Invokede nuevo. Tenga en cuenta que aquí hemos ingresado algo de texto en el cuadro de entrada y lo mismo al hacer clicinvokese muestra en mayúsculas en la sección de respuesta. La salida del registro se muestra a continuación:

Ahora, también revisemos la consola de AWS para ver si la función se crea como la hemos implementado desde Visual Studio.

La función Lambda creada anteriormente es aws lambda using csharp y lo mismo se muestra en la consola de AWS como se muestra en las capturas de pantalla que se muestran a continuación:

Firma del manejador

El controlador es el punto de inicio para que AWS se ejecute. El nombre del controlador debe definirse como:

ASSEMBLY::TYPE::METHOD

Los detalles de la firma se explican a continuación:

ASSEMBLY- Este es el nombre del ensamblado .NET para la aplicación creada. Básicamente es el nombre de la carpeta desde donde se crea el proyecto.

TYPE- Este es el nombre del controlador. Básicamente es el espacio de nombres.

METHOD - Este es el nombre del controlador de funciones.

El código para la firma del controlador es el que se muestra a continuación:

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

Tenga en cuenta que aquí el montaje es AWSLamda3, El tipo es espacio de nombres.nombre de clase que es AWSLambda3.Function y el método es FunctionHandler. Por tanto, la firma del manejador esAWSLamda3::AWSLambda3.Function::FunctionHandler

Objeto de contexto en C #

Context Object proporciona información útil sobre el tiempo de ejecución en el entorno de AWS. Las propiedades disponibles en el objeto de contexto son las que se muestran en la siguiente tabla:

No Señor Propiedades y descripción
1

MemoryLimitInMB

Esto dará detalles de la memoria configurada para la función AWS Lambda.

2

FunctionName

Nombre de la función AWS Lambda

3

FunctionVersion

Versión de la función AWS Lambda

4

InvokedFunctionArn

ARN utilizado para invocar esta función.

5

AwsRequestId

ID de solicitud de AWS para la función de AWS creada

6

LogStreamName

Nombre del flujo de registro de Cloudwatch

7

LogGroupName

Nombre del grupo de Cloudwatch

8

ClientContext

Información sobre la aplicación cliente y el dispositivo cuando se utiliza con AWS Mobile SDK

9

Identity

Información sobre la identidad de amazon cogbnito cuando se usa con AWS Mobile SDK

10

RemainingTime

Tiempo de ejecución restante hasta que finalice la función

11

Logger

El registrador asociado al contexto

Ejemplo

En esta sección, probemos algunas de las propiedades anteriores en AWS Lambda en C #. Observe el código de muestra que se proporciona a continuación:

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

La salida relacionada que puede observar cuando invoca el código anterior en C# es como se muestra a continuación -

La salida relacionada que puede observar cuando invoca el código anterior en AWS Console es como se muestra a continuación -

Registro usando C #

Para el registro, puede utilizar dos funciones:

  • context.Logger.Log

  • LambdaLogger.Log

Observe el siguiente ejemplo que se muestra aquí:

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

Aquí se muestra la salida correspondiente al código dado arriba:

Puede obtener los registros de CloudWatch como se muestra a continuación:

Manejo de errores en C # para la función Lambda

Esta sección trata sobre el manejo de errores en C #. Para el manejo de errores,Exception La clase debe extenderse como se muestra en el ejemplo que se muestra a continuación:

ejemplo

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

La salida correspondiente para el código dado arriba es como se indica a continuación:

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