AWS Lambda - Chức năng trong Go

Hỗ trợ Ngôn ngữ Go là một bổ sung gần đây cho AWS. Để làm việc với Go, bạn cần chọn ngôn ngữ từ bảng điều khiển AWS trong khi tạo hàm AWS Lambda. Trong chương này, chúng ta hãy tìm hiểu chi tiết về hàm AWS Lambda trong ngôn ngữ Go.

Cài đặt Go

Để bắt đầu, chúng tôi cần hỗ trợ Go Language. Trong phần này, chúng ta sẽ đi qua các chi tiết sau để bắt đầu làm việc với AWS Lambda trong Go. Đây là trang web chính thức để tải xuống Go:https://golang.org/dl/

Bây giờ, hãy tải xuống gói tùy theo hệ điều hành. Làm theo quy trình được cung cấp tại đây để cài đặt Go trên hệ điều hành tương ứng.

Cài đặt trên Windows

Quan sát rằng đối với Windows, có sẵn tải xuống 32 bit và 64 bit. Tải xuống tệp zip và giải nén nội dung và lưu trữ trong thư mục bạn chọn.

Thêm các biến môi trường có sẵn tại ControlPanel ---> System ---> Advanced system settings.

Bây giờ, hãy nhấp vào Environment Variables và thêm đường dẫn thư mục như được hiển thị ở đây -

Bạn cũng có thể chỉnh sửa biến hệ thống như được hiển thị ở đây -

Sau khi hoàn tất các bước này, bạn sẽ có thể bắt đầu làm việc với Go. Mở dấu nhắc lệnh và kiểm tra lệnh Go cho phiên bản. Quan sát ảnh chụp màn hình sau để biết điều tương tự.

Cài đặt cho Linux và Mac OS

Để cài đặt các gói trên Linux và Mac OS, hãy làm theo hướng dẫn như hình dưới đây -

Giải nén các gói và cất giữ tại vị trí /usr/local/go. Bây giờ, hãy thêm/usr/local/go/binvào biến môi trường PATH. Nó có thể được thực hiện bằng cách sử dụng/etc/profile hoặc là $HOME/.profile.

Với mục đích này, bạn có thể sử dụng lệnh sau

export PATH=$PATH:/usr/local/go/bin

Để thêm hỗ trợ AWS cho Windows, Linux và mac, hãy sử dụng phần sau trong dòng lệnh git của bạn:

go.exe get -u github.com/aws/aws-lambda-go/lambda 
go.exe get -u github.com/aws/aws-lambda-go/lambdacontext
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip

Để biên dịch mã Windows / Linux / Mac, hãy sử dụng các lệnh sau:

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

Hàm AWS Lambda sử dụng GO

Một chương trình được trả về trong Go khi bản dựng cung cấp một tệp thực thi. Sau đây là một chương trình đơn giản trong Go với hỗ trợ AWS Lambda. Chúng tôi cần nhậpgithub.com/aws/aws-lambda-go/lambda, vì điều này có chức năng lập trình Lambda. Một nhu cầu quan trọng khác đối với AWS Lambda là trình xử lý.

Main.go

// main.go
package main

import (
   "github.com/aws/aws-lambda-go/lambda"
)
func hello() (string, error) {
   return "Hello Lambda", nil
}
func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Lưu ý rằng việc thực hiện Gochương trình bắt đầu từ main nơi lambda. start được gọi với hàm xử lý. Quan sát đoạn mã được hiển thị bên dưới -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Bây giờ, chúng ta hãy thực thi tệp ở trên bằng lệnh Go và sau đó nén tệp thực thi.

Cấu trúc của tệp chúng tôi đang sử dụng như được hiển thị ở đây -

Với go build, nó tạo ra một tệp thực thi được gọi là main.exe. Để nén tệp và tải lên trong AWS Lambda, bạn có thể sử dụng quy trình sau:

Để biên dịch mã Windows / Linux / Mac, hãy sử dụng các lệnh sau:

GOOS=linux GOARCH=amd64 go build -o main main.go
%GOPATH%\bin\build-lambda-zip.exe -o main.zip main

Sau đó, đăng nhập vào bảng điều khiển AWS và tạo hàm Lambda bằng cách sử dụng Go như thời gian chạy -

Khi hàm được tạo, hãy tải lên tệp zip thực thi được tạo ở trên.

Trình xử lý hàm Lambda với Go

Handler là nơi bắt đầu thực thi chương trình Go. Từ cuộc gọi chính đếnlambda.start, việc thực thi được gọi với hàm xử lý. Lưu ý rằng trình xử lý được thêm vào sẽmain.

Quan sát mã ở đây để hiểu -

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Thực hiện theo các ảnh chụp màn hình được cung cấp bên dưới -

Bây giờ, hãy lưu chức năng và kiểm tra nó. Bạn có thể xem kết quả thực hiện như hình ở đây.

Đầu ra nhật ký tương ứng sẽ được hiển thị ở đây -

Đối tượng ngữ cảnh với Go

AWS Lambda in Go cung cấp các biến và thuộc tính toàn cục cho ngữ cảnh.

  • MemoryLimitInMB - Giới hạn bộ nhớ, tính bằng MB được định cấu hình trong aws lambda.

  • FunctionName - tên của hàm lambda aws.

  • FunctionVersion - phiên bản của hàm aws lambda đang thực thi.

  • LogStreamName - tên luồng nhật ký cloudwatch.

  • LogGroupName - tên nhóm đồng hồ điện toán đám mây.

Các thuộc tính có sẵn trên ngữ cảnh được đưa ra dưới dạng:

AwsRequestID

Đây là id yêu cầu AWS mà bạn nhận được khi hàm AWS Lambda được gọi.

ClientContext

Phần này chứa thông tin chi tiết về ứng dụng khách và thiết bị khi được gọi thông qua AWS Mobile SDK. Nó có thể là null. Ngữ cảnh ứng dụng cung cấp thông tin chi tiết như ID ứng dụng, tiêu đề ứng dụng, tên phiên bản, mã phiên bản và tên gói ứng dụng.

InvokedFunctionArn

ARN của hàm được gọi. ARN không đủ điều kiện thực thi phiên bản $ LATEST và các bí danh thực thi phiên bản hàm mà nó trỏ tới.

Danh tính

Nó cung cấp thông tin chi tiết về nhà cung cấp danh tính Amazon Cognito khi được sử dụng với SDK di động AWS.

Các thay đổi được thêm vào main.go để in chi tiết ngữ cảnh -

// main.go
package main

import (
   "context"
   "log"
   "github.com/aws/aws-lambda-go/lambda"
   "github.com/aws/aws-lambda-go/lambdacontext"
)

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Chúng tôi cần nhập loglambda contextđể sử dụng nó với Go. Chi tiết bối cảnh như sau:

func hello(ctx context.Context) (string, error) {
   lc, _ := lambdacontext.FromContext(ctx);
   log.Print(lc);
   log.Print(lc.AwsRequestID);
   log.Print(lc.InvokedFunctionArn);	
   return "Hello Lambda", nil
}

Bạn có thể quan sát kết quả sau khi kiểm tra đoạn mã trên:

Ghi dữ liệu

Với Go bạn có thể ghi dữ liệu bằng mô-đun log hoặc fmt như hình dưới đây -

// main.go
package main

import (
   "log"
   "fmt"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() (string, error) {
   log.Print("Hello from Lambda Go using log");
   fmt.Print("Hello from Lambda Go using fmt");
   return "Hello Lambda", nil
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Đầu ra cho tương tự như hình dưới đây -

Kiểm tra nhật ký trong CloudWatch

Bạn cũng có thể xem nhật ký trong CloudWatch. Đối với điều này, hãy truy cập dịch vụ AWS và chọn cloudwatch và nhấp vàoLogsở phía bên trái. Bây giờ, hãy tìm kiếm hàm Lambda trong danh sách để xem nhật ký -

Lỗi chức năng

Bạn có thể tạo xử lý lỗi tùy chỉnh trong AWS Lambda bằng cách sử dụng mô-đun lỗi như được hiển thị trong mã bên dưới -

// main.go
package main
import (
   "errors"
   "github.com/aws/aws-lambda-go/lambda"
)

func hello() error  {
   return errors.New("There is an error in the code!")
}

func main() {
   // Make the handler available for Remote Procedure Call by AWS Lambda
   lambda.Start(hello)
}

Đầu ra cho mã hiển thị ở trên như được đưa ra bên dưới: