AWS Lambda - funkcja w ruchu

Obsługa języka Go to niedawny dodatek do AWS. Aby pracować z Go, musisz wybrać język z konsoli AWS podczas tworzenia funkcji AWS Lambda. W tym rozdziale zapoznajmy się szczegółowo z funkcją AWS Lambda w języku Go.

Instalowanie Go

Aby rozpocząć, potrzebujemy wsparcia w języku Go. W tej sekcji omówimy następujące szczegóły, aby rozpocząć pracę z AWS Lambda in Go. To jest oficjalna strona pobierania Go:https://golang.org/dl/

Teraz pobierz pakiet zgodnie z systemem operacyjnym. Postępuj zgodnie z procedurą podaną tutaj, aby zainstalować Go w odpowiednim systemie operacyjnym.

Instalacja w systemie Windows

Zwróć uwagę, że dla systemu Windows dostępne jest pobieranie w wersji 32-bitowej i 64-bitowej. Pobierz plik zip, wyodrębnij zawartość i zapisz ją w wybranym katalogu.

Dodaj zmienne środowiskowe dostępne pod adresem ControlPanel ---> System ---> Advanced system settings.

Teraz kliknij Environment Variables i dodaj ścieżkę do katalogu, jak pokazano tutaj -

Możesz również edytować zmienną systemową, jak pokazano tutaj -

Po wykonaniu tych czynności powinieneś być w stanie rozpocząć pracę z Go. Otwórz wiersz polecenia i sprawdź wersję polecenia Przejdź. Obserwuj poniższy zrzut ekranu dla tego samego.

Instalacja w systemach Linux i Mac OS

Aby zainstalować pakiety w systemie Linux i Mac OS, postępuj zgodnie z instrukcjami, jak pokazano poniżej -

Rozpakuj paczki i przechowuj je na miejscu /usr/local/go. Teraz dodaj/usr/local/go/bindo zmiennej środowiskowej PATH. Można to zrobić za pomocą/etc/profile lub $HOME/.profile.

W tym celu możesz użyć następującego polecenia

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

Aby dodać obsługę AWS do systemów Windows, Linux i Mac, użyj następującego polecenia w wierszu poleceń 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

Aby skompilować kod Windows / Linux / Mac, użyj następujących poleceń -

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

Funkcja AWS Lambda za pomocą GO

Program zwrócony w Go, gdy kompilacja daje plik wykonywalny. Poniżej znajduje się prosty program w Go z obsługą AWS Lambda. Musimy zaimportowaćgithub.com/aws/aws-lambda-go/lambda, ponieważ ma to funkcjonalność programowania Lambda. Inną ważną potrzebą AWS Lambda jest handler.

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

Zwróć uwagę, że wykonanie Goprogram zaczyna się od głównego, gdzie lambda. start jest wywoływany z funkcją obsługi. Przestrzegaj kodu pokazanego poniżej -

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

Teraz uruchommy powyższy plik za pomocą polecenia Go, a następnie spakuj plik wykonywalny.

Struktura pliku, którego używaliśmy, jest taka, jak pokazano tutaj -

Z go build, tworzy plik wykonywalny o nazwie main.exe. Aby spakować plik i przesłać go do AWS Lambda, możesz skorzystać z następującej procedury -

Aby skompilować kod Windows / Linux / Mac, użyj następujących poleceń -

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

Następnie zaloguj się do konsoli AWS i utwórz funkcję Lambda za pomocą Go jako środowisko wykonawcze -

Po utworzeniu funkcji prześlij plik wykonywalny zip utworzony powyżej.

Obsługa funkcji lambda z Go

Handler to miejsce, w którym rozpoczyna się wykonywanie programu Go. Od głównego połączenia dolambda.start, wykonanie jest wywoływane za pomocą funkcji obsługi. Zauważ, że program obsługi, który ma zostać dodany, będziemain.

Obserwuj kod tutaj, aby zrozumieć -

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

Postępuj zgodnie z zrzutami ekranu podanymi poniżej -

Teraz zapisz funkcję i przetestuj ją. Możesz zobaczyć wynik wykonania, jak pokazano tutaj.

Odpowiednie dane wyjściowe dziennika będą wyglądać tak, jak pokazano tutaj -

Obiekt kontekstu z Go

AWS Lambda in Go podaje następujące zmienne globalne i właściwości kontekstu.

  • MemoryLimitInMB - Limit pamięci w MB, który jest skonfigurowany w aws lambda.

  • FunctionName - nazwa funkcji lambda aws.

  • FunctionVersion - wersja wykonywania funkcji lambda aws.

  • LogStreamName - nazwa strumienia dziennika Cloudwatch.

  • LogGroupName - nazwa grupy Cloudwatch.

Właściwości dostępne w kontekście są podane jako -

AwsRequestID

To jest identyfikator żądania AWS, który otrzymujesz po wywołaniu funkcji AWS Lambda.

ClientContext

Zawiera szczegółowe informacje o aplikacji klienckiej i urządzeniu, gdy jest ona wywoływana przez AWS Mobile SDK. Może być zerowa. Kontekst klienta zawiera szczegółowe informacje, takie jak identyfikator klienta, tytuł aplikacji, nazwa wersji, kod wersji i nazwa pakietu aplikacji.

InvokedFunctionArn

ARN wywołanej funkcji. Niekwalifikowany ARN wykonuje wersję $ LATEST, a aliasy wykonują wersję funkcji, na którą wskazuje.

Tożsamość

Zawiera szczegółowe informacje na temat dostawcy tożsamości Amazon Cognito, gdy jest używany z mobilnym SDK AWS.

Zmiany dodane do main.go wydrukować szczegóły kontekstu -

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

Musimy zaimportować log i lambda contextużywać go z Go. Szczegóły kontekstu są następujące -

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
}

Podczas testowania powyższego kodu można zaobserwować następujące wyniki:

Rejestrowanie danych

Z Go możesz rejestrować dane za pomocą modułu log lub fmt, jak pokazano poniżej -

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

Wynik dla tego samego jest taki, jak pokazano poniżej -

Sprawdzanie dzienników w CloudWatch

Możesz również zobaczyć dzienniki w CloudWatch. W tym celu przejdź do usługi AWS i wybierz Cloudwatch i kliknijLogspo lewej stronie. Teraz wyszukaj funkcję Lambda na liście, aby zobaczyć dzienniki -

Błędy funkcji

Możesz stworzyć niestandardową obsługę błędów w AWS Lambda za pomocą modułu błędów, jak pokazano w poniższym kodzie -

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

Dane wyjściowe dla kodu pokazanego powyżej są takie, jak podano poniżej -