400-638-8808
|
微信公眾號(hào)





穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無阻

協(xié)同辦公 資源管理

超大郵件 超級(jí)功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

微信掃一掃 關(guān)注"天下數(shù)據(jù)"商品一律九折
![]()
搜索"朗玥科技"關(guān)注,了解最新優(yōu)惠

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

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

如果需要,您可以更改名稱,此處保留默認(rèn)名稱。點(diǎn)擊 確定繼續(xù)。
下一步將要求您選擇一個(gè) 藍(lán)圖。

為此示例選擇 空函數(shù),然后單擊 完成。它將創(chuàng)建一個(gè)新的項(xià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# 的處理程序詳細(xì)信息
處理程序顯示如下-
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
上面代碼的各個(gè)組成部分解釋如下-
FunctionHandler −這是 C# AWS Lambda 函數(shù)的起點(diǎn)。
字符串輸入- 處理程序的參數(shù) 字符串輸入 具有所有事件數(shù)據(jù),例如 S3 對(duì)象、API 網(wǎng)關(guān)詳細(xì)信息等。
ILambdaContext 上下文- ILamdaContext 是一個(gè)具有上下文詳細(xì)信息的接口。它具有 lambda 函數(shù)名稱、內(nèi)存詳細(xì)信息、超時(shí)詳細(xì)信息等詳細(xì)信息。
可以以同步和異步方式調(diào)用 Lambda 處理程序。如果以如上所示的同步方式調(diào)用,您可以擁有返回類型。如果是 async,則返回類型必須為 void。
現(xiàn)在,讓我們部署 AWS Lambda C# 并對(duì)其進(jìn)行測試。右鍵單擊該項(xiàng)目并單擊 發(fā)布到 AWS Lambda,如下所示-


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

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

上傳 AWS Lambda 函數(shù)后,您可以看到以下屏幕。單擊 調(diào)用以執(zhí)行創(chuàng)建的 AWS Lambda 函數(shù)。目前,它顯示錯(cuò)誤,因?yàn)樗枰凑站帉懙拇a進(jìn)行一些輸入。

現(xiàn)在,讓我們輸入一些示例輸入并再次 調(diào)用它。請(qǐng)注意,這里我們?cè)谳斎肟蛑休斎肓艘恍┪谋荆⑶以趩螕?nbsp;invoke 時(shí)相同的內(nèi)容在響應(yīng)部分中以大寫顯示。日志輸出顯示如下-

現(xiàn)在,讓我們還檢查 AWS 控制臺(tái),看看是否在我們從 Visual Studio 部署函數(shù)時(shí)創(chuàng)建了該函數(shù)。
上面創(chuàng)建的 Lambda 函數(shù)是 aws lambda using csharp,同樣顯示在 AWS 控制臺(tái)中,如下面的屏幕截圖所示-



處理程序簽名
Handler 是 AWS 執(zhí)行的起點(diǎn)。處理程序的名稱應(yīng)定義為-
ASSEMBLY::TYPE::METHOD
簽名的細(xì)節(jié)解釋如下-
ASSEMBLY-這是創(chuàng)建的應(yīng)用程序的 .NET 程序集的名稱。它基本上是創(chuàng)建項(xiàng)目的文件夾的名稱。
TYPE-這是處理程序的名稱。基本上就是namespace.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 {
/// <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# 中的上下文對(duì)象
Context 對(duì)象提供有關(guān) AWS 環(huán)境中運(yùn)行時(shí)的有用信息。上下文對(duì)象中可用的屬性如下表所示-
| Sr.No | 屬性和描述 |
| 1 |
MemoryLimitInMB 這將提供為 AWS Lambda 函數(shù)配置的內(nèi)存的詳細(xì)信息 |
| 2 |
FunctionName AWS Lambda 函數(shù)的名稱 |
| 3 |
FunctionVersion AWS Lambda 函數(shù)的版本 |
| 4 |
InvokedFunctionArn ARN 用于調(diào)用此函數(shù)。 |
| 5 |
AwsRequestId 創(chuàng)建的 AWS 函數(shù)的 AWS 請(qǐng)求 ID |
| 6 |
LogStreamName Cloudwatch 日志流名稱 |
| 7 |
LogGroupName Cloudwatch 組名 |
| 8 |
ClientContext 與 AWS 移動(dòng)開發(fā)工具包一起使用時(shí)有關(guān)客戶端應(yīng)用程序和設(shè)備的信息 |
| 9 |
Identity 與 AWS 移動(dòng)開發(fā)工具包一起使用時(shí)有關(guān)亞馬遜 cogbnito 身份的信息 |
| 10 |
RemainingTime 直到函數(shù)終止的剩余執(zhí)行時(shí)間 |
| 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 {
/// <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#中調(diào)用上述代碼可以觀察到的相關(guān)輸出如下所示-

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

使用 C# 進(jìn)行日志記錄
對(duì)于日志記錄,您可以使用兩個(gè)函數(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ù)的錯(cuò)誤處理
本節(jié)討論 C# 中的錯(cuò)誤處理。對(duì)于錯(cuò)誤處理, Exception 類必須擴(kuò)展,如下面的示例所示-
示例
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!"
}
作為AWS頂級(jí)代理商,選擇天.下.數(shù).據(jù)的優(yōu)勢(shì)
1、專屬客服協(xié)助注冊(cè)AWS,或提供注冊(cè)好的賬號(hào)直接使用
2、支持收U等多幣種支付代付,無額外服務(wù)費(fèi)用
3、AWS多種產(chǎn)品類型,更高產(chǎn)品租賃權(quán)限
4、針對(duì)大客戶,AWS專屬折扣優(yōu)惠
5、7x24小時(shí)專屬客服,在線解答各種疑問
詳詢電話40 0-63 8-88 08 官網(wǎng):http://m.51huadong.com/2023/aws.asp
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國服務(wù)器 韓國服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺(tái)灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國云主機(jī) 韓國云主機(jī) 新加坡云主機(jī) 臺(tái)灣云主機(jī) 日本云主機(jī) 德國云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無限防御 SSL證書 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號(hào)
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊(cè) 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證》 ISP證:粵ICP備07026347號(hào)
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營)聯(lián)合版權(quán)
深圳總部:中國.深圳市南山區(qū)深圳國際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號(hào)建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊(cè)業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品