- AWS Lambda 教程
- AWS Lambda - 首頁
- AWS Lambda - 概述
- AWS Lambda - 環境設定
- AWS Lambda - 簡介
- 構建 Lambda 函式
- NODEJS 中的函式
- Java 中的函式
- Python 中的函式
- Go 中的函式
- C# 中的函式
- 配置 Lambda 函式
- 使用 AWS 控制檯建立和部署
- 使用 AWS CLI 建立和部署
- 使用 Serverless Framework 建立和部署
- AWS 執行和呼叫 Lambda 函式
- 刪除 Lambda 函式
- 使用 Amazon API Gateway
- 帶有 Amazon S3 的 Lambda 函式
- 帶有 Amazon DynamoDB 的 Lambda 函式
- 帶有計劃事件的 Lambda 函式
- 帶有 Amazon SNS 的 Lambda 函式
- 帶有 CloudTrail 的 Lambda 函式
- 帶有 Amazon Kinesis 的 Lambda 函式
- 帶有自定義使用者應用程式的 Lambda 函式
- AWS Lambda@Edge 與 CloudFront
- 使用 Cloudwatch 監控和故障排除
- AWS Lambda - 其他示例
- AWS Lambda 有用資源
- AWS Lambda - 快速指南
- AWS Lambda - 有用資源
- AWS Lambda - 討論
AWS Lambda – Go 函式
Go 語言支援是 AWS 最近新增的功能。要使用 Go,您需要在建立 AWS Lambda 函式時從 AWS 控制檯中選擇該語言。在本章中,讓我們詳細瞭解 AWS Lambda 中的 Go 語言函式。
安裝 Go
要開始使用,我們需要 Go 語言支援。在本節中,我們將詳細介紹以下內容,以開始使用 Go 中的 AWS Lambda。這是 Go 下載的官方網站:https://golang.com.tw/dl/
現在,根據作業系統下載軟體包。按照此處提供的步驟在相應的作業系統上安裝 Go。
在 Windows 上安裝
請注意,對於 Windows,提供了 32 位和 64 位下載。下載 zip 檔案並解壓縮其內容,並將其儲存在您選擇的目錄中。
新增控制面板 ---> 系統 ---> 高階系統設定中提供的環境變數。
現在,單擊環境變數按鈕並新增如下所示的目錄路徑:
您也可以編輯系統變數,如下所示:
完成這些步驟後,您應該能夠開始使用 Go。開啟命令提示符並檢查 Go 命令的版本。檢視以下螢幕截圖以瞭解相同內容。
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 命令執行上述檔案,然後壓縮可執行檔案。
我們一直在使用的檔案的結構如下所示:
使用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 函式:
建立函式後,上傳上面建立的可執行 zip 檔案。
帶有 Go 的 Lambda 函式處理程式
處理程式是 Go 程式執行開始的地方。從 main 呼叫到lambda.start,執行將使用處理程式函式呼叫。請注意,要新增的處理程式將是main。
檢視此處程式碼以瞭解:
func main() {
// Make the handler available for Remote Procedure Call by AWS Lambda
lambda.Start(hello)
}
按照以下螢幕截圖操作:
現在,儲存函式並進行測試。您可以看到如下所示的執行結果。
相應的日誌輸出將如下所示:
帶有 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)
}
我們需要匯入log和lambda 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
}
您可以在測試上述程式碼時觀察以下輸出:
記錄資料
使用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)
}
相同輸出如下所示:
在 CloudWatch 中檢查日誌
您也可以在 CloudWatch 中檢視日誌。為此,請轉到 AWS 服務並選擇 CloudWatch,然後單擊左側的日誌。現在,在列表中搜索 Lambda 函式以檢視日誌:
函式錯誤
您可以使用以下程式碼所示的 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)
}
上面顯示的程式碼的輸出如下所示: