Поддержка Go Language является недавним дополнением к AWS. Для работы с Go необходимо выбрать язык из консоли AWS при создании функции AWS Lambda. В этой главе мы подробно узнаем о лямбда-функции AWS на языке Go.
Установка Go
Для начала нам нужна поддержка Go Language. В этом разделе мы рассмотрим следующие детали, чтобы начать работу с AWS Lambda в Go. Это официальный сайт для загрузки Go: https://golang.org/dl/
Теперь загрузите пакет в соответствии с операционной системой. Следуйте приведенной здесь процедуре, чтобы установить Go в соответствующей операционной системе.
Установка на Windows
Обратите внимание, что для Windows доступна 32-разрядная и 64-разрядная загрузка. Скачайте zip-файл, распакуйте его и сохраните в каталоге по вашему выбору.
Добавьте переменные среды, доступные в ControlPanel —> System —> Advanced system settings.
Теперь нажмите кнопку Переменные среды и добавьте путь к каталогу, как показано здесь —
Вы также можете редактировать системную переменную, как показано здесь —
Как только эти шаги будут выполнены, вы сможете начать работать с 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 лямбда-функция с использованием GO
Программа, возвращаемая в Go, когда build дает исполняемый файл. Ниже приведена простая программа на 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 начинается с главного, где находится лямбда. 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 выполнение вызывается с помощью функции-обработчика. Обратите внимание, что добавляемый обработчик будет основным .
Соблюдайте код здесь для понимания —
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 — имя потока журнала облака.
-
LogGroupName — имя группы в облачном хранилище.
MemoryLimitInMB — ограничение памяти в мегабайтах, настроенное в лямбда-выражении aws.
FunctionName — имя лямбда-функции aws.
FunctionVersion — версия выполнения лямбда-функции aws.
LogStreamName — имя потока журнала облака.
LogGroupName — имя группы в облачном хранилище.
Свойства, доступные в контексте, указаны как —
AwsRequestID
Это идентификатор запроса AWS, который вы получаете, когда вызывается лямбда-функция AWS.
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) }
Нам нужно импортировать лог и контекст лямбды, чтобы использовать его с 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 и нажмите Журналы с левой стороны. Теперь ищите лямбда-функцию в списке, чтобы увидеть логи —
Ошибки функции
Вы можете создать собственную обработку ошибок в 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) }
Вывод кода, показанного выше, приведен ниже.