Учебники

AWS Lambda — функция в движении

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

Установка Go

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

Go Программирование

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

Установка на Windows

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

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

Свойства системы

Теперь нажмите кнопку Переменные среды и добавьте путь к каталогу, как показано здесь —

Переменные среды Go

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

Изменить системную переменную

Как только эти шаги будут выполнены, вы сможете начать работать с 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 в качестве среды выполнения —

APIws Console Go

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

Лямбда-функция обработчик с Go

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

Соблюдайте код здесь для понимания —

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

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

Код функции

Исполнение Роль Go

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

Результат выполнения Go

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

Log Output Go

Контекстный объект с 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)
}

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