Tổng quan về Serverless và Golang trên AWS Lambda
AWS Lambda là một dịch vụ điện toán serverless cho phép bạn chạy mã mà không cần quản lý máy chủ. Trong bài viết này, chúng ta sẽ cùng khám phá cách triển khai một ứng dụng Golang dưới dạng Lambda function.
1. Giới thiệu về Lambda function Handler
Lambda function handler là phương thức trong mã của bạn dùng để xử lý các sự kiện. Khi function được gọi, AWS Lambda sẽ chạy hàm handler này cho đến khi nó trả về response, thoát hoặc hết thời gian. Bài viết sẽ trình bày các bước triển khai Lambda function bằng Golang, bắt đầu từ việc tạo code base, viết một Lambda function trống, chọn Kiến trúc và cách triển khai sử dụng CloudFormation.
2. Bắt đầu với Project Golang
Hãy bắt đầu bằng cách tạo một project mới với Golang. Dưới đây là hướng dẫn từng bước:
sh
mkdir greeting
sh
go mod init github.com/greeting-lambda
go
package main
import "fmt"
func main() {
fmt.Println("Welcome to greeting lambda")
}
3. Các Runtime của Lambda
Hiện tại, Go1.x đã bị ngừng hỗ trợ, do đó chúng ta sẽ sử dụng runtime provided.al2 trên AWS Lambda. AWS Lambda hỗ trợ hai kiến trúc:
- arm64: Kiến trúc ARM 64-bit (AWS Graviton2 processor)
- x86-64: Kiến trúc x86 64-bit (X86 base processor)
Các function chạy trên kiến trúc arm64 sử dụng Graviton 2 sẽ mang lại hiệu suất tốt hơn với chi phí thấp hơn (đến 34% so với x86). Điều này cực kỳ phù hợp cho các ứng dụng yêu cầu hiệu suất tính toán cao, mã hóa video và mô phỏng.
4. Cấu hình Lambda function với CloudFormation
Chúng ta sẽ triển khai Lambda function thông qua CloudFormation. Thêm các cấu hình vào file template.yaml với nội dung như sau:
yaml
Transform: AWS::Serverless-2016-10-31
Resources:
GreetingFunction:
Type: AWS::Serverless::Function
Metadata:
BuildMethod: makefile
Properties:
Runtime: provided.al2
CodeUri: ./greeting-function
Handler: bootstrap
FunctionName: greeting-function
Timeout: 60
MemorySize: 128
GreetingFunctionLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: !Sub /aws/lambda/${GreetingFunction}
RetentionInDays: 1
Hãy tạo một thư mục và làm theo các bước sau:
sh
mkdir greeting-lambda-sample
cd greeting-lambda-sample
touch template.yaml
mkdir greeting-function
touch greeting-function/Makefile
touch greeting-function/main.go
Đừng quên cài đặt thư viện github.com/aws/aws-lambda-go/lambda.
Tạo Greeting struct
Chúng ta sẽ tạo một struct Greeting với thuộc tính Message. Khi Lambda function được gọi với Message, chúng ta sẽ ghi log lại giá trị này.
go
package main
import (
"context"
"github.com/aws/aws-lambda-go/lambda"
"log"
)
func main() {
lambda.Start(Handler)
}
func Handler(ctx context.Context, gEvent *Greeting) {
log.Printf("Welcome %s", gEvent.Message)
}
type Greeting struct {
Message string `json:"message"`
}
5. Tạo Makefile
Để biên dịch cho Linux, bạn có thể đặt GOOS
là "linux":
sh
GOOS=linux go build
Để biên dịch cho Windows, bạn đặt GOOS
là "windows", và cho macOS là "darwin".
Cấu hình Makefile
makefile
build-GreetingFunction:
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o bootstrap
cp ./bootstrap $(ARTIFACTS_DIR)/.
6. Triển khai
Sau khi thiết lập xong, hãy tiến hành thực hiện lệnh sau để xây dựng project:
sh
sam build
Kiểm tra AWS CloudFormation để xác nhận rằng Function, LogGroup và Role đã được tạo thành công.
7. Kiểm tra Lambda
Sau khi triển khai, mở dịch vụ AWS Lambda và chọn function vừa tạo là "greeting-function". Tiến hành test với chuỗi JSON như sau:
json
{
"message": "Hello GO ...."
}
Mở log trong CloudWatch để kiểm tra kết quả.
Cảm ơn các bạn đã dành thời gian theo dõi bài viết này. Hy vọng rằng hướng dẫn chi tiết về việc triển khai Serverless Golang trên AWS Lambda sẽ giúp bạn bắt đầu với công nghệ này một cách dễ dàng và hiệu quả!
source: viblo