AWS Lambda – C# 中的函数

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

步骤 1

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

Introduction

步骤 2

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

Visual Csharp

您可以根据需要更改名称,此处将保留默认名称。单击确定继续。

下一步将要求您选择蓝图

选择蓝图

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

Solution Explorer

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

文件 Functions.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 −这是 C# AWS Lambda 函数的起点。

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

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

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

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

Publish Explorer Upload Lambda

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

高级函数

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

Uploading Function

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

Invoke

现在,让我们输入一些示例输入并再次 Invoke。请注意,我们在这里已在输入框中输入了一些文本,单击 invoke 时,相同的文本将以大写显示在响应部分中。日志输出显示在下方 −

Function Lambda

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

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

Create Function Csharp Function Code Info 执行角色 Csharp 基本设置 Csharp

处理程序签名

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

ASSEMBLY::TYPE::METHOD

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

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

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

METHOD −这是函数处理程序的名称。

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;

// Assembly 属性使 Lambda 函数的 JSON 输入能够转换为 .NET 类。
[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# 中的 Context 对象

Context 对象提供有关 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 移动 SDK 一起使用时有关客户端应用程序和设备的信息

9

Identity(身份)

与 AWS 移动 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 属性使 Lambda 函数的 JSON 输入能够转换为 .NET 类。
[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+"");
         context.Logger.Log("RemainingTime: " + context.RemainingTime+"");
         LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"");            
      }
   }
}

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

Context Object Csharp

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

Context Object Output

使用 C# 进行日志记录

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

  • context.Logger.Log

  • LambdaLogger.Log

观察以下示例显示在这里 −

public void FunctionHandler(ILambdaContext context) {
LambdaLogger.Log("函数名称:" + context.FunctionName+"");
context.Logger.Log("剩余时间:" + context.RemainingTime+"");
LambdaLogger.Log("LogGroupName:" + context.LogGroupName+"");
}

上面给出的代码的相应输出显示在此处 −

Logging Using Csharp

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

Log Group

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