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)
}
Вывод для кода, показанного выше, приведен ниже -