- vừa được xem lúc

Golang Serverless Deployment on AWS Lambda

0 0 18

Người đăng: Hoang Le

Theo Viblo Asia

Lambda function handler là phương thức trong code của bạn dùng để xử lý các sự kiện. Khi function của bạn được invoke, Lambda sẽ chạy function handler. Function sẽ chạy đến khi handler trả về response, exits hoặc times out. Mình sẽ chai sẻ về triển khai Golang lambda, đầu tiên mình sẽ chia sẽ về code base, viết empty lambda, chọn đúng architecture và cách deploy với cloud formation. Sau đó mình sẽ chia sẽ về SNS, SQS, S3 và CloudWatch,...

  1. Bắt đầu tạo một project với Go, Mình thích dùng Golang terminal, dưới đây sẽ là code mẫu đơn giản và dễ deploy để demo cho anh em.
mkdir greeting
 go mod init github.com/greeting-lambda
package main import "fmt" func main() { fmt.Println("welcome to greeting lambda")
}
  1. Lambda runtimes

image.png Go1.x sẽ bị deprecated, nên chúng ta sử dụng provided.al2 runtime, AWS Lambda runtimes hỗ trợ 2 kiến trúc:

  • arm64 → 64-bit ARM architecture (AWS Graviton2 processor)
  • X86-64 → 64-bit x86 architecture (X86 base processor)

AWS Lambda functions chạy trên Graviton 2, sử dụng kiến trúc nền tảng Arm processor được thiết kế bởi AWS, mang lại hiệu suất giá tốt hơn tới 34% so với function chạy trên x86 processor Lambda functions sử dụng kiến trúc arm64(AWS Graviton 2 processor) có thể đạt được mức giá/hiệu suất tốt hơn đáng kể so với function tương đương chạy trên kiến trúc x86_64. Hãy cân nhắc sử dụng arm64 cho các ứng dụng chuyên sâu về high-performance computing, video encoding, và simulation.

  1. Code Chúng ta sẽ triển khia các lambda function bằng Cloud Formation. Thêm một số cấu hình vào file yaml. function name mình đặt là "greeting-function", memory size là 128MB, và timeout là 60seconds (nó đủ cho chương trình của chúng ta 😃 )
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

vào thư mục Lúc nãy chúng ta đã tạo và thực hiện các lệnh sau theo thứ tự

-> mkdir greeting-lambda-sample -> cd greeting-lambda-sample -> touch template.yaml -> mkdir greeting-function -> touch greeting-function/Makefile -> touch greeting-function/main.go

Hãy chắc chắn là bạn đã cài thư viện github.com/aws/aws-lambda-go/lambda

Chúng ta đã tạo một Greeting struct với thuộc tính Message. Khi Greeting lambda được invoked với giá trị của Message thì chúng ta sẽ log được Message đó ra

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"`
}
  1. Makefile
  • GOOS Compile cho linux thì mình có thể set GOOS là "linux"
GOOS=linux go build

Để compile cho Window mình có thể set GOOS là "windows"

GOOS=windows go build

Để compile cho macOS mình có thể set GOOS là "darwin"

GOOS=darwin go build
  • GOARCH: Kiến trúc (amd64, arm).
  • CGO_ENABLED: Nó kiểm soát Go build system có hỗ trợ cgo hay không, đầy là toolchain để chuyển mã C qua Go, Giá trị có thể là 0/1, Lưu ý serverless function không hỗ trợ cgo.
build-GreetingFunction: GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o bootstrap cp ./bootstrap $(ARTIFACTS_DIR)/.
  1. Deployment

image.png

sam build

image.png

Trên AWS, truy cập Cloud Formation, Chúng ta có thể thấy thông tin thành công, Function, LogGroup, Role được tạo bởi CloudFormation image.png

  1. Test Lambda

Chúng ta đã tạo Greeting struct với một property đơn giản là message. Giờ hay mở AWS Lambda services sau đó chọn function vừa mới tạo là "greeting-function, sau đó chọn vào test. Invoke lambda thông qua chuổi json như sau

{ "message": "hello GO ...."
}

image.png

Giờ hãy mở log của Cloudwatch và kiểm tra image.png

image.png

Cảm ơn các bạn đã dành thời gian đọc bài viết của mình.

Bình luận

Bài viết tương tự

- vừa được xem lúc

PDF Export, cẩn thận với những input có thể truyền vào

Giới thiệu. Dạo gần đây mình tình cờ gặp rất nhiều lỗi XSS, tuy nhiên trang đó lại có sử dụng dữ liệu người dùng input vào để export ra PDF.

0 0 66

- vừa được xem lúc

Giới thiệu về AWS Batch

Khi sử dụng hệ thống cloud service, điều chúng ta thường phải quan tâm đến không chỉ là hiệu suất hoạt động (performance) mà còn phải chú ý đến cả chi phí bỏ ra để duy trì hoạt động của hệ thống. Chắn hẳn là hệ thống lớn hay nhỏ nào cũng đã từng phải dùng đến những instance chuyên để chạy batch thực

0 0 143

- vừa được xem lúc

Tìm hiểu về AWS KMS

1. AWS KMS là gì. Ở KMS bạn có thể lựa chọn tạo symetric key (khóa đối xứng) hoặc asymetric key (khóa bất đối xứng) để làm CMK (Customer Master Key). Sau khi tạo key thì có thể thiết đặt key policy để control quyền access và sử dụng key.

0 0 66

- vừa được xem lúc

AWS VPC cho người mới bắt đầu

Tuần này, tôi trình bày lại những gì tôi đã học được về Virtual Private Cloud (VPC) của Amazon. Nếu bạn muốn xem những gì tôi đã học được về AWS, hãy xem Tổng quan về DynamoDB và Tổng quan về S3. VPC là gì. Những điều cần lưu ý:.

0 0 84

- vừa được xem lúc

AWS Essentials (Phần 6): Guildline SNS Basic trên AWS

Tiếp tục với chuỗi bài viết về Basic AWS Setting, chúng ta tiếp tục tìm hiểu tiếp tới SNS (Simple Notification Service). Đây là một service của AWS cho phép người dùng setting thực hiện gửi email, text message hay push notification tự động tới mobile device dựa trên event người dùng setting phía AWS

0 0 145

- vừa được xem lúc

Sử dụng Amazon CloudFront Content Delivery Network với Private S3 Bucket — Signing URLs

Trong nhiều trường hợp, thì việc sử dụng CDN là bắt buộc. Mình đã trải nghiệm với một số CDN nhưng cuối cùng mình lựa chọn sử dụng AWS CloudFront.

0 0 117