- AWS Lambda 教程
- AWS Lambda - 主页
- AWS Lambda - 概述
- AWS Lambda - 环境设置
- AWS Lambda - 简介
- 构建 Lambda 函数
- NODEJS 中的函数
- Java 中的函数
- Python 中的函数
- Go 中的函数
- C# 中的函数
- 配置 Lambda 函数
- 使用 AWS 控制台创建和部署
- 使用 AWS CLI 创建和部署
- 使用无服务器框架创建和部署
- 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 控制台选择语言。在本章中,让我们详细了解Go语言中的AWS Lambda函数。
安装Go
首先,我们需要 Go 语言支持。在本节中,我们将通过以下详细信息开始在 Go 中使用 AWS Lambda。这是Go下载的官方网站:https://golang.org/dl/
现在,根据操作系统下载软件包。按照此处给出的过程在相应的操作系统上安装 Go。
在 Windows 上安装
请注意,对于 Windows,有 32 位和 64 位可供下载。下载 zip 文件并解压内容并将其存储在您选择的目录中。
添加控制面板 ---> 系统 ---> 高级系统设置中可用的环境变量。
现在,单击环境变量按钮并添加目录路径,如下所示 -
您还可以编辑系统变量,如下所示 -
完成这些步骤后,您应该能够开始使用 Go。打开命令提示符并检查 Go 命令的版本。请观察以下屏幕截图。
Linux 和 Mac 操作系统的安装
要在 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 中返回的程序。以下是一个简单的 Go 程序,支持 AWS Lambda。我们需要导入github.com/aws/aws-lambda-go/lambda,因为它具有 Lambda 编程功能。AWS Lambda 的另一个重要需求是处理程序。
主页
// 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 where 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 函数处理程序
Handler是Go程序开始执行的地方。从 main 调用到lambda.start,使用处理函数调用执行。请注意,要添加的处理程序将是main。
观察这里的代码以了解 -
func main() { // Make the handler available for Remote Procedure Call by AWS Lambda lambda.Start(hello) }
按照下面给出的屏幕截图进行操作 -
现在,保存该函数并测试它。您可以看到执行结果,如下所示。
相应的日志输出将如下所示 -
Go 的上下文对象
Go 中的 AWS Lambda 为上下文提供以下全局变量和属性。
MemoryLimitInMB - 内存限制,以 MB 为单位,在 aws lambda 中配置。
FunctionName - aws lambda 函数的名称。
FunctionVersion - aws lambda 函数执行的版本。
LogStreamName - cloudwatch 日志流名称。
LogGroupName - 云观察组名称。
上下文中可用的属性如下所示 -
AWS请求ID
这是调用 AWS Lambda 函数时获得的 AWS 请求 ID。
客户端上下文
其中包含有关通过 AWS 移动开发工具包调用时的客户端应用程序和设备的详细信息。它可以为空。客户端上下文提供客户端 ID、应用程序标题、版本名称、版本代码和应用程序包名称等详细信息。
调用函数Arn
调用的函数的 ARN。不合格的 ARN 执行 $LATEST 版本,别名执行它指向的函数版本。
身份
它提供了与 AWS 移动开发工具包一起使用时有关 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) }
我们需要导入日志和lambda 上下文才能将其与 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 函数以查看日志 -
功能错误
您可以使用错误模块在 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) }
上面显示的代码的输出如下 -