- PVSM.RU - https://www.pvsm.ru -
В середине января этого года Амазон анонсировал поддержку [1] Go в своих лямбдах.
Отличная новость, но сейчас я пишу эти строки не имея никакого опыта написания кода на Golang, чтобы, проходя через пеньки и ухабы, параллельно с написанием статьи, прийти к первой своей работающей лямбде на Go.
Начать, собственно, придется с установки Go [2]. Моя машина — Windows 10 на процессоре Intel. Здесь ничего сложного: скачиваем, запускаем. Проверяем, что Go прописала путь до <путь установки>bin в переменную среды PATH или стартуем go через cli (cmd, например) для проверки.
Создаем проектную папку:
C:Usersa_golgo>cd C:Go
C:Go>mkdir workspace
C:Go>set GOPATH=C:Goworkspace
C:Go>cd %GOPATH%
C:Goworkspace>
Для редактирования кода я использую Sublime Text 3 [3], поэтому нужно адаптировать его под Go. Для этого необходимо установить package control [4] и с его помощью (Preferences -> Package Control -> Install Package -> GoSublime) скачать плагин GoSublime [5].
Перезапускаем Sublime Text.
Более подробную информацию по настройке Sublime Text можно посмотреть здесь [6]
Теперь опробуем Go с первым приложением Hello, world!
package main
import "fmt"
func main() {
fmt.Printf("hello, worldn")
}
Давайте попробуем написать и протестировать лямбду, которая принимает на вход объект из двух полей в формате json и отдает ответ в формате json с идентификатором успешного завершения.
Запрос:
{
"id": 12345,
"value": "some-value"
}
Ответ:
{
"message": "processed request ID 12345",
"ok": true
}
Данный пример описан в статье [7].
package main
import (
"fmt"
"github.com/aws/aws-lambda-go/lambda"
)
type Request struct {
ID float64 `json:"id"`
Value string `json:"value"`
}
type Response struct {
Message string `json:"message"`
Ok bool `json:"ok"`
}
func Handler(request Request) (Response, error) {
return Response{
Message: fmt.Sprintf("Processed request ID %f", request.ID),
Ok: true,
}, nil
}
func main() {
lambda.Start(Handler)
}
Чтобы собрать архив для лямбды нужно загрузить библиотеку aws-lambda-go [8]. Там же вы можете посмотреть какие шаги для сборки архива необходимо выполнить на Linux, macOS и Windows.
Давайте все это проделаем по шагам:
go get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
set GOOS=linux
set GOARCH=amd64
go build -o main main.go
%USERPROFILE%Gobinbuild-lambda-zip.exe -o main.zip main
После данных шагов у вас должен появиться архив main.zip, который и необходимо загрузить в лямбду.
Создавать лямбду я буду через AWS консоль.
Для этого нужно:
Протестируем работу лямбды. Для этого нужно создать тест, нажав кнопку Test в верхней части консоли. Добавляем тестовые входные данные и сохраняем.
{
"id": 12345,
"value": "some-value"
}
Теперь мы можем в верхней части консоли вызывать этот тестовый сценарий нажатием кнопки Test.
Не установились переменные среды
{
"errorMessage": "fork/exec /var/task/main: exec format error",
"errorType": "PathError"
}
set GOOS=linux
set GOARCH=amd64
Проверьте их через cmd:
echo %GOOS%
echo %GOARCH%
1. Не прописано main в поле Handler блока Function code, там по умолчанию стоит hello
{
"errorMessage": "fork/exec /var/task/hello: no such file or directory",
"errorType": "PathError"
}
2. Неверно задан тестовый json.
Он должен выглядеть следующим образом:
{
"id": 12345,
"value": "some-value"
}
Автор: GolovinskayaAlbina
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/amazon-web-services/275979
Ссылки в тексте:
[1] поддержку: https://aws.amazon.com/blogs/compute/announcing-go-support-for-aws-lambda/
[2] Go: https://golang.org/doc/install
[3] Sublime Text 3: https://www.sublimetext.com/3
[4] package control: https://packagecontrol.io/installation#st3
[5] GoSublime: https://github.com/DisposaBoy/GoSublime
[6] здесь: https://www.wolfe.id.au/2015/03/05/using-sublime-text-for-go-development/
[7] статье: https://aws.amazon.com/blogs/compute/announcing-go-support-for-aws-lambda
[8] aws-lambda-go: https://github.com/aws/aws-lambda-go
[9] Источник: https://habrahabr.ru/post/351744/?utm_campaign=351744
Нажмите здесь для печати.