AWS Lambda - Função em C #
Este capítulo irá explicar como trabalhar com a função AWS Lambda em C # em detalhes. Aqui, vamos usar o visual studio para escrever e implantar o código no AWS Lambda. Para obter qualquer informação e ajuda sobre a instalação do Visual studio e adição do kit de ferramentas AWS ao Visual Studio, consulte oIntroductioncapítulo neste tutorial. Depois de concluir a instalação do Visual Studio, siga as etapas fornecidas abaixo. Consulte as respectivas capturas de tela para uma melhor compreensão -
Passo 1
Abra seu Visual Studio e siga as etapas para criar um novo projeto. Clique emFile -> New -> Project.

Passo 2
Agora, a seguinte tela é exibida onde você seleciona AWS Lambda for Visual C#. SelecioneAWS Lambda Project (.NET Core).

Você pode alterar o nome se necessário, manterá aqui o nome padrão. CliqueOK continuar.
A próxima etapa solicitará que você selecione um Blueprint.

Selecione Empty function para este exemplo e clique em Finish. Ele criará uma nova estrutura de projeto conforme mostrado abaixo -

Agora, selecione Function.cs que é o arquivo principal onde o manipulador com evento e contexto é criado para AWS Lambda.
A exibição do arquivo Functions.cs é a seguinte -

Você pode usar o comando fornecido a seguir para serializar os parâmetros de entrada e saída para a função AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Detalhes do manipulador para C #
O manipulador é exibido da seguinte forma -
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Vários componentes do código acima são explicados abaixo -
FunctionHandler −Este é o ponto de partida da função C # AWS Lambda.
String input − Os parâmetros para o manipulador string input tem todos os dados do evento, como objeto S3, detalhes do gateway API etc.
ILambdaContext context −ILamdaContext é uma interface que contém detalhes de contexto. Tem detalhes como nome da função lambda, detalhes de memória, detalhes de tempo limite etc.
O manipulador Lambda pode ser chamado de forma sincronizada e assíncrona. Se chamado de forma sincronizada, conforme mostrado acima, você pode ter o tipo de retorno. Se assíncrono, o tipo de retorno deve ser nulo.
Agora, vamos implantar o AWS Lambda C # e testar o mesmo. Clique com o botão direito no projeto e clique emPublish to AWS Lambda como mostrado abaixo -


Encha o Function Name e clique em Next. A próxima tela exibida é aAdvanced Function Details como mostrado -

Introduzir o Role Name, Memory e Timeout. detalhes Observe que aqui nós selecionamos a função existente criada e usamos a memória como 128 MB e o tempo limite como 10 segundos. Quando terminar, cliqueUpload para publicar no console AWS Lambda.

Você pode ver a tela a seguir assim que a função AWS Lambda for carregada. CliqueInvokepara executar a função AWS Lambda criada. No momento, ele mostra erro, pois precisa de alguma entrada de acordo com o código escrito.

Agora, vamos inserir alguns exemplos de entrada e Invokeisso de novo. Observe que aqui inserimos algum texto na caixa de entrada e o mesmo clicando eminvokeé exibido em maiúsculas na seção de resposta. A saída do log é exibida abaixo -

Agora, vamos também verificar o console da AWS para ver se a função foi criada conforme implementamos a função do Visual Studio.
A função Lambda criada acima é aws lambda using csharp e o mesmo é exibido no console da AWS, conforme mostrado nas capturas de tela fornecidas abaixo -




Assinatura do manipulador
Handler é o ponto de partida para a execução do AWS. O nome do manipulador deve ser definido como -
ASSEMBLY::TYPE::METHOD
Os detalhes da assinatura são explicados a seguir -
ASSEMBLY- Este é o nome do assembly .NET para o aplicativo criado. É basicamente o nome da pasta de onde o projeto é criado.
TYPE- Este é o nome do manipulador. É basicamente o namespace.classname.
METHOD - Este é o nome do manipulador de função.
O código para assinatura do manipulador é mostrado abaixo -
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();
}
}
}
Observe que aqui a montagem é AWSLamda3, O tipo é namespace.classname que é AWSLambda3.Function e o método é FunctionHandler. Assim, a assinatura do manipulador éAWSLamda3::AWSLambda3.Function::FunctionHandler
Objeto de contexto em C #
Objeto de contexto fornece informações úteis sobre o tempo de execução no ambiente AWS. As propriedades disponíveis no objeto de contexto são mostradas na tabela a seguir -
Sr. Não | Propriedades e descrição |
---|---|
1 | MemoryLimitInMB Isso fornecerá detalhes da memória configurada para a função AWS Lambda |
2 | FunctionName Nome da função AWS Lambda |
3 | FunctionVersion Versão da função AWS Lambda |
4 | InvokedFunctionArn ARN usado para invocar esta função. |
5 | AwsRequestId AWS request id para a função AWS criada |
6 | LogStreamName Nome do fluxo de registro do Cloudwatch |
7 | LogGroupName Nome do grupo Cloudwatch |
8 | ClientContext Informações sobre o aplicativo cliente e dispositivo quando usado com AWS Mobile SDK |
9 | Identity Informações sobre a identidade amazon cogbnito quando usada com o SDK móvel AWS |
10 | RemainingTime Tempo de execução restante até a função ser encerrada |
11 | Logger O registrador associado ao contexto |
Exemplo
Nesta seção, vamos testar algumas das propriedades acima no AWS Lambda em C #. Observe o código de amostra fornecido abaixo -
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");
}
}
}
A saída relacionada que você pode observar quando invoca o código acima em C# é como mostrado abaixo -

A saída relacionada que você pode observar quando invoca o código acima em AWS Console é como mostrado abaixo -

Log usando C #
Para registro, você pode usar duas funções -
context.Logger.Log
LambdaLogger.Log
Observe o seguinte exemplo mostrado aqui -
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");
}
A saída correspondente para o código fornecido acima é mostrada aqui -

Você pode obter os logs do CloudWatch conforme mostrado abaixo -

Tratamento de erros em C # para função Lambda
Esta seção discute sobre o tratamento de erros em C #. Para tratamento de erros,Exception a classe deve ser estendida conforme mostrado no exemplo mostrado abaixo -
exemplo
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!");
}
}
}
A saída correspondente para o código fornecido acima é a seguinte -
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}