Проблема
Довольно часто нам нужен простой способ создания и развертывания лямбды Golang в AWS без использования SAM или Serverless.
Мы рассмотрим использование CLI для развертывания простой лямбды Golang. Этот пример даст нам строительные блоки для последующей интеграции в конвейер CI/CD.
Видеоинструкция
Письменные инструкции приведены ниже, а вот краткая видеоинструкция, показывающая, как развернуть лямбду Golang.
Решение
1) Предварительные условия
В этой статье предполагается, что у вас уже установлены эти компоненты:
- Golang
- AWS CLI
- Пакет jq для разбора json
- Разрешения IAM, необходимые для развертывания лямбды
2) Создайте файл main.go
Создайте файл main.go в корневом каталоге.
Вот быстрый сценарий hello world.
package main
import (
"log"
"context"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(ctx context.Context, request events.APIGatewayProxyRequest) error {
log.Println("HelloWorld from Golang Lambda")
return nil
}
func main() {
lambda.Start(handler)
}
3) Создайте Makefile
Создайте файл Makefile в корневом каталоге.
Отредактируйте параметры для имени функции и региона
export GOOS=linux
export GOARCH=amd64
export CGO_ENABLED=0
.DEFAULT_GOAL := deploy
deploy:
go build -o hello
zip -r function.zip hello
aws lambda update-function-code --function-name "BlogHelloWorldExample" --zip-file fileb://function.zip --region="eu-west-1" | jq .
Примечание: Если вы получите ошибку Makefile:6: *** missing separator. Stop.
, убедитесь, что вы заменили пробелы на табуляцию.
4) Установите зависимости Golang
Этот шаг нужно выполнить только один раз:
go mod init example.com/demo
go get github.com/aws/aws-lambda-go/events
go get github.com/aws/aws-lambda-go/lambda
5) Запустите Makefile
Выполните следующую команду CLI, чтобы собрать, заархивировать и развернуть наш пример Lambda
make deploy
Теперь вы должны увидеть вывод, подобный этому:
{
"FunctionName": "BlogHelloWorldExample",
"FunctionArn": "arn:aws:lambda:eu-west-1:xyz:function:BlogHelloWorldExample",
"Runtime": "go1.x",
"Role": "arn:aws:iam::xyz:role/service-role/BlogHelloWorldExample-role-xyz",
"Handler": "hello",
"CodeSize": xyz,
"Description": "",
"Timeout": 15,
"MemorySize": 512,
"LastModified": "2022-06-07T11:09:28.000+0000",
"CodeSha256": "xyz",
"Version": "$LATEST",
"TracingConfig": {
"Mode": "PassThrough"
},
"RevisionId": "xyz",
"State": "Active",
"LastUpdateStatus": "InProgress",
"LastUpdateStatusReason": "The function is being created.",
"LastUpdateStatusReasonCode": "Creating"
}
Сводка
Вот и все! Теперь ваша лямбда должна быть развернута. Надеюсь, это даст вам быструю отправную точку для построения конвейера.