繁体   English   中英

如何在本地测试 AWS Lambda 函数?

[英]How can I test AWS Lambda functions locally?

请向我解释在本地测试 lambda 函数的最佳方法是什么。 我使用 sam local 和这个解决方案https://github.com/lambci/docker-lambda进行测试,但例如,我从另一个错误调用一个 lambda 的地方。 一般来说,我不能为方法制作存根,因为 lambda 在容器中运行

有几个选项。 以下两个是一些流行的。

这就是我在没有无服务器框架的情况下测试本地 lambda 函数的方式,我在本地运行一个 HTTP 帖子(非常容易设置 Go)

  • 像这样解耦 lambda 逻辑:
func HandleRequest(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    _, _ = pretty.Println("parsed:", request.Body)
    return events.APIGatewayProxyResponse{Body: "response is working", StatusCode: 200}, nil
}
  • main 函数然后检查它是否是本地实例,然后运行本地 post 端点,否则启动 lambda
func main() {
    environment := loadEnv()
    if environment == "develop" {
        router.NewRouter()
        select {}
    } else {
        lambda.Start(lambdahandler.HandleRequest)
    }
}
  • 在两者之间,您有一个适配器模式,可以将您的 http 请求转换为您的 lambda 函数接受的任何内容,例如:
func MapToApiGateway(w http.ResponseWriter, r *http.Request) (interface{}, error) {
    request := new(EmailResponderRequest)
    if err := json.NewDecoder(r.Body).Decode(request); err != nil {
        return err.Error(), err
    }
    apiGatewayRequest := mapHttpRequestToGatewayRequest(*request)
    events, err := lambdahandler.HandleRequest(nil, apiGatewayRequest)
    if err != nil {
        return err.Error(), err
    }
    return events, nil
}

对于使用sam cli本地手动测试(不是单元测试),您可以使用-n, --env-vars PATH选项指定环境-n, --env-vars PATH文件,并使用您通常在 Cloud Formation 模板中使用的真实资源标识符(请参阅有关更多信息,请参阅官方文档)。

这应该让您可以直接调用其他函数并使用真实的 DynamoDB 表和所有其他 AWS 云资源。

注意:如果你使用 VSCode,你可以试试这个辅助扩展

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM