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: