AWS Lambda - Go'da İşlev

Go Dil desteği, AWS'ye yeni bir ektir. Go ile çalışmak için AWS Lambda işlevini oluştururken AWS konsolundan dili seçmeniz gerekir. Bu bölümde, Go dilinde AWS Lambda işlevi hakkında ayrıntılı bilgi edinelim.

Go yükleniyor

Başlamak için Go Dil desteğine ihtiyacımız var. Bu bölümde, Go'da AWS Lambda ile çalışmaya başlamak için aşağıdaki ayrıntıları inceleyeceğiz. Bu, Go indirmenin resmi sitesidir:https://golang.org/dl/

Şimdi paketi işletim sistemine göre indirin. Go'yu ilgili işletim sistemine yüklemek için burada verilen prosedürü izleyin.

Windows üzerine kurulum

Windows için 32 bit ve 64 bit indirmenin mevcut olduğuna dikkat edin. Zip dosyasını indirin ve içeriği çıkarın ve seçtiğiniz bir dizinde saklayın.

Şurada bulunan ortam değişkenlerini ekleyin: ControlPanel ---> System ---> Advanced system settings.

Şimdi tıklayın Environment Variables düğmesini tıklayın ve burada gösterildiği gibi dizin yolunu ekleyin -

Ayrıca sistem değişkenini burada gösterildiği gibi düzenleyebilirsiniz -

Bu adımlar tamamlandıktan sonra, Go ile çalışmaya başlayabilmelisiniz. Komut istemini açın ve sürüm için Git komutunu kontrol edin. Aynısı için aşağıdaki ekran görüntüsüne bakın.

Linux ve Mac OS için Kurulum

Linux ve Mac OS üzerine paket yüklemek için, aşağıda gösterilen talimatları izleyin -

Paketleri açın ve yerinde saklayın /usr/local/go. Şimdi ekle/usr/local/go/binPATH ortam değişkenine. Kullanılarak yapılabilir/etc/profile veya $HOME/.profile.

Bu amaçla aşağıdaki komutu kullanabilirsiniz

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

Windows, Linux ve Mac'e AWS desteği eklemek için git komut satırınızda aşağıdakileri kullanın -

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 kodunu derlemek için aşağıdaki komutları kullanın -

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

GO kullanarak AWS Lambda İşlevi

Derleme çalıştırılabilir bir dosya verdiğinde Go'da döndürülen bir program. Aşağıda, AWS Lambda desteğiyle Go'da basit bir program yer almaktadır. İthal etmemiz gerekiyorgithub.com/aws/aws-lambda-go/lambdaBu, Lambda programlama işlevine sahip olduğundan AWS Lambda için bir diğer önemli ihtiyaç da işleyicidir.

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)
}

Unutmayın ki Goprogram main'den başlar. start işleyici işlevi ile çağrılır. Aşağıda gösterilen koda uyun -

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

Şimdi, yukarıdaki dosyayı Go komutunu kullanarak çalıştıralım ve ardından çalıştırılabilir dosyayı zipleyelim.

Kullandığımız dosyanın yapısı burada gösterildiği gibidir -

İle go build, main.exe adında bir yürütülebilir dosya oluşturur. Dosyayı sıkıştırmak ve AWS Lambda'ya yüklemek için aşağıdaki prosedürü kullanabilirsiniz -

Windows / Linux / Mac kodunu derlemek için aşağıdaki komutları kullanın -

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

Ardından, AWS konsolunda oturum açın ve şunu kullanarak Lambda işlevi oluşturun Go çalışma zamanı olarak -

İşlev oluşturulduktan sonra, yukarıda oluşturulan çalıştırılabilir zip dosyasını yükleyin.

Go ile Lambda işlev işleyicisi

İşleyici, Go programının yürütülmesinin başladığı yerdir. Ana aramadanlambda.start, yürütme eylemci işlevi ile çağrılır. Eklenecek işleyicininmain.

Anlamak için buradaki kodu inceleyin -

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

Aşağıda verilen ekran görüntülerine göre izleyin -

Şimdi işlevi kaydedin ve test edin. Yürütme sonucunu burada gösterildiği gibi görebilirsiniz.

Karşılık gelen günlük çıktısı burada gösterildiği gibi olacaktır -

Go ile bağlam nesnesi

AWS Lambda in Go, bağlam için aşağıdaki genel değişkenleri ve özellikleri sağlar.

  • MemoryLimitInMB - aws lambda'da yapılandırılan MB cinsinden bellek sınırı.

  • FunctionName - aws lambda işlevinin adı.

  • FunctionVersion - çalıştırılan aws lambda işlevinin sürümü.

  • LogStreamName - cloudwatch günlük akışı adı.

  • LogGroupName - cloudwatch grup adı.

Bağlamda mevcut özellikler aşağıdaki gibi verilmiştir -

AwsRequestID

Bu, AWS Lambda işlevi çağrıldığında aldığınız AWS istek kimliğidir.

ClientContext

Bu, AWS Mobile SDK aracılığıyla çağrıldığında istemci uygulaması ve cihazla ilgili ayrıntıları içerir. Boş olabilir. İstemci bağlamı, istemci kimliği, uygulama başlığı, sürüm adı, sürüm kodu ve uygulama paketi adı gibi ayrıntıları sağlar.

InvokedFunctionArn

İşlevin ARN'si çağrıldı. Niteliksiz bir ARN, $ LATEST sürümünü çalıştırır ve diğer adlar, işaret ettiği işlev sürümünü çalıştırır.

Kimlik

AWS mobil SDK ile kullanıldığında Amazon Cognito kimlik sağlayıcısı hakkında ayrıntılar verir.

Eklenen değişiklikler main.go bağlam ayrıntılarını yazdırmak için -

// 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)
}

İthal etmemiz gerekiyor log ve lambda contextGo ile kullanmak için. Bağlam ayrıntıları aşağıdaki gibidir -

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
}

Yukarıdaki kodu test ederken aşağıdaki çıktıyı gözlemleyebilirsiniz -

Günlük verileri

İle Go aşağıda gösterildiği gibi günlük veya fmt modülünü kullanarak verileri günlüğe kaydedebilirsiniz -

// 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)
}

Aynısı için çıktı aşağıda gösterildiği gibidir -

CloudWatch'ta Günlükleri Kontrol Etme

Günlükleri CloudWatch'ta da görebilirsiniz. Bunun için AWS hizmetine gidin ve cloudwatch'ı seçin ve tıklayınLogssol tarafta. Şimdi, günlükleri görmek için listede Lambda işlevini arayın -

İşlev Hataları

Aşağıdaki kodda gösterildiği gibi hata modülünü kullanarak AWS Lambda'da özel hata işleme oluşturabilirsiniz -

// 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)
}

Yukarıda gösterilen kod için çıktı aşağıda verildiği gibidir -