首页 > 解决方案 > 如何访问 Go AWS lambda 函数中的参数

问题描述

我在 AWS lambda 上使用 Go,并且正在编写以下代码:

func HanldeLambdaFunction(ctx context.Context, request events.APIGatewayProxyRequest) (Response, error) {
    limitString := request.QueryStringParameters["limit"]
    fmt.Println("limitString", limitString) //nothing is written
}

我正在使用 api 网关测试 lambda 函数并提供参数:

limit=2

lambda 函数正在成功执行,但未读取限制。

如何访问参数?

标签: amazon-web-servicesgoaws-lambda

解决方案


您发布的代码的问题是,它甚至不应该编译。最大的问题是,没有Response结构。应该是吧events.APIGatewayProxyResponse

此外,代码没有return任何作用,即使您定义它应该返回Responseand error

我拿走了你的代码并修复了所有这些,它对我有用。固定代码如下所示:

package main

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

func HanldeLambdaFunction(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    limitString := request.QueryStringParameters["limit"]
    fmt.Println("limitString", limitString) //nothing is written

    return events.APIGatewayProxyResponse{StatusCode: 200}, nil
}

func main() {
    lambda.Start(HanldeLambdaFunction)
}

输出是:

START RequestId: 0c63f94f-b0aa-49de-ba6d-b1150d711b8a Version: $LATEST
limitString 2
END RequestId: 0c63f94f-b0aa-49de-ba6d-b1150d711b8a
REPORT RequestId: 0c63f94f-b0aa-49de-ba6d-b1150d711b8a  Duration: 0.56 ms   Billed Duration: 100 ms Memory Size: 512 MB Max Memory Used: 34 MB

如果我不得不猜测,那么您的代码甚至不会运行。如果它可以运行但无法读取limit参数,它至少应该 print limitString

linux请记住,如果您为 AWS Lambda 编译一个 go 二进制文件,您需要amd64像这样编译它:

$ GOOS=linux GOARCH=amd64 go build

推荐阅读