AWS Lambda - Hàm trong C #
Chương này sẽ giải thích cho bạn cách làm việc với hàm AWS Lambda trong C # một cách chi tiết. Ở đây, chúng ta sẽ sử dụng visual studio để viết và triển khai mã cho AWS Lambda. Để biết bất kỳ thông tin và trợ giúp nào về cài đặt Visual studio và thêm bộ công cụ AWS vào Visual Studio, vui lòng tham khảoIntroductionchương trong hướng dẫn này. Khi bạn hoàn tất quá trình cài đặt Visual Studio, hãy làm theo các bước được cung cấp bên dưới. Tham khảo các ảnh chụp màn hình tương ứng để hiểu rõ hơn -
Bước 1
Mở Visual Studio của bạn và làm theo các bước để tạo dự án mới. Bấm vàoFile -> New -> Project.
Bước 2
Bây giờ, màn hình sau được hiển thị trong đó bạn chọn AWS Lambda for Visual C#. Lựa chọnAWS Lambda Project (.NET Core).
Bạn có thể thay đổi tên nếu cần, sẽ giữ ở đây tên mặc định. Nhấp chuộtOK để tiếp tục.
Bước tiếp theo sẽ yêu cầu bạn chọn một Blueprint.
Lựa chọn Empty function cho ví dụ này và nhấp vào Finish. Nó sẽ tạo một cấu trúc dự án mới như hình dưới đây:
Bây giờ, hãy chọn Function.cs là tệp chính nơi trình xử lý với sự kiện và ngữ cảnh được tạo cho AWS Lambda.
Cách hiển thị tệp Functions.cs như sau:
Bạn có thể sử dụng lệnh dưới đây để tuần tự hóa các tham số đầu vào và đầu ra cho hàm AWS Lambda.
[assembly:
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]
Chi tiết về trình xử lý cho C #
Trình xử lý được hiển thị như sau:
public string FunctionHandler(string input, ILambdaContext context) {
return input?.ToUpper();
}
Các thành phần khác nhau của đoạn mã trên được giải thích bên dưới:
FunctionHandler −Đây là điểm bắt đầu của hàm C # AWS Lambda.
String input − Các tham số cho trình xử lý string input có tất cả dữ liệu sự kiện như đối tượng S3, chi tiết cổng API, v.v.
ILambdaContext context −ILamdaContext là một giao diện có chi tiết ngữ cảnh. Nó có các chi tiết như tên hàm lambda, chi tiết bộ nhớ, chi tiết thời gian chờ, v.v.
Trình xử lý Lambda có thể được gọi theo cách đồng bộ và không đồng bộ. Nếu được gọi theo cách đồng bộ như được hiển thị ở trên, bạn có thể có kiểu trả về. Nếu không đồng bộ hơn kiểu trả về phải vô hiệu.
Bây giờ, chúng ta hãy triển khai AWS Lambda C # và thử nghiệm tương tự. Nhấp chuột phải vào dự án và nhấp vàoPublish to AWS Lambda như hình dưới đây -
Điền vào Function Name và nhấp vào Next. Màn hình tiếp theo được hiển thị làAdvanced Function Details như hình -
Nhập Role Name, Memory và Timeout. Lưu ý rằng ở đây chúng tôi đã chọn vai trò hiện có được tạo và sử dụng bộ nhớ là 128MB và thời gian chờ là 10 giây. Sau khi bấm xongUpload để xuất bản lên bảng điều khiển AWS Lambda.
Bạn có thể thấy màn hình sau khi chức năng AWS Lambda được tải lên. Nhấp chuộtInvokeđể thực thi hàm AWS Lambda đã tạo. Hiện tại, nó hiển thị lỗi vì nó cần một số đầu vào theo mã được viết.
Bây giờ, chúng ta hãy nhập một số đầu vào mẫu và Invokenó một lần nữa. Lưu ý rằng ở đây chúng tôi đã nhập một số văn bản vào hộp nhập liệu và tương tự khi nhấp vàoinvokeđược hiển thị bằng chữ hoa trong phần phản hồi. Đầu ra nhật ký được hiển thị bên dưới -
Bây giờ, chúng ta cũng hãy kiểm tra bảng điều khiển AWS để xem liệu hàm có được tạo như chúng ta đã triển khai hàm từ Visual Studio hay không.
Hàm Lambda được tạo ở trên là aws lambda using csharp và điều tương tự được hiển thị trong bảng điều khiển AWS như được hiển thị trong ảnh chụp màn hình được cung cấp bên dưới -
Chữ ký của người xử lý
Trình xử lý là điểm bắt đầu để AWS thực thi. Tên của trình xử lý phải được định nghĩa là -
ASSEMBLY::TYPE::METHOD
Các chi tiết của chữ ký được giải thích như sau:
ASSEMBLY- Đây là tên của lắp ráp .NET cho ứng dụng được tạo. Về cơ bản, nó là tên của thư mục mà từ đó dự án được tạo.
TYPE- Đây là tên của người xử lý. Về cơ bản nó là namespace.classname.
METHOD - Đây là tên của hàm xử lý.
Mã cho chữ ký của trình xử lý như được hiển thị bên dưới:
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();
}
}
}
Lưu ý rằng ở đây lắp ráp là AWSLamda3, Type là namespace .classname là AWSLambda3.Function và Phương pháp là FunctionHandler. Do đó, chữ ký xử lý làAWSLamda3::AWSLambda3.Function::FunctionHandler
Đối tượng ngữ cảnh trong C #
Đối tượng ngữ cảnh cung cấp thông tin hữu ích về thời gian chạy trong môi trường AWS. Các thuộc tính có sẵn trong đối tượng ngữ cảnh như được hiển thị trong bảng sau:
Sr.No | Thuộc tính & Mô tả |
---|---|
1 | MemoryLimitInMB Điều này sẽ cung cấp thông tin chi tiết về bộ nhớ được định cấu hình cho chức năng AWS Lambda |
2 | FunctionName Tên của hàm AWS Lambda |
3 | FunctionVersion Phiên bản của hàm AWS Lambda |
4 | InvokedFunctionArn ARN được sử dụng để gọi hàm này. |
5 | AwsRequestId Id yêu cầu AWS cho hàm AWS đã tạo |
6 | LogStreamName Tên luồng nhật ký Cloudwatch |
7 | LogGroupName Tên nhóm Cloudwatch |
số 8 | ClientContext Thông tin về ứng dụng khách và thiết bị khi được sử dụng với AWS mobile SDK |
9 | Identity Thông tin về danh tính ẩn danh trên amazon khi được sử dụng với AWS mobile SDK |
10 | RemainingTime Thời gian thực thi còn lại cho đến khi kết thúc chức năng |
11 | Logger Trình ghi nhật ký được liên kết với ngữ cảnh |
Thí dụ
Trong phần này, chúng ta hãy kiểm tra một số thuộc tính trên trong AWS Lambda trong C #. Hãy quan sát mã mẫu dưới đây -
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");
}
}
}
Đầu ra liên quan mà bạn có thể quan sát khi gọi đoạn mã trên trong C# như hình dưới đây -
Đầu ra liên quan mà bạn có thể quan sát khi gọi đoạn mã trên trong AWS Console như hình dưới đây -
Ghi nhật ký bằng C #
Để ghi nhật ký, bạn có thể sử dụng hai chức năng:
context.Logger.Log
LambdaLogger.Log
Quan sát ví dụ sau được hiển thị ở đây:
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");
}
Đầu ra tương ứng cho mã được đưa ra ở trên được hiển thị ở đây:
Bạn có thể lấy nhật ký từ CloudWatch như hình dưới đây -
Xử lý lỗi trong C # cho Hàm Lambda
Phần này thảo luận về xử lý lỗi trong C #. Để xử lý lỗi,Exception lớp phải được mở rộng như thể hiện trong ví dụ dưới đây -
thí dụ
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!");
}
}
}
Đầu ra tương ứng cho mã được cung cấp ở trên như được đưa ra bên dưới:
{
"errorType": "LambdaException",
"errorMessage": "Error in AWS Lambda!"
}