新聞資訊
租用幫助
如何在 C# 中使用 AWS Lambda 函數(shù)
2023-12-05 08:31:31
摘要:本章將詳細解釋如何在 C# 中使用 AWS Lambda 函數(shù)。在這里,我們將使用 Visual Studio 編寫代碼并將其部署到 AWS Lambda。

本章將詳細解釋如何在 C# 中使用 AWS Lambda 函數(shù)。在這里,我們將使用 Visual Studio 編寫代碼并將其部署到 AWS Lambda。有關(guān)安裝 Visual Studio 和將 AWS 工具包添加到 Visual Studio 的任何信息和幫助,請參閱本教程中的 簡介一章。完成 Visual Studio 的安裝后,請按照以下步驟操作。請參閱相應(yīng)的屏幕截圖以更好地理解-



免綁卡注冊AWS云賬戶http://hkonecloud.755800.com/



步驟 1

打開您的 Visual Studio 并按照步驟創(chuàng)建新項目。點擊 文件-> 新建-> 項目。


步驟 2

現(xiàn)在,將顯示以下屏幕,您可以在其中選擇 AWS Lambda for Visual C#。選擇 AWS Lambda 項目 (.NET Core)。

如果需要,您可以更改名稱,此處保留默認名稱。點擊 確定繼續(xù)。


下一步將要求您選擇一個 藍圖。

為此示例選擇 空函數(shù),然后單擊 完成。它將創(chuàng)建一個新的項目結(jié)構(gòu),如下所示-

現(xiàn)在,選擇 Function.cs,這是為 AWS Lambda 創(chuàng)建具有事件和上下文的處理程序的主文件。

Functions.cs 文件顯示如下-

您可以使用下面給出的命令將輸入和輸出參數(shù)序列化為 AWS Lambda 函數(shù)。




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




C# 的處理程序詳細信息

處理程序顯示如下-




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




上面代碼的各個組成部分解釋如下-

FunctionHandler ?這是 C# AWS Lambda 函數(shù)的起點。

字符串輸入- 處理程序的參數(shù) 字符串輸入 具有所有事件數(shù)據(jù),例如 S3 對象、API 網(wǎng)關(guān)詳細信息等。

ILambdaContext 上下文- ILamdaContext 是一個具有上下文詳細信息的接口。它具有 lambda 函數(shù)名稱、內(nèi)存詳細信息、超時詳細信息等詳細信息。

可以以同步和異步方式調(diào)用 Lambda 處理程序。如果以如上所示的同步方式調(diào)用,您可以擁有返回類型。如果是 async,則返回類型必須為 void。

現(xiàn)在,讓我們部署 AWS Lambda C# 并對其進行測試。右鍵單擊該項目并單擊 發(fā)布到 AWS Lambda,如下所示-


填寫 函數(shù)名稱并點擊 下一步。顯示的下一個屏幕是 高級功能詳細信息,如圖所示-

輸入 角色名稱、內(nèi)存和 超時。詳情請注意,這里我們選擇了現(xiàn)有角色創(chuàng)建并使用的內(nèi)存為 128MB,超時為 10 秒。完成后,點擊 上傳以發(fā)布到 AWS Lambda 控制臺。

上傳 AWS Lambda 函數(shù)后,您可以看到以下屏幕。單擊 調(diào)用以執(zhí)行創(chuàng)建的 AWS Lambda 函數(shù)。目前,它顯示錯誤,因為它需要按照編寫的代碼進行一些輸入。

現(xiàn)在,讓我們輸入一些示例輸入并再次 調(diào)用它。請注意,這里我們在輸入框中輸入了一些文本,并且在單擊 invoke 時相同的內(nèi)容在響應(yīng)部分中以大寫顯示。日志輸出顯示如下-

現(xiàn)在,讓我們還檢查 AWS 控制臺,看看是否在我們從 Visual Studio 部署函數(shù)時創(chuàng)建了該函數(shù)。

上面創(chuàng)建的 Lambda 函數(shù)是 aws lambda using csharp,同樣顯示在 AWS 控制臺中,如下面的屏幕截圖所示-




處理程序簽名

Handler 是 AWS 執(zhí)行的起點。處理程序的名稱應(yīng)定義為-




ASSEMBLY::TYPE::METHOD




簽名的細節(jié)解釋如下-

ASSEMBLY-這是創(chuàng)建的應(yīng)用程序的 .NET 程序集的名稱。它基本上是創(chuàng)建項目的文件夾的名稱。

TYPE-這是處理程序的名稱?;旧暇褪莕amespace.classname。

METHOD-這是函數(shù)處理程序的名稱。

處理程序簽名的代碼如下所示-




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

C# 中的上下文對象

Context 對象提供有關(guān) AWS 環(huán)境中運行時的有用信息。上下文對象中可用的屬性如下表所示-

Sr.No 屬性和描述
1

MemoryLimitInMB

這將提供為 AWS Lambda 函數(shù)配置的內(nèi)存的詳細信息

2

FunctionName

AWS Lambda 函數(shù)的名稱

3

FunctionVersion

AWS Lambda 函數(shù)的版本

4

InvokedFunctionArn

ARN 用于調(diào)用此函數(shù)。

5

AwsRequestId

創(chuàng)建的 AWS 函數(shù)的 AWS 請求 ID

6

LogStreamName

Cloudwatch 日志流名稱

7

LogGroupName

Cloudwatch 組名

8

ClientContext

與 AWS 移動開發(fā)工具包一起使用時有關(guān)客戶端應(yīng)用程序和設(shè)備的信息

9

Identity

與 AWS 移動開發(fā)工具包一起使用時有關(guān)亞馬遜 cogbnito 身份的信息

10

RemainingTime

直到函數(shù)終止的剩余執(zhí)行時間

11

Logger

與上下文關(guān)聯(lián)的記錄器

示例

在本節(jié)中,讓我們用 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#中調(diào)用上述代碼可以觀察到的相關(guān)輸出如下所示-

在 AWS Console中調(diào)用上述代碼時可以觀察到的相關(guān)輸出如下所示-

使用 C# 進行日志記錄

對于日志記錄,您可以使用兩個函數(shù)-

context.Logger.LogLambdaLogger.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");            
}




上面給出的代碼的相應(yīng)輸出如下所示-

您可以從 CloudWatch 獲取日志,如下所示-

C# 中 Lambda 函數(shù)的錯誤處理

本節(jié)討論 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!");
     }
   }
}




上面給出的代碼的相應(yīng)輸出如下所示-




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



海外服務(wù)器免費測試http://running-capacitor.com/


USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請免費產(chǎn)品試用服務(wù)
立即申請