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)
}
ผลลัพธ์ของรหัสที่แสดงด้านบนเป็นไปตามที่ระบุด้านล่าง -