AWS Lambda - ฟังก์ชันใน C #
บทนี้จะอธิบายวิธีการทำงานกับฟังก์ชัน AWS Lambda ใน C # โดยละเอียด ที่นี่เราจะใช้ Visual Studio เพื่อเขียนและปรับใช้โค้ดกับ AWS Lambda สำหรับข้อมูลและความช่วยเหลือเกี่ยวกับการติดตั้ง Visual Studio และการเพิ่ม AWS toolkit ไปยัง Visual Studio โปรดดูที่ไฟล์Introductionบทในบทช่วยสอนนี้ เมื่อคุณติดตั้ง Visual Studio เสร็จแล้วโปรดทำตามขั้นตอนด้านล่างนี้ ดูภาพหน้าจอตามลำดับเพื่อความเข้าใจที่ดีขึ้น -
ขั้นตอนที่ 1
เปิด Visual Studio ของคุณและทำตามขั้นตอนเพื่อสร้างโครงการใหม่ คลิกที่File -> New -> Project.
ขั้นตอนที่ 2
ตอนนี้หน้าจอต่อไปนี้จะปรากฏขึ้นตามที่คุณเลือก AWS Lambda for Visual C#. เลือกAWS Lambda Project (.NET Core).
คุณสามารถเปลี่ยนชื่อได้หากจำเป็นจะคงชื่อเริ่มต้นไว้ที่นี่ คลิกOK ดำเนินการต่อไป.
ขั้นตอนต่อไปจะขอให้คุณเลือกไฟล์ Blueprint.
เลือก Empty function สำหรับตัวอย่างนี้และคลิก Finish. มันจะสร้างโครงสร้างโครงการใหม่ดังที่แสดงด้านล่าง -
ตอนนี้เลือก 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 สามารถเรียกใช้แบบซิงค์และแบบไม่ซิงค์ หากเรียกใช้ด้วยวิธีการซิงค์ดังที่แสดงด้านบนคุณสามารถมีประเภทการส่งคืน หาก async เกินกว่าประเภทการส่งคืนจะต้องเป็นโมฆะ
ตอนนี้ให้เราปรับใช้ AWS Lambda C # และทดสอบสิ่งเดียวกัน คลิกขวาที่โครงการแล้วคลิกPublish to AWS Lambda ดังแสดงด้านล่าง -
เติมไฟล์ Function Name และคลิกที่ Next. หน้าจอถัดไปที่แสดงคือAdvanced Function Details ตามที่แสดง -
ป้อนไฟล์ Role Name, Memory และ Timeout. โปรดทราบว่าที่นี่เราได้เลือกบทบาทที่มีอยู่ที่สร้างและใช้หน่วยความจำเป็น 128MB และหมดเวลาเป็น 10 วินาที เมื่อคลิกเสร็จแล้วUpload เพื่อเผยแพร่ไปยังคอนโซล AWS Lambda
คุณจะเห็นหน้าจอต่อไปนี้เมื่ออัปโหลดฟังก์ชัน AWS Lambda คลิกInvokeเพื่อเรียกใช้ฟังก์ชัน AWS Lambda ที่สร้างขึ้น ในปัจจุบันจะแสดงข้อผิดพลาดเนื่องจากต้องมีการป้อนข้อมูลตามรหัสที่เขียน
ตอนนี้ให้เราป้อนข้อมูลตัวอย่างและ Invokeอีกครั้ง โปรดทราบว่าที่นี่เราได้ป้อนข้อความบางส่วนในช่องป้อนข้อมูลและเช่นเดียวกันกับการคลิกinvokeจะแสดงเป็นตัวพิมพ์ใหญ่ในส่วนการตอบกลับ เอาต์พุตบันทึกจะแสดงด้านล่าง -
ตอนนี้ให้เราตรวจสอบคอนโซล AWS เพื่อดูว่าฟังก์ชันถูกสร้างขึ้นเมื่อเราปรับใช้ฟังก์ชันจาก Visual Studio หรือไม่
ฟังก์ชัน Lambda ที่สร้างขึ้นด้านบนคือ aws lambda using csharp และสิ่งเดียวกันนี้จะปรากฏในคอนโซล AWS ดังที่แสดงในภาพหน้าจอด้านล่าง -
ลายเซ็นตัวจัดการ
Handler เป็นจุดเริ่มต้นสำหรับ AWS ในการดำเนินการ ชื่อของตัวจัดการควรกำหนดเป็น -
ASSEMBLY::TYPE::METHOD
รายละเอียดของลายเซ็นมีรายละเอียดดังนี้ -
ASSEMBLY- นี่คือชื่อของแอสเซมบลี. NET สำหรับแอปพลิเคชันที่สร้างขึ้น โดยพื้นฐานแล้วเป็นชื่อของโฟลเดอร์ที่สร้างโครงการ
TYPE- นี่คือชื่อของตัวจัดการ โดยพื้นฐานแล้วคือ namespace.classname
METHOD - นี่คือชื่อของตัวจัดการฟังก์ชัน
รหัสสำหรับลายเซ็นตัวจัดการมีดังที่แสดงด้านล่าง -
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();
}
}
}
โปรดทราบว่านี่คือการชุมนุม AWSLamda3Type คือ namespace.classname ซึ่งก็คือ AWSLambda3.Function และวิธีการคือ FunctionHandler. ดังนั้นลายเซ็นของตัวจัดการคือAWSLamda3::AWSLambda3.Function::FunctionHandler
วัตถุบริบทใน C #
Context Object ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับรันไทม์ในสภาพแวดล้อม AWS คุณสมบัติที่มีอยู่ในวัตถุบริบทดังแสดงในตารางต่อไปนี้ -
ซีเนียร์ No | คุณสมบัติและคำอธิบาย |
---|---|
1 | MemoryLimitInMB ข้อมูลนี้จะให้รายละเอียดของหน่วยความจำที่กำหนดค่าสำหรับฟังก์ชัน AWS Lambda |
2 | FunctionName ชื่อฟังก์ชัน AWS Lambda |
3 | FunctionVersion เวอร์ชันของฟังก์ชัน AWS Lambda |
4 | InvokedFunctionArn ARN ใช้เพื่อเรียกใช้ฟังก์ชันนี้ |
5 | AwsRequestId รหัสคำขอ AWS สำหรับฟังก์ชัน AWS ที่สร้างขึ้น |
6 | LogStreamName ชื่อสตรีมบันทึก Cloudwatch |
7 | LogGroupName ชื่อกลุ่ม Cloudwatch |
8 | ClientContext ข้อมูลเกี่ยวกับแอปพลิเคชันไคลเอนต์และอุปกรณ์เมื่อใช้กับ AWS mobile SDK |
9 | Identity ข้อมูลเกี่ยวกับตัวตน amazon cogbnito เมื่อใช้กับ AWS mobile SDK |
10 | RemainingTime เวลาดำเนินการที่เหลืออยู่จนกว่าฟังก์ชันจะสิ้นสุดลง |
11 | Logger คนตัดไม้ที่เกี่ยวข้องกับบริบท |
ตัวอย่าง
ในส่วนนี้ให้เราทดสอบคุณสมบัติข้างต้นบางประการใน AWS Lambda ใน C # สังเกตโค้ดตัวอย่างด้านล่าง -
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 Console ดังแสดงด้านล่าง -
การบันทึกโดยใช้ 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!"
}