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!"
}