AWS Lambda - ฟังก์ชันใน Go

การสนับสนุน Go Language เป็นส่วนเสริมล่าสุดของ AWS ในการทำงานกับ Go คุณต้องเลือกภาษาจากคอนโซล AWS ในขณะที่สร้างฟังก์ชัน AWS Lambda ในบทนี้ให้เราเรียนรู้รายละเอียดเกี่ยวกับฟังก์ชัน AWS Lambda ในภาษา Go

กำลังติดตั้ง Go

ในการเริ่มต้นเราต้องมีการสนับสนุน Go Language ในส่วนนี้เราจะดูรายละเอียดต่อไปนี้เพื่อเริ่มทำงานกับ AWS Lambda ใน Go นี่คือเว็บไซต์อย่างเป็นทางการสำหรับ Go download:https://golang.org/dl/

ตอนนี้ดาวน์โหลดแพคเกจตามระบบปฏิบัติการ ทำตามขั้นตอนที่ระบุที่นี่เพื่อติดตั้ง Go บนระบบปฏิบัติการที่เกี่ยวข้อง

การติดตั้งบน Windows

สังเกตว่าสำหรับ Windows จะมีการดาวน์โหลดแบบ 32 บิตและ 64 บิต ดาวน์โหลดไฟล์ zip และแตกเนื้อหาและเก็บไว้ในไดเร็กทอรีที่คุณเลือก

เพิ่มตัวแปรสภาพแวดล้อมที่มีอยู่ที่ ControlPanel ---> System ---> Advanced system settings.

ตอนนี้คลิก Environment Variables และเพิ่มเส้นทางไดเร็กทอรีดังที่แสดงไว้ที่นี่ -

คุณยังสามารถแก้ไขตัวแปรระบบได้ดังที่แสดงไว้ที่นี่ -

เมื่อทำตามขั้นตอนเหล่านี้เสร็จแล้วคุณจะสามารถเริ่มทำงานกับ Go ได้ เปิดพรอมต์คำสั่งและตรวจสอบคำสั่ง Go สำหรับเวอร์ชัน สังเกตภาพหน้าจอต่อไปนี้สำหรับสิ่งเดียวกัน

การติดตั้งสำหรับ Linux และ Mac OS

สำหรับการติดตั้งแพ็คเกจบน Linux และ Mac OS ให้ทำตามคำแนะนำที่แสดงด้านล่าง -

แกะหีบห่อและจัดเก็บในสถานที่ /usr/local/go. ตอนนี้เพิ่ม/usr/local/go/binไปยังตัวแปรสภาพแวดล้อม PATH สามารถทำได้โดยใช้/etc/profile หรือ $HOME/.profile.

เพื่อจุดประสงค์นี้คุณสามารถใช้คำสั่งต่อไปนี้

export PATH=$PATH:/usr/local/go/bin

ในการเพิ่มการรองรับ AWS สำหรับ Windows, Linux และ mac ให้ใช้สิ่งต่อไปนี้ในบรรทัดคำสั่ง git ของคุณ -

go.exe get -u github.com/aws/aws-lambda-go/lambda 
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip

ในการคอมไพล์โค้ด Windows / Linux / Mac ให้ใช้คำสั่งต่อไปนี้ -

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

AWS Lambda Function โดยใช้ GO

โปรแกรมที่ส่งคืนใน Go เมื่อบิลด์ให้ไฟล์ปฏิบัติการ ต่อไปนี้เป็นโปรแกรมง่ายๆใน Go with AWS Lambda support เราจำเป็นต้องนำเข้าไฟล์github.com/aws/aws-lambda-go/lambdaเนื่องจากมีฟังก์ชันการเขียนโปรแกรม Lambda ความต้องการที่สำคัญอีกประการหนึ่งสำหรับ AWS Lambda คือตัวจัดการ

Main.go

// main.go
package main

import (
   "github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
   return "Hello Lambda", nil
}
func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

โปรดทราบว่าการดำเนินการของไฟล์ Goโปรแกรมเริ่มต้นจาก main โดยที่ lambda start ถูกเรียกด้วยฟังก์ชันตัวจัดการ สังเกตโค้ดที่แสดงด้านล่าง -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

ตอนนี้ให้เราเรียกใช้ไฟล์ด้านบนโดยใช้คำสั่ง Go จากนั้น zip ไฟล์ปฏิบัติการ

โครงสร้างของไฟล์ที่เราใช้มีดังที่แสดงไว้ที่นี่ -

ด้วย go buildมันสร้างไฟล์ปฏิบัติการชื่อ main.exe ในการบีบอัดไฟล์และอัปโหลดใน AWS Lambda คุณสามารถใช้ขั้นตอนต่อไปนี้ -

ในการคอมไพล์โค้ด Windows / Linux / Mac ให้ใช้คำสั่งต่อไปนี้ -

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

จากนั้นลงชื่อเข้าใช้คอนโซล AWS และสร้างฟังก์ชัน Lambda โดยใช้ Go เป็นรันไทม์ -

เมื่อสร้างฟังก์ชันแล้วให้อัปโหลดไฟล์ซิปปฏิบัติการที่สร้างไว้ด้านบน

ตัวจัดการฟังก์ชัน Lambda พร้อม Go

Handler คือจุดเริ่มต้นการทำงานของโปรแกรม Go จากสายหลักไปยังlambda.startเรียกการดำเนินการด้วยฟังก์ชันตัวจัดการ โปรดทราบว่าตัวจัดการที่จะเพิ่มจะเป็นmain.

สังเกตรหัสที่นี่เพื่อความเข้าใจ -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

ทำตามภาพหน้าจอด้านล่าง -

ตอนนี้บันทึกฟังก์ชันและทดสอบ คุณสามารถดูผลการดำเนินการดังที่แสดงไว้ที่นี่

เอาต์พุตบันทึกที่เกี่ยวข้องจะแสดงดังที่แสดงไว้ที่นี่ -

วัตถุบริบทด้วย Go

AWS Lambda in Go ให้ตัวแปรส่วนกลางและคุณสมบัติสำหรับบริบทดังต่อไปนี้

  • MemoryLimitInMB - ขีด จำกัด หน่วยความจำเป็น MB ที่กำหนดค่าใน aws lambda

  • FunctionName - ชื่อของฟังก์ชัน aws lambda

  • FunctionVersion - เวอร์ชันของฟังก์ชัน aws lambda ที่เรียกใช้งาน

  • LogStreamName - ชื่อสตรีมบันทึก cloudwatch

  • LogGroupName - ชื่อกลุ่ม cloudwatch

คุณสมบัติที่มีอยู่ในบริบทได้รับภายใต้ -

AwsRequestID

นี่คือรหัสคำขอ AWS ที่คุณได้รับเมื่อเรียกใช้ฟังก์ชัน AWS Lambda

ClientContext

ซึ่งประกอบด้วยรายละเอียดเกี่ยวกับแอปพลิเคชันไคลเอนต์และอุปกรณ์เมื่อเรียกใช้ผ่าน AWS Mobile SDK มันสามารถเป็นโมฆะ บริบทไคลเอ็นต์ให้รายละเอียดเช่นรหัสไคลเอ็นต์ชื่อแอปพลิเคชันชื่อเวอร์ชันรหัสเวอร์ชันและชื่อแพ็กเกจแอปพลิเคชัน

InvokedFunctionArn

เรียกใช้ ARN ของฟังก์ชัน ARN ที่ไม่มีเงื่อนไขเรียกใช้เวอร์ชันล่าสุดและนามแฝงที่เรียกใช้เวอร์ชันฟังก์ชันที่ชี้ไป

เอกลักษณ์

ให้รายละเอียดเกี่ยวกับผู้ให้บริการข้อมูลประจำตัว Amazon Cognito เมื่อใช้กับ AWS mobile SDK

การเปลี่ยนแปลงที่เพิ่มเข้ามา main.go เพื่อพิมพ์รายละเอียดบริบท -

// main.go
package main

import (
   "context"
   "log"
   "github.com/aws/aws-lambda-go/lambda"
   "github.com/aws/aws-lambda-go/lambdacontext"
)

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

เราจำเป็นต้องนำเข้าไฟล์ log และ lambda contextเพื่อใช้กับ Go รายละเอียดบริบทมีดังนี้ -

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);	
   return "Hello Lambda", nil
}

คุณสามารถสังเกตผลลัพธ์ต่อไปนี้ในการทดสอบโค้ดด้านบน -

การบันทึกข้อมูล

ด้วย Go คุณสามารถบันทึกข้อมูลโดยใช้โมดูลบันทึกหรือ fmt ดังที่แสดงด้านล่าง -

// main.go
package main

import (
   "log"
   "fmt"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() (string, error) {
   log.Print("Hello from Lambda Go using log");
   fmt.Print("Hello from Lambda Go using fmt");
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

ผลลัพธ์เดียวกันดังที่แสดงด้านล่าง -

การตรวจสอบบันทึกใน CloudWatch

คุณสามารถดูบันทึกใน CloudWatch ได้เช่นกัน สำหรับสิ่งนี้ไปที่บริการ AWS แล้วเลือก cloudwatch แล้วคลิกLogsทางด้านซ้าย ตอนนี้ค้นหาฟังก์ชัน Lambda ในรายการเพื่อดูบันทึก -

ข้อผิดพลาดของฟังก์ชัน

คุณสามารถสร้างการจัดการข้อผิดพลาดแบบกำหนดเองใน AWS Lambda โดยใช้โมดูลข้อผิดพลาดดังที่แสดงในโค้ดด้านล่าง -

// main.go
package main
import (
   "errors"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() error  {
   return errors.New("There is an error in the code!")
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

ผลลัพธ์ของรหัสที่แสดงด้านบนเป็นไปตามที่ระบุด้านล่าง -