本章將詳細解釋如何在 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/