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: