AWS Lambda - Função em Go

O suporte ao idioma Go é uma adição recente à AWS. Para trabalhar com Go, você precisa selecionar o idioma do console AWS ao criar a função AWS Lambda. Neste capítulo, vamos aprender em detalhes sobre a função AWS Lambda na linguagem Go.

Instalando Go

Para começar, precisamos de suporte para Go Language. Nesta seção, examinaremos os seguintes detalhes para começar a trabalhar com o AWS Lambda em Go. Este é o site oficial para download do Go:https://golang.org/dl/

Agora, baixe o pacote de acordo com o sistema operacional. Siga o procedimento fornecido aqui para instalar o Go no respectivo sistema operacional.

Instalação em Windows

Observe que para Windows, há download de 32 bits e 64 bits disponíveis. Baixe o arquivo zip, extraia o conteúdo e armazene-o em um diretório de sua escolha.

Adicione as variáveis ​​de ambiente disponíveis em ControlPanel ---> System ---> Advanced system settings.

Agora clique Environment Variables botão e adicione o caminho do diretório conforme mostrado aqui -

Você também pode editar a variável do sistema conforme mostrado aqui -

Depois de concluir essas etapas, você poderá começar a trabalhar com Go. Abra o prompt de comando e verifique a versão do comando Go. Observe a imagem a seguir para o mesmo.

Instalação para Linux e Mac OS

Para instalar pacotes no Linux e Mac OS, siga as instruções conforme mostrado abaixo -

Desempacote os pacotes e guarde-os no local /usr/local/go. Agora, adicione/usr/local/go/binà variável de ambiente PATH. Isso pode ser feito usando/etc/profile ou $HOME/.profile.

Para este propósito, você pode usar o seguinte comando

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

Para adicionar suporte AWS para Windows, Linux e mac, use o seguinte em sua linha de 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

Para compilar o código Windows / Linux / Mac, use os seguintes comandos -

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

Função AWS Lambda usando GO

Um programa retornado em Go quando o build fornece um arquivo executável. A seguir está um programa simples em Go com suporte para AWS Lambda. Precisamos importar ogithub.com/aws/aws-lambda-go/lambda, já que tem a funcionalidade de programação Lambda. Outra necessidade importante do AWS Lambda é o manipulador.

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

Observe que a execução do Goprograma começa de principal onde lambda. start é chamado com a função de manipulador. Observe o código mostrado abaixo -

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

Agora, vamos executar o arquivo acima usando o comando Go e, em seguida, compactar o arquivo executável.

A estrutura do arquivo que estamos usando é mostrada aqui -

Com go build, ele cria um arquivo executável chamado main.exe. Para compactar o arquivo e carregá-lo no AWS Lambda, você pode usar o seguinte procedimento -

Para compilar o código Windows / Linux / Mac, use os seguintes comandos -

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

Em seguida, faça login no console AWS e crie a função Lambda usando Go como tempo de execução -

Assim que a função for criada, carregue o arquivo zip executável criado acima.

Manipulador de função Lambda com Go

Handler é onde a execução do programa Go começa. Da chamada principal paralambda.start, a execução é chamada com a função de manipulador. Observe que o manipulador a ser adicionado serámain.

Observe o código aqui para uma compreensão -

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

Siga de acordo com as imagens fornecidas abaixo -

Agora, salve a função e teste-a. Você pode ver o resultado da execução conforme mostrado aqui.

A saída de log correspondente será como mostrado aqui -

Objeto de contexto com Go

O AWS Lambda in Go fornece as seguintes variáveis ​​globais e propriedades para contexto.

  • MemoryLimitInMB - Limite de memória, em MB que é configurado em aws lambda.

  • FunctionName - nome da função aws lambda.

  • FunctionVersion - a versão da função lambda do aws em execução.

  • LogStreamName - nome do fluxo de registro do cloudwatch.

  • LogGroupName - nome do grupo Cloudwatch.

As propriedades disponíveis no contexto são fornecidas como em -

AwsRequestID

Este é o ID de solicitação da AWS que você obtém quando a função AWS Lambda é chamada.

ClientContext

Contém detalhes sobre o aplicativo cliente e o dispositivo quando invocado por meio do AWS Mobile SDK. Pode ser nulo. O contexto do cliente fornece detalhes como ID do cliente, título do aplicativo, nome da versão, código da versão e o nome do pacote do aplicativo.

InvokedFunctionArn

O ARN da função invocada. Um ARN não qualificado executa a versão $ LATEST e os aliases executam a versão da função para a qual está apontando.

Identidade

Ele fornece detalhes sobre o provedor de identidade Amazon Cognito quando usado com o SDK móvel da AWS.

As mudanças adicionadas a main.go para imprimir detalhes 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)
}

Precisamos importar o log e lambda contextpara usá-lo com Go. Os detalhes do contexto são os seguintes -

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
}

Você pode observar a seguinte saída ao testar o código acima -

Dados de registro

Com Go você pode registrar dados usando o módulo log ou fmt conforme mostrado abaixo -

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

A saída para o mesmo é mostrada abaixo -

Verificando Logs no CloudWatch

Você pode ver os logs no CloudWatch também. Para isso, vá para o serviço AWS e selecione cloudwatch e clique emLogsno lado esquerdo. Agora, procure a função Lambda na lista para ver os logs -

Erros de função

Você pode criar tratamento de erros personalizado no AWS Lambda usando o módulo de erros, conforme mostrado no código abaixo -

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

A saída para o código mostrado acima é a seguinte -