0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Triển Khai Serverless Golang Trên AWS Lambda: Hướng Dẫn Chi Tiết

Đăng vào 3 ngày trước

• 3 phút đọc

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 Copy
mkdir greeting
sh Copy
go mod init github.com/greeting-lambda
go Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
{
  "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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào