AWS Lambda - Funzione in Go

Il supporto di Go Language è una recente aggiunta ad AWS. Per lavorare con Go, devi selezionare la lingua dalla console AWS durante la creazione della funzione AWS Lambda. In questo capitolo, impariamo in dettaglio la funzione AWS Lambda in linguaggio Go.

Installazione di Go

Per iniziare abbiamo bisogno del supporto di Go Language. In questa sezione, esamineremo i seguenti dettagli per iniziare a lavorare con AWS Lambda in Go. Questo è il sito ufficiale per il download di Go:https://golang.org/dl/

Ora scarica il pacchetto secondo il sistema operativo. Seguire la procedura qui fornita per installare Go sul rispettivo sistema operativo.

Installazione su Windows

Si noti che per Windows è disponibile il download a 32 e 64 bit. Scarica il file zip ed estrai il contenuto e memorizzalo in una directory a tua scelta.

Aggiungi le variabili d'ambiente disponibili su ControlPanel ---> System ---> Advanced system settings.

Ora fai clic su Environment Variables e aggiungi il percorso della directory come mostrato qui -

Puoi anche modificare la variabile di sistema come mostrato qui -

Una volta completati questi passaggi, dovresti essere in grado di iniziare a lavorare con Go. Apri il prompt dei comandi e controlla il comando Vai per la versione. Osserva lo screenshot seguente per lo stesso.

Installazione per Linux e Mac OS

Per installare i pacchetti su Linux e Mac OS, seguire le istruzioni come mostrato di seguito -

Disimballare i pacchetti e conservarli nella posizione /usr/local/go. Ora aggiungi/usr/local/go/binalla variabile d'ambiente PATH. Può essere fatto usando/etc/profile o $HOME/.profile.

A tale scopo, puoi utilizzare il seguente comando

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

Per aggiungere AWS support a per Windows, Linux e mac, utilizza quanto segue nella riga di comando 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

Per compilare il codice Windows / Linux / Mac, utilizzare i seguenti comandi:

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

Funzione AWS Lambda utilizzando GO

Un programma restituito in Go quando la build fornisce un file eseguibile. Quello che segue è un semplice programma in Go con supporto AWS Lambda. Dobbiamo importare il filegithub.com/aws/aws-lambda-go/lambda, poiché ha la funzionalità di programmazione Lambda. Un'altra esigenza importante per AWS Lambda è il gestore.

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

Si noti che l'esecuzione del file Goil programma parte da main dove lambda. start viene chiamato con la funzione handler. Rispettare il codice mostrato di seguito -

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

Ora, eseguiamo il file sopra usando il comando Go e quindi comprimiamo il file eseguibile.

La struttura del file che abbiamo utilizzato è come mostrato qui -

Con go build, crea un file eseguibile chiamato main.exe. Per comprimere il file e caricarlo in AWS Lambda, puoi utilizzare la seguente procedura:

Per compilare il codice Windows / Linux / Mac, utilizzare i seguenti comandi:

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

Quindi, accedi alla console AWS e crea la funzione Lambda utilizzando Go come runtime -

Una volta creata la funzione, carica il file zip eseguibile creato sopra.

Gestore della funzione Lambda con Go

Handler è dove inizia l'esecuzione del programma Go. Dalla chiamata principale alambda.start, l'esecuzione viene chiamata con la funzione handler. Notare che il gestore da aggiungere saràmain.

Osserva il codice qui per una comprensione -

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

Segui gli screenshot indicati di seguito:

Ora salva la funzione e provala. Puoi vedere il risultato dell'esecuzione come mostrato qui.

L'output del registro corrispondente sarà come mostrato qui -

Oggetto contesto con Go

AWS Lambda in Go fornisce le seguenti variabili globali e proprietà per il contesto.

  • MemoryLimitInMB - Limite di memoria, in MB configurato in aws lambda.

  • FunctionName - nome della funzione lambda aws.

  • FunctionVersion - la versione della funzione aws lambda in esecuzione.

  • LogStreamName - nome del flusso di log di cloudwatch.

  • LogGroupName - nome del gruppo cloudwatch.

Le proprietà disponibili in contesto sono riportate come sotto -

AwsRequestID

Questo è l'ID richiesta AWS che ottieni quando viene richiamata la funzione AWS Lambda.

ClientContext

Contiene dettagli sull'applicazione client e sul dispositivo quando viene richiamato tramite AWS Mobile SDK. Può essere nullo. Il contesto client fornisce dettagli come ID client, titolo dell'applicazione, nome della versione, codice della versione e nome del pacchetto dell'applicazione.

InvokedFunctionArn

L'ARN della funzione invocata. Un ARN non qualificato esegue la versione $ LATEST e gli alias eseguono la versione della funzione a cui punta.

Identità

Fornisce dettagli sul provider di identità Amazon Cognito se utilizzato con AWS Mobile SDK.

Le modifiche aggiunte a main.go per stampare i dettagli del contesto -

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

Dobbiamo importare il file log e lambda contextper usarlo con Go. I dettagli del contesto sono i seguenti:

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
}

È possibile osservare il seguente output durante il test del codice sopra:

Registrazione dei dati

Con Go è possibile registrare i dati utilizzando il modulo log o fmt come mostrato di seguito -

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

L'output per lo stesso è come mostrato di seguito:

Verifica dei log in CloudWatch

Puoi anche vedere i log in CloudWatch. Per questo, vai al servizio AWS e seleziona cloudwatch e fai clic suLogssul lato sinistro. Ora cerca la funzione Lambda nell'elenco per vedere i log -

Errori di funzione

Puoi creare una gestione degli errori personalizzata in AWS Lambda utilizzando il modulo degli errori come mostrato nel codice seguente:

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

L'output per il codice mostrato sopra è il seguente: