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 项目 (.NET Core)

视觉Csharp

如果需要,您可以更改名称,此处保留默认名称。单击“确定”继续。

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

选择蓝图

在此示例中 选择“空函数” ,然后单击“完成”。它将创建一个新的项目结构,如下所示 -

解决方案浏览器

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

文件 Functions.cs 的显示如下 -

Csharp 函数

您可以使用下面给出的命令将输入​​和输出参数序列化到 AWS Lambda 函数。

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

C# 的处理程序详细信息

处理程序显示如下 -

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

上述代码的各个组成部分解释如下 -

FunctionHandler -这是 C# AWS Lambda 函数的起点。

字符串输入-处理程序字符串输入的参数包含所有事件数据,例如 S3 对象、API 网关详细信息等。

ILambdaContext context - IlamdaContext 是一个具有上下文详细信息的接口。它包含 lambda 函数名称、内存详细信息、超时详细信息等详细信息。

Lambda 处理程序可以以同步和异步方式调用。如果以如上所示的同步方式调用,您可以获得返回类型。如果异步,则返回类型必须为 void。

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

发布资源管理器

上传拉姆达

填写函数名称并单击下一步。显示的下一个屏幕是高级功能详细信息,如下所示 -

高级功能

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

上传功能

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

调用

现在,让我们输入一些示例输入并再次调用它。请注意,这里我们在输入框中输入了一些文本,单击“调用”后,响应部分中也会以大写形式显示相同的文本。日志输出显示如下 -

函数拉姆达

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

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

创建函数 Csharp

功能码信息 执行角色 Csharp

基本设置 Csharp

处理者签名

Handler是AWS执行的起点。处理程序的名称应定义为 -

ASSEMBLY::TYPE::METHOD

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

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

TYPE - 这是处理程序的名称。它基本上是命名空间.类名。

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,类型是 namespace.classname ,即AWSLambda3.Function,方法是FunctionHandler。因此,处理程序签名为AWSLamda3::AWSLambda3.Function::FunctionHandler

C# 中的上下文对象

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

先生编号 属性及说明
1

内存限制(以 MB 为单位)

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

2

函数名

AWS Lambda 函数的名称

3

功能版本

AWS Lambda 函数的版本

4

调用函数Arn

ARN 用于调用此函数。

5

AWS请求ID

创建的 AWS 函数的 AWS 请求 ID

6

日志流名称

Cloudwatch 日志流名称

7

日志组名称

云观察组名称

8

客户端上下文

有关与 AWS 移动开发工具包一起使用时的客户端应用程序和设备的信息

9

身份

有关与 AWS 移动开发工具包一起使用时的 amazon cogbnito 身份的信息

10

剩余时间

函数终止之前的剩余执行时间

11

记录器

与上下文关联的记录器

例子

在本节中,让我们用 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#中调用上述代码时,您可以观察到的相关输出如下所示 -

上下文对象 Csharp

当您在AWS控制台中调用上述代码时,您可以观察到的相关输出如下所示:

上下文对象输出

使用 C# 进行日志记录

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

  • 上下文.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 获取日志,如下所示 -

日志组

C# 中 Lambda 函数的错误处理

本节讨论 C# 中的错误处理。对于错误处理,必须扩展Exception类,如下例所示 -

例子

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