首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AWS上测试Lambda函数有问题

在AWS上测试Lambda函数有问题
EN

Stack Overflow用户
提问于 2018-06-12 07:49:56
回答 1查看 1.6K关注 0票数 4

我一直在尝试通过Amazon网关运行Go中的第一个lambda函数。

我在go中设置了下面的包。目标是发送一个JSON请求并记录并返回该请求的主体:

代码语言:javascript
复制
package main

import (
    "net/http"
    "log"
    "github.com/aws/aws-lambda-go/lambda"
    "github.com/aws/aws-lambda-go/events"
)

func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

    //These log statements return empty regardless of JSON input.
    log.Print(request.body)

    return events.APIGatewayProxyResponse{
        StatusCode: http.StatusOK,
        Body: request.Body
    }, nil
}

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

我可以构建并压缩这个文件,并将其上传到AWS管理器。AWS lambda管理器包含一个使用测试事件的选项,我可以用JSON字符串配置该事件

代码语言:javascript
复制
{
  "testint": 1,
  "teststring": "test"
}

但是,如果运行此测试,将得到以下结果:

代码语言:javascript
复制
{
  "statusCode": 200,
  "headers": null,
  "body": ""
}

我希望身体实际上包含我传递给函数的json,但是很明显,有些地方出了问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 19:23:23

有几件小事我改变了,然后起作用了

首先,log.Print(request.body)不为我编译,但使用request.Body很好

第二,用于请求的类型是

代码语言:javascript
复制
// APIGatewayProxyRequest contains data coming from the API Gateway proxy
type APIGatewayProxyRequest struct {
    Resource              string                        `json:"resource"` // The resource path defined in API Gateway
    Path                  string                        `json:"path"`     // The url path for the caller
    HTTPMethod            string                        `json:"httpMethod"`
    Headers               map[string]string             `json:"headers"`
    QueryStringParameters map[string]string             `json:"queryStringParameters"`
    PathParameters        map[string]string             `json:"pathParameters"`
    StageVariables        map[string]string             `json:"stageVariables"`
    RequestContext        APIGatewayProxyRequestContext `json:"requestContext"`
    Body                  string                        `json:"body"`
    IsBase64Encoded       bool                          `json:"isBase64Encoded,omitempty"`
}

在这个身体里有一个字段" Body“,那是一个字符串。因此,将测试数据更改为

代码语言:javascript
复制
{
  "body": "HELLO"

}

会给出一些数据

最后,所有示例中的Handler参数似乎包括一个上下文对象,因此我补充说

代码语言:javascript
复制
func Handler(ctx context.Context, request events.APIGatewayProxyRequest) 

这是你的程序的完整版本,“对我有用”

代码语言:javascript
复制
package main

import (
    "context"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    "log"
    "net/http"
)

func Handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

    //These log statements return empty regardless of JSON input.
    log.Print(request.Body)

    return events.APIGatewayProxyResponse{
        StatusCode: http.StatusOK,
        Body:       request.Body}, nil
}

func main() {
    lambda.Start(Handler)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50811927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档