AWS Lambda - C#中的函数

本章将详细介绍如何在C#中使用AWS Lambda函数.在这里,我们将使用visual studio编写代码并将其部署到AWS Lambda.有关安装Visual Studio以及将AWS工具包添加到Visual Studio的任何信息和帮助,请参阅本教程中的简介章节.完成Visual Studio的安装后,请按照下面给出的步骤操作.请参阅相应的屏幕截图以更好地理解和减去;

步骤1

打开Visual Studio并按照步骤创建新项目.点击文件 - >新 - >项目.

简介

第2步

现在,将显示以下屏幕,其中您选择 AWS Lambda for Visual C#.选择 AWS Lambda Project(.NET Core).

Visual Csharp

如果需要,您可以更改名称,此处将保留默认名称.点击确定继续.

下一步将要求您选择蓝图.

选择蓝图

为此示例选择清空功能,然后单击完成的.它将创建一个新的项目结构,如下所示 :

Solution Explorer

现在,选择 Function.cs ,这是为AWS Lambda创建具有事件和上下文的处理程序的主文件.

文件的显示功能.cs如下 :

Csharp Function

你可以使用下面给出的命令将输入和输出参数序列化为AWS Lambda函数.

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

C#的处理程序详细信息

处理程序显示如下: ;

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

上面代码的各种组件在下面和下面解释;

FunctionHandler&minus ; 这是C#AWS Lambda函数的起点.

字符串输入和减号; 处理程序的参数字符串输入包含所有事件数据,如S3对象,API网关详细信息等.

ILambdaContext context :   ILamdaContext是一个具有上下文详细信息的接口.它具有lambda函数名称,内存详细信息,超时详细信息等详细信息.

可以同步和异步方式调用Lambda处理程序.如果以如上所示的同步方式调用,则可以具有返回类型.如果异步而不是返回类型必须是无效的.

现在,让我们部署AWS Lambda C#并对其进行测试.右键单击该项目,然后单击发布到AWS Lambda ,如下所示 :

发布资源管理器


上传Lambda

填写功能名称,然后单击下一步.显示的下一个屏幕是高级功能详细信息,如下所示 :

高级功能

输入角色名称,内存超时. details注意,在这里我们选择了现有的角色创建和使用内存为128MB,超时为10秒.完成后,单击上传以发布到AWS Lambda控制台.

Uploading Function

上传AWS Lambda函数后,您可以看到以下屏幕.单击调用以执行创建的AWS Lambda函数.目前,它显示错误,因为它需要根据编写的代码输入.

Invoke

现在,让我们再次输入一些示例输入和调用.请注意,这里我们在输入框中输入了一些文本,并且在响应部分中以大写字母显示相同的单击调用.日志输出显示在 :

Function Lambda

现在,让我们检查AWS控制台,看看是否已创建该函数,因为我们已经从Visual Studio部署了该函数.

上面创建的Lambda函数是使用csharp 并在AWS控制台中显示相同内容,如下面给出的屏幕截图所示 :

创建函数Csharp


功能代码信息 执行角色Csharp


基本设置Csharp

处理程序签名

处理程序是AWS执行的起点.处理程序的名称应定义为 :

ASSEMBLY :: TYPE :: METHOD

签名的详细信息解释如下 :

ASSEMBLY : 这是创建的应用程序的.NET程序集的名称.它基本上是创建项目的文件夹的名称.

TYPE : 这是处理程序的名称.它基本上是namespace.classname.

METHOD : 这是函数处理程序的名称.

处理程序签名的代码如下所示 :

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

注意这里的程序集是 AWSLamda3 ,Type是namespace.classname是 AWSLambda3.Function ,而Method是 FunctionHandler .因此,处理程序签名是 AWSLamda3 :: AWSLambda3.Function :: FunctionHandler

C#中的上下文对象

上下文对象提供有关AWS环境中运行时的有用信息.上下文对象中可用的属性如下表所示 :

Sr.No属性&说明
1

MemoryLimitInMB

这将提供为AWS Lambda函数配置的内存的详细信息

2

FunctionName

AWS的名称Lambda函数

3

FunctionVersion

AWS Lambda函数的版本

4

InvokedFunctionArn

ARN用来调用此功能.

5

AwsRequestId

创建的AWS函数的AWS请求ID

6

LogStreamName

Cloudwatch日志流名称

7

LogGroupName

Cloudwatch群组名称

8

ClientContext

与AWS mobile SDK一起使用时有关客户端应用程序和设备的信息

9

Identity

与AWS mobile SDK一起使用时有关amazon cogbnito身份的信息

10

RemainingTime

剩余执行时间直到函数终止

11

Logger

与上下文关联的记录器

示例

在本节中,让我们在C#中测试AWS Lambda中的一些上述属性.观察下面给出的示例代码 :

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

中调用上述代码时可以观察到的相关输出C#如下所示 :

Context Object Csharp

AWS Console 中调用上述代码时可以观察到的相关输出如下所示 :

上下文对象输出

使用C#进行日志记录

对于日志记录,您可以使用两个函数 :

  • context.Logger.Log

  • LambdaLogger.Log

观察此处显示的以下示例 :

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

上面给出的代码的相应输出显示在这里 :

使用Csharp记录

您可以从CloudWatch获取日志,如下所示 :

日志组

用于Lambda函数的C#中的错误处理

本节讨论关于C#中的错误处理.对于错误处理,必须扩展异常类,如下面的示例所示 :

示例

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

上面给出的代码的相应输出如下所示 :

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