AWS Lambda: función en Go
La compatibilidad con Go Language es una adición reciente a AWS. Para trabajar con Go, debe seleccionar el idioma de la consola de AWS mientras crea la función AWS Lambda. En este capítulo, aprendamos en detalle sobre la función AWS Lambda en el lenguaje Go.
Instalación de Go
Para comenzar, necesitamos el soporte de Go Language. En esta sección, repasaremos los siguientes detalles para comenzar a trabajar con AWS Lambda en Go. Este es el sitio oficial para descargar Go:https://golang.org/dl/
Ahora, descargue el paquete según el sistema operativo. Siga el procedimiento que se proporciona aquí para instalar Go en el sistema operativo correspondiente.
Instalación en Windows
Observe que para Windows, hay disponibles descargas de 32 y 64 bits. Descargue el archivo zip y extraiga el contenido y guárdelo en un directorio de su elección.
Agregue las variables de entorno disponibles en ControlPanel ---> System ---> Advanced system settings.
Ahora, haga clic en Environment Variables y agregue la ruta del directorio como se muestra aquí -
También puede editar la variable del sistema como se muestra aquí:
Una vez realizados estos pasos, debería poder empezar a trabajar con Go. Abra el símbolo del sistema y verifique la versión del comando Ir. Observe la siguiente captura de pantalla para el mismo.
Instalación para Linux y Mac OS
Para instalar paquetes en Linux y Mac OS, siga las instrucciones que se muestran a continuación:
Desembale los paquetes y guárdelos en el lugar /usr/local/go. Ahora, agregue/usr/local/go/bina la variable de entorno PATH. Se puede hacer usando/etc/profile o $HOME/.profile.
Para ello, puede utilizar el siguiente comando
export PATH=$PATH:/usr/local/go/bin
Para agregar soporte de AWS para Windows, Linux y mac, use lo siguiente en su línea de comando de 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
Para compilar el código Windows / Linux / Mac, use los siguientes comandos:
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Función AWS Lambda con GO
Un programa devuelto en Go cuando la compilación proporciona un archivo ejecutable. El siguiente es un programa simple en Go con soporte de AWS Lambda. Necesitamos importar elgithub.com/aws/aws-lambda-go/lambda, ya que tiene la funcionalidad de programación Lambda. Otra necesidad importante de AWS Lambda es el controlador.
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)
}
Tenga en cuenta que la ejecución del GoEl programa comienza desde main donde lambda. start se llama con la función handler. Observe el código que se muestra a continuación:
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Ahora, ejecutemos el archivo anterior usando el comando Ir y luego comprima el archivo ejecutable.
La estructura del archivo que hemos estado usando es la que se muestra aquí:
Con go build, crea un archivo ejecutable llamado main.exe. Para comprimir el archivo y cargarlo en AWS Lambda, puede utilizar el siguiente procedimiento:
Para compilar el código Windows / Linux / Mac, use los siguientes comandos:
GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main
Luego, inicie sesión en la consola de AWS y cree la función Lambda usando Go como tiempo de ejecución -
Una vez creada la función, cargue el archivo zip ejecutable creado anteriormente.
Controlador de funciones lambda con Go
El controlador es donde comienza la ejecución del programa Go. De llamada principal alambda.start, la ejecución se llama con la función de controlador. Tenga en cuenta que el controlador que se agregará serámain.
Observe el código aquí para comprenderlo:
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
Siga las capturas de pantalla que se muestran a continuación:
Ahora, guarde la función y pruébela. Puede ver el resultado de la ejecución como se muestra aquí.
La salida de registro correspondiente será como se muestra aquí:
Objeto de contexto con Go
AWS Lambda en Go ofrece las siguientes variables y propiedades globales para el contexto.
MemoryLimitInMB - Límite de memoria, en MB que se configura en aws lambda.
FunctionName - nombre de la función lambda aws.
FunctionVersion - la versión de la función aws lambda en ejecución.
LogStreamName - nombre de la secuencia de registro de Cloudwatch.
LogGroupName - nombre del grupo de Cloudwatch.
Las propiedades disponibles en el contexto se dan a continuación:
AwsRequestID
Este es el ID de solicitud de AWS que obtiene cuando se invoca la función AWS Lambda.
ClientContext
Contiene detalles sobre la aplicación cliente y el dispositivo cuando se invoca a través del AWS Mobile SDK. Puede ser nulo. El contexto del cliente proporciona detalles como el ID del cliente, el título de la aplicación, el nombre de la versión, el código de la versión y el nombre del paquete de la aplicación.
InvokedFunctionArn
El ARN de la función invocada. Un ARN no calificado ejecuta la versión $ LATEST y los alias ejecutan la versión de la función a la que apunta.
Identidad
Proporciona detalles sobre el proveedor de identidad de Amazon Cognito cuando se utiliza con AWS Mobile SDK.
Los cambios agregados a main.go para imprimir detalles de contexto -
// 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)
}
Necesitamos importar el log y lambda contextpara usarlo con Go. Los detalles del contexto son los siguientes:
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
}
Puede observar el siguiente resultado al probar el código anterior:
Registro de datos
Con Go puede registrar datos usando el módulo log o fmt como se muestra a continuación:
// 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)
}
La salida para lo mismo es como se muestra a continuación:
Comprobación de registros en CloudWatch
También puede ver los registros en CloudWatch. Para esto, vaya al servicio AWS y seleccione cloudwatch y haga clic enLogsen el lado izquierdo. Ahora, busque la función Lambda en la lista para ver los registros:
Errores de función
Puede crear un manejo de errores personalizado en AWS Lambda utilizando el módulo de errores como se muestra en el código siguiente:
// 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)
}
El resultado del código que se muestra arriba es el que se muestra a continuación: