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 -