
- AWS Lambda 教程
- AWS Lambda - 首頁
- AWS Lambda - 概述
- AWS Lambda - 環境設定
- AWS Lambda - 簡介
- 構建 Lambda 函式
- NodeJS 函式
- Java 函式
- Python 函式
- Go 函式
- C# 函式
- 配置 Lambda 函式
- 使用 AWS 控制檯建立和部署
- 使用 AWS CLI 建立和部署
- 使用 Serverless Framework 建立和部署
- AWS 執行和呼叫 Lambda 函式
- 刪除 Lambda 函式
- 使用 Amazon API Gateway
- 帶有 Amazon S3 的 Lambda 函式
- 帶有 Amazon DynamoDB 的 Lambda 函式
- 帶有計劃事件的 Lambda 函式
- 帶有 Amazon SNS 的 Lambda 函式
- 帶有 CloudTrail 的 Lambda 函式
- 帶有 Amazon Kinesis 的 Lambda 函式
- 帶有自定義使用者應用程式的 Lambda 函式
- AWS Lambda@Edge 與 CloudFront
- 使用 CloudWatch 進行監控和故障排除
- AWS Lambda - 附加示例
- AWS Lambda 有用資源
- AWS Lambda - 快速指南
- AWS Lambda - 有用資源
- AWS Lambda - 討論
AWS Lambda – C# 函式
本章將詳細解釋如何在 C# 中使用 AWS Lambda 函式。在這裡,我們將使用 Visual Studio 來編寫程式碼並將其部署到 AWS Lambda。有關安裝 Visual Studio 和向 Visual Studio 新增 AWS 工具包的任何資訊和幫助,請參閱本教程中的**簡介**章節。完成 Visual Studio 的安裝後,請按照以下步驟操作。請參考相應的螢幕截圖以便更好地理解:
步驟 1
開啟 Visual Studio 並按照步驟建立新專案。點選**檔案 -> 新建 -> 專案**。

步驟 2
現在,將顯示以下螢幕,您可以在其中選擇**用於 Visual C# 的 AWS Lambda**。選擇**AWS Lambda 專案 (.NET Core)**。

如果需要,您可以更改名稱,這裡將保留預設名稱。單擊**確定**繼續。
下一步將要求您選擇一個**藍圖**。

在此示例中選擇**空函式**,然後單擊**完成**。它將建立一個新的專案結構,如下所示:

現在,選擇**Function.cs**,這是建立 AWS Lambda 的事件和上下文的處理程式的主要檔案。
Functions.cs 檔案的顯示如下:

您可以使用以下命令將輸入和輸出引數序列化到 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 函式的起點。
**String input –** 處理程式引數**string input** 包含所有事件資料,例如 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 控制檯中顯示如下面的螢幕截圖所示:




處理程式簽名
處理程式是 AWS 執行的起點。處理程式的名稱應定義為:
ASSEMBLY::TYPE::METHOD
簽名的詳細資訊解釋如下:
**程式集 –** 這是為建立的應用程式建立的 .NET 程式集的名稱。它基本上是建立專案的資料夾的名稱。
**型別 –** 這是處理程式的名稱。它基本上是名稱空間.類名。
**方法 –** 這是函式處理程式的名稱。
處理程式簽名的程式碼如下所示:
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**,型別是名稱空間.類名,即**AWSLambda3.Function**,方法是**FunctionHandler**。因此,處理程式簽名是**AWSLamda3::AWSLambda3.Function::FunctionHandler**
C# 中的上下文物件
上下文物件提供了有關 AWS 環境中執行時的有用資訊。上下文物件中可用的屬性如下表所示:
序號 | 屬性和說明 |
---|---|
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 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#**中呼叫上述程式碼時,您可以觀察到的相關輸出如下所示:

當您在**AWS 控制檯**中呼叫上述程式碼時,您可以觀察到的相關輸出如下所示:

使用 C# 進行日誌記錄
對於日誌記錄,您可以使用兩個函式:
context.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"); }
上面給出的程式碼的相應輸出顯示在此處:

您可以從 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!" }