AWS Lambda – Go 函式



Go 語言支援是 AWS 最近新增的功能。要使用 Go,您需要在建立 AWS Lambda 函式時從 AWS 控制檯中選擇該語言。在本章中,讓我們詳細瞭解 AWS Lambda 中的 Go 語言函式。

安裝 Go

要開始使用,我們需要 Go 語言支援。在本節中,我們將詳細介紹以下內容,以開始使用 Go 中的 AWS Lambda。這是 Go 下載的官方網站:https://golang.com.tw/dl/

Go Programming

現在,根據作業系統下載軟體包。按照此處提供的步驟在相應的作業系統上安裝 Go。

在 Windows 上安裝

請注意,對於 Windows,提供了 32 位和 64 位下載。下載 zip 檔案並解壓縮其內容,並將其儲存在您選擇的目錄中。

新增控制面板 ---> 系統 ---> 高階系統設定中提供的環境變數。

System Properties

現在,單擊環境變數按鈕並新增如下所示的目錄路徑:

Environment Variables Go

您也可以編輯系統變數,如下所示:

Edit System Variable

完成這些步驟後,您應該能夠開始使用 Go。開啟命令提示符並檢查 Go 命令的版本。檢視以下螢幕截圖以瞭解相同內容。

Command Prompt

Linux 和 Mac OS 的安裝

要在 Linux 和 Mac OS 上安裝軟體包,請按照以下說明操作:

解壓縮軟體包並將其儲存在/usr/local/go位置。現在,將/usr/local/go/bin新增到 PATH 環境變數。可以使用/etc/profile$HOME/.profile來完成此操作。

為此,您可以使用以下命令

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

要為 Windows、Linux 和 Mac 新增 AWS 支援,請在您的 git 命令列中使用以下命令:

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

要編譯 Windows/Linux/Mac 程式碼,請使用以下命令:

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

使用 GO 的 AWS Lambda 函式

構建時在 Go 中返回的程式會生成一個可執行檔案。以下是帶有 AWS Lambda 支援的簡單 Go 程式。我們需要匯入github.com/aws/aws-lambda-go/lambda,因為它具有 Lambda 程式設計功能。AWS Lambda 的另一個重要需求是處理程式。

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)
}

請注意,Go程式的執行從 main 開始,其中 lambda.start 與處理程式函式一起被呼叫。檢視以下程式碼:

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

現在,讓我們使用 Go 命令執行上述檔案,然後壓縮可執行檔案。

我們一直在使用的檔案的結構如下所示:

Structure File

Structure File Output

使用go build,它會建立一個名為 main.exe 的可執行檔案。要壓縮檔案並將其上傳到 AWS Lambda,您可以使用以下步驟:

要編譯 Windows/Linux/Mac 程式碼,請使用以下命令:

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

然後,登入到 AWS 控制檯並使用Go作為執行時建立 Lambda 函式:

APIws Console Go

建立函式後,上傳上面建立的可執行 zip 檔案。

帶有 Go 的 Lambda 函式處理程式

處理程式是 Go 程式執行開始的地方。從 main 呼叫到lambda.start,執行將使用處理程式函式呼叫。請注意,要新增的處理程式將是main

檢視此處程式碼以瞭解:

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

按照以下螢幕截圖操作:

Function Code

Execution Role Go

現在,儲存函式並進行測試。您可以看到如下所示的執行結果。

Execution Result Go

相應的日誌輸出將如下所示:

Log Output Go

帶有 Go 的 Context 物件

Go 中的 AWS Lambda 為 context 提供以下全域性變數和屬性。

  • MemoryLimitInMB - 在 aws lambda 中配置的記憶體限制(以 MB 為單位)。

  • FunctionName - aws lambda 函式的名稱。

  • FunctionVersion - 執行的 aws lambda 函式的版本。

  • LogStreamName - CloudWatch 日誌流名稱。

  • LogGroupName - CloudWatch 組名稱。

context 上可用的屬性如下所示:

AwsRequestID

這是呼叫 AWS Lambda 函式時獲得的 AWS 請求 ID。

ClientContext

當透過 AWS Mobile SDK 呼叫時,它包含有關客戶端應用程式和裝置的詳細資訊。它可能為 null。客戶端上下文提供客戶端 ID、應用程式標題、版本名稱、版本程式碼和應用程式包名稱等詳細資訊。

InvokedFunctionArn

呼叫的函式的 ARN。非限定 ARN 執行 $LATEST 版本,別名執行其指向的函式版本。

Identity

當與 AWS Mobile SDK 一起使用時,它提供有關 Amazon Cognito 身份提供程式的詳細資訊。

新增到main.go以列印上下文詳細資訊的更改:

// 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)
}

我們需要匯入loglambda context才能與 Go 一起使用。上下文詳細資訊如下:

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
}

您可以在測試上述程式碼時觀察以下輸出:

Execution Result Output

記錄資料

使用Go,您可以使用 log 或 fmt 模組記錄資料,如下所示:

// 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)
}

相同輸出如下所示:

Logging Data

在 CloudWatch 中檢查日誌

您也可以在 CloudWatch 中檢視日誌。為此,請轉到 AWS 服務並選擇 CloudWatch,然後單擊左側的日誌。現在,在列表中搜索 Lambda 函式以檢視日誌:

Checking Logs

函式錯誤

您可以使用以下程式碼所示的 errors 模組在 AWS Lambda 中建立自定義錯誤處理:

// 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)
}

上面顯示的程式碼的輸出如下所示:

Function Errors
廣告

© . All rights reserved.