AWS Lambda - функция в Go

Поддержка Go Language - недавнее дополнение к AWS. Для работы с Go необходимо выбрать язык в консоли AWS при создании функции AWS Lambda. В этой главе давайте подробно узнаем о функции AWS Lambda на языке Go.

Установка Go

Для начала нам нужна поддержка Go Language. В этом разделе мы рассмотрим следующие детали, чтобы начать работу с AWS Lambda в Go. Это официальный сайт для загрузки Go:https://golang.org/dl/

Теперь загрузите пакет в соответствии с операционной системой. Следуйте приведенной здесь процедуре, чтобы установить Go в соответствующей операционной системе.

Установка в Windows

Обратите внимание, что для Windows доступны 32- и 64-разрядные версии для загрузки. Загрузите zip-файл, извлеките его содержимое и сохраните в выбранном вами каталоге.

Добавьте переменные среды, доступные в ControlPanel ---> System ---> Advanced system settings.

Теперь нажмите Environment Variables кнопку и добавьте путь к каталогу, как показано здесь -

Вы также можете отредактировать системную переменную, как показано здесь -

Как только эти шаги будут выполнены, вы сможете начать работу с Go. Откройте командную строку и проверьте версию команды Go. Посмотрите на следующий снимок экрана для того же.

Установка для Linux и Mac OS

Для установки пакетов в Linux и Mac OS следуйте инструкциям, как показано ниже -

Распакуйте пакеты и храните по месту /usr/local/go. Теперь добавьте/usr/local/go/binв переменную среды PATH. Это можно сделать с помощью/etc/profile или же $HOME/.profile.

Для этого вы можете использовать следующую команду

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

Чтобы добавить поддержку AWS для Windows, Linux и Mac, используйте в командной строке 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

Чтобы скомпилировать код Windows / Linux / Mac, используйте следующие команды -

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

AWS Lambda Function с использованием GO

Программа возвращается в Go, когда сборка дает исполняемый файл. Ниже представлена ​​простая программа на Go с поддержкой AWS Lambda. Нам нужно импортироватьgithub.com/aws/aws-lambda-go/lambda, поскольку он имеет функции программирования Lambda. Другой важной потребностью для AWS Lambda является обработчик.

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

Обратите внимание, что выполнение Goпрограмма начинается с main, где lambda. start вызывается функцией-обработчиком. Обратите внимание на код, показанный ниже -

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

Теперь давайте выполним указанный выше файл с помощью команды Go, а затем заархивируем исполняемый файл.

Структура файла, который мы использовали, показана здесь -

С участием go build, он создает исполняемый файл с именем main.exe. Чтобы заархивировать файл и загрузить его в AWS Lambda, вы можете использовать следующую процедуру:

Чтобы скомпилировать код Windows / Linux / Mac, используйте следующие команды -

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

Затем войдите в консоль AWS и создайте функцию Lambda, используя Go как время выполнения -

После создания функции загрузите исполняемый zip-файл, созданный выше.

Обработчик лямбда-функции в Go

Обработчик - это место, где начинается выполнение программы Go. От основного звонка доlambda.startвыполнение вызывается функцией-обработчиком. Обратите внимание, что добавляемый обработчик будетmain.

Обратите внимание на код здесь для понимания -

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

Следуйте приведенным ниже скриншотам -

Теперь сохраните функцию и проверьте ее. Вы можете увидеть результат выполнения, как показано здесь.

Соответствующий вывод журнала будет таким, как показано здесь -

Объект контекста с Go

AWS Lambda в Go предоставляет следующие глобальные переменные и свойства для контекста.

  • MemoryLimitInMB - Ограничение памяти в МБ, настроенное в лямбда-выражении aws.

  • FunctionName - имя лямбда-функции aws.

  • FunctionVersion - версия выполнения лямбда-функции aws.

  • LogStreamName - имя потока журнала cloudwatch.

  • LogGroupName - название группы cloudwatch.

Свойства, доступные в контексте, указаны в разделе -

AwsRequestID

Это идентификатор запроса AWS, который вы получаете при вызове функции AWS Lambda.

ClientContext

Он содержит подробную информацию о клиентском приложении и устройстве при вызове через AWS Mobile SDK. Может быть нулевым. Контекст клиента предоставляет подробную информацию, такую ​​как идентификатор клиента, заголовок приложения, имя версии, код версии и имя пакета приложения.

InvokedFunctionArn

ARN вызываемой функции. Неквалифицированный ARN выполняет версию $ LATEST, а псевдонимы выполняют версию функции, на которую он указывает.

Идентичность

Он предоставляет подробную информацию о поставщике удостоверений Amazon Cognito при использовании с мобильным SDK AWS.

Изменения добавлены в main.go для печати деталей контекста -

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

Нам нужно импортировать log и lambda contextиспользовать его с Go. Подробности контекста следующие -

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
}

Вы можете увидеть следующий результат при тестировании вышеуказанного кода -

Данные журнала

С участием Go вы можете регистрировать данные с помощью модуля log или fmt, как показано ниже -

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

Выход для того же, как показано ниже -

Проверка журналов в CloudWatch

Вы также можете просмотреть журналы в CloudWatch. Для этого перейдите в сервис AWS, выберите cloudwatch и нажмитеLogsс левой стороны. Теперь найдите функцию Lambda в списке, чтобы увидеть журналы -

Функциональные ошибки

Вы можете создать собственную обработку ошибок в AWS Lambda с помощью модуля ошибок, как показано в приведенном ниже коде:

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

Вывод для кода, показанного выше, приведен ниже -