AWS Lambda - Fungsi di Go
Dukungan Go Language adalah tambahan terbaru untuk AWS. Untuk bekerja dengan Go, Anda perlu memilih bahasa dari konsol AWS saat membuat fungsi AWS Lambda. Di bab ini, mari kita pelajari secara detail tentang fungsi AWS Lambda dalam bahasa Go.
Menginstal Go
Untuk memulai, kami membutuhkan dukungan Go Language. Di bagian ini, kami akan membahas detail berikut untuk mulai bekerja dengan AWS Lambda di Go. Ini adalah situs resmi untuk mengunduh Go:https://golang.org/dl/
Sekarang, unduh paket sesuai sistem operasi. Ikuti prosedur yang diberikan di sini untuk menginstal Go di sistem operasi terkait.
Instalasi di Windows
Perhatikan bahwa untuk Windows, tersedia unduhan 32-bit dan 64-bit. Unduh file zip dan ekstrak isinya dan simpan di direktori pilihan Anda.
Tambahkan variabel lingkungan yang tersedia di ControlPanel ---> System ---> Advanced system settings.
Sekarang, klik Environment Variables tombol dan tambahkan jalur direktori seperti yang ditunjukkan di sini -
Anda juga dapat mengedit variabel sistem seperti yang ditunjukkan di sini -
Setelah langkah-langkah ini selesai, Anda sudah bisa mulai bekerja dengan Go. Buka command prompt dan periksa perintah Go untuk versi. Amati screenshot berikut untuk hal yang sama.
Instalasi untuk Linux dan Mac OS
Untuk menginstal paket di Linux dan Mac OS, ikuti instruksi seperti yang ditunjukkan di bawah ini -
Buka paket dan simpan di lokasi /usr/local/go. Sekarang, tambahkan/usr/local/go/binke variabel lingkungan PATH. Itu bisa dilakukan dengan menggunakan/etc/profile atau $HOME/.profile.
Untuk tujuan ini, Anda dapat menggunakan perintah berikut
export PATH=$PATH:/usr/local/go/bin
Untuk menambahkan dukungan AWS ke untuk Windows, Linux, dan mac, gunakan yang berikut ini di baris perintah git Anda -
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
Untuk mengkompilasi kode Windows / Linux / Mac, gunakan perintah berikut -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Fungsi AWS Lambda menggunakan GO
Program yang dikembalikan di Go saat build memberikan file yang dapat dieksekusi. Berikut ini adalah program sederhana di Go dengan dukungan AWS Lambda. Kita perlu mengimpor filegithub.com/aws/aws-lambda-go/lambda, karena ini memiliki fungsionalitas pemrograman Lambda. Kebutuhan penting lainnya untuk AWS Lambda adalah penangannya.
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)
}
Perhatikan bahwa eksekusi file GoProgram dimulai dari main dimana lambda. start dipanggil dengan fungsi handler. Perhatikan kode yang ditunjukkan di bawah ini -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Sekarang, mari kita jalankan file di atas menggunakan perintah Go dan kemudian zip file yang dapat dieksekusi.
Struktur file yang kami gunakan seperti yang ditunjukkan di sini -
Dengan go build, itu membuat file yang dapat dieksekusi yang disebut main.exe. Untuk membuat zip file dan mengunggahnya di AWS Lambda, Anda dapat menggunakan prosedur berikut -
Untuk mengkompilasi kode Windows / Linux / Mac, gunakan perintah berikut -
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Kemudian, masuk ke konsol AWS dan buat fungsi Lambda menggunakan Go sebagai runtime -
Setelah fungsi dibuat, unggah file zip yang dapat dieksekusi yang dibuat di atas.
Penangan fungsi Lambda dengan Go
Handler adalah tempat eksekusi program Go dimulai. Dari panggilan utama kelambda.start, eksekusi dipanggil dengan fungsi handler. Perhatikan bahwa penangan yang akan ditambahkan adalahmain.
Amati kodenya di sini untuk pemahaman -
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Ikuti sesuai tangkapan layar yang diberikan di bawah ini -
Sekarang, simpan fungsinya dan uji. Anda bisa melihat hasil eksekusinya seperti yang ditunjukkan di sini.
Output log yang sesuai akan ditampilkan di sini -
Objek konteks dengan Go
AWS Lambda di Go memberikan variabel dan properti global berikut untuk konteks.
MemoryLimitInMB - Batas memori, dalam MB yang dikonfigurasi di aws lambda.
FunctionName - nama fungsi aws lambda.
FunctionVersion - versi eksekusi fungsi lambda aws.
LogStreamName - Nama aliran log cloudwatch.
LogGroupName - nama grup cloudwatch.
Properti yang tersedia dalam konteks diberikan seperti di bawah -
AwsRequestID
Ini adalah ID permintaan AWS yang Anda dapatkan saat fungsi AWS Lambda dipanggil.
ClientContext
Ini berisi detail tentang aplikasi dan perangkat klien ketika dipanggil melalui AWS Mobile SDK. Bisa jadi nol. Konteks klien memberikan detail seperti ID klien, judul aplikasi, nama versi, kode versi, dan nama paket aplikasi.
InvokedFunctionArn
ARN dari fungsi yang dipanggil. ARN yang tidak memenuhi syarat menjalankan versi $ TERBARU dan alias menjalankan versi fungsi yang ditunjuknya.
Identitas
Ini memberikan detail tentang penyedia identitas Amazon Cognito saat digunakan dengan AWS mobile SDK.
Perubahan ditambahkan ke main.go untuk mencetak detail konteks -
// 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)
}
Kita perlu mengimpor file log dan lambda contextuntuk menggunakannya dengan Go. Rincian konteksnya adalah sebagai berikut -
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
}
Anda dapat mengamati output berikut saat menguji kode di atas -
Data pencatatan
Dengan Go Anda dapat mencatat data menggunakan modul log atau fmt seperti yang ditunjukkan di bawah ini -
// 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)
}
Outputnya sama seperti yang ditunjukkan di bawah ini -
Memeriksa Log di CloudWatch
Anda juga dapat melihat log di CloudWatch. Untuk ini, buka layanan AWS dan pilih cloudwatch dan klikLogsdi sisi kiri. Sekarang, cari fungsi Lambda dalam daftar untuk melihat log -
Kesalahan Fungsi
Anda dapat membuat penanganan kesalahan khusus di AWS Lambda menggunakan modul kesalahan seperti yang ditunjukkan pada kode di bawah ini -
// 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)
}
Output untuk kode yang ditunjukkan di atas adalah seperti yang diberikan di bawah ini -