本章将详细介绍如何在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).
如果需要,您可以更改名称,此处将保留默认名称.点击确定继续.
下一步将要求您选择蓝图.
为此示例选择清空功能,然后单击完成的.它将创建一个新的项目结构,如下所示 :
现在,选择 Function.cs ,这是为AWS Lambda创建具有事件和上下文的处理程序的主文件.
文件的显示功能.cs如下 :
你可以使用下面给出的命令将输入和输出参数序列化为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 ,如下所示 :
填写功能名称,然后单击下一步.显示的下一个屏幕是高级功能详细信息,如下所示 :
输入角色名称,内存和超时. details注意,在这里我们选择了现有的角色创建和使用内存为128MB,超时为10秒.完成后,单击上传以发布到AWS Lambda控制台.
上传AWS Lambda函数后,您可以看到以下屏幕.单击调用以执行创建的AWS Lambda函数.目前,它显示错误,因为它需要根据编写的代码输入.
现在,让我们再次输入一些示例输入和调用.请注意,这里我们在输入框中输入了一些文本,并且在响应部分中以大写字母显示相同的单击调用.日志输出显示在 :
现在,让我们检查AWS控制台,看看是否已创建该函数,因为我们已经从Visual Studio部署了该函数.
上面创建的Lambda函数是使用csharp 并在AWS控制台中显示相同内容,如下面给出的屏幕截图所示 :
处理程序签名
处理程序是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 { ////// A simple function that takes a string and does a ToUpper /// /// /// ///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 { ////// /// /// ///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#如下所示 :
在 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"); }
上面给出的代码的相应输出显示在这里 :
您可以从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!"}