ไลบรารี ตัวอย่าง และเครื่องมือเพื่อช่วยนักพัฒนา Go พัฒนาฟังก์ชัน AWS Lambda
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนฟังก์ชัน AWS Lambda ใน Go โปรดไปที่เอกสารอย่างเป็นทางการ
// main.gopackage mainimport ( "github.com/aws/aws-lambda-go/lambda")func hello() (สตริง, ข้อผิดพลาด) { return "Hello λ!", nil}func main() { // Make ตัวจัดการพร้อมใช้งานสำหรับ Remote Procedure Call โดย AWS Lambdalambda.Start(hello) -
ในการเตรียมไบนารีเพื่อปรับใช้กับ AWS Lambda จำเป็นต้องคอมไพล์ไบนารีสำหรับ Linux และวางลงในไฟล์ .zip เมื่อใช้รันไทม์ provided
, provided.al2
หรือ provided.al2023
ไฟล์ปฏิบัติการภายในไฟล์ .zip ควรตั้งชื่อว่า bootstrap
สถาปัตยกรรมเริ่มต้นของ Lambda คือ x86_64
ดังนั้นเมื่อทำการคอมไพล์ข้ามจากสภาพแวดล้อมที่ไม่ใช่ x86 ไฟล์ปฏิบัติการควรถูกสร้างขึ้นด้วย GOARCH=amd64
ในทำนองเดียวกัน หากฟังก์ชัน Lambda ได้รับการกำหนดค่าให้ใช้ ARM ไฟล์ปฏิบัติการควรสร้างด้วย GOARCH=arm64
GOOS=linux GOARCH=amd64 ไป build -o bootstrap main.go zip lambda-handler.zip bootstrap
บน Linux ลักษณะการทำงานเริ่มต้นของคอมไพลเลอร์ Go คือการเชื่อมโยงเอาต์พุตที่ปฏิบัติการได้กับระบบ libc สำหรับฟังก์ชันไลบรารีมาตรฐานบางอย่าง (เช่น การค้นหา DNS) หากสภาพแวดล้อมบิลด์ใช้การกระจาย Linux ที่มี GNU libc เวอร์ชันใหม่กว่าสภาพแวดล้อมการปรับใช้ แอปพลิเคชันเมื่อปรับใช้กับ Lambda อาจล้มเหลวโดยมีข้อผิดพลาดเช่น /lib64/libc.so.6: version `GLIBC_X.YZ' not found
แอปพลิเคชัน Go ส่วนใหญ่ไม่จำเป็นต้องลิงก์กับ libc ระบบ ลักษณะการทำงานนี้สามารถปิดใช้งานได้โดยใช้ตัวแปรสภาพแวดล้อม CGO_ENABLED
CGO_ENABLED=0 go build -o bootstrap main.go zip lambda-handler.zip bootstrap
ดูการใช้ CGO
นักพัฒนา Windows อาจประสบปัญหาในการสร้างไฟล์ zip ที่ทำเครื่องหมายไบนารีว่าสามารถเรียกใช้งานได้บน Linux หากต้องการสร้าง .zip ที่จะใช้งานได้บน AWS Lambda เครื่องมือ build-lambda-zip
อาจมีประโยชน์
รับเครื่องมือ
go.exe ติดตั้ง github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest
ใช้เครื่องมือจาก GOPATH
ของคุณ หากคุณมีการติดตั้งเริ่มต้นของ Go เครื่องมือจะอยู่ใน %USERPROFILE%Gobin
ใน cmd.exe:
ตั้งค่า GOOS=linuxset GOARCH=amd64set CGO_ENABLED=0go build -o bootstrap main.go%USERPROFILE%Gobinbuild-lambda-zip.exe -o lambda-handler.zip bootstrap
ใน Powershell:
$env:GOOS = "linux"$env:GOARCH = "amd64"$env:CGO_ENABLED = "0"go build -o bootstrap main.go ~GoBinbuild-lambda-zip.exe -o บูต lambda-handler.zip
สำหรับแอปพลิเคชันที่ต้องใช้ CGO สภาพแวดล้อมบิลด์ต้องใช้เวอร์ชัน GNU libc ที่ติดตั้งซึ่งเข้ากันได้กับรันไทม์ Lambda เป้าหมาย มิฉะนั้น การดำเนินการอาจล้มเหลวโดยมีข้อผิดพลาดเช่น /lib64/libc.so.6: version `GLIBC_X.YZ' not found
รันไทม์แลมบ์ดา | เวอร์ชัน GLIBC |
---|---|
provided.al2023 | 2.34 |
provided.al2 | 2.26 |
provided และ go1.x | 2.17 |
อีกทางหนึ่ง Lambda รองรับคอนเทนเนอร์อิมเมจเป็นแพ็คเกจการปรับใช้งานซึ่งเป็นทางเลือกแทนไฟล์ .zip สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารอย่างเป็นทางการสำหรับการทำงานกับอิมเมจคอนเทนเนอร์
หากต้องการปรับใช้ฟังก์ชันของคุณ โปรดดูเอกสารอย่างเป็นทางการสำหรับการปรับใช้โดยใช้ AWS CLI, AWS Cloudformation และ AWS SAM
โมเดลเหตุการณ์สามารถใช้สร้างโมเดลแหล่งที่มาของเหตุการณ์ AWS ได้ เอกสารอย่างเป็นทางการมีคำแนะนำโดยละเอียด