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

Amazon web services 如何在本地测试AWS Lambda函数?,amazon-web-services,testing,aws-lambda,Amazon Web Services,Testing,Aws Lambda,请向我解释什么是本地测试lambda函数的最佳方法。我使用了sam local和此解决方案https://github.com/lambci/docker-lambda用于测试,但例如,我从另一个错误调用一个lambda。一般来说,我不能为方法创建存根,因为lambda在容器中运行有两个选项。下面两个是一些流行的 框架以及 插件 这就是我在没有无服务器框架的情况下测试本地lambda函数的方法,我在本地运行HTTP post(非常容易设置Go) 像这样解耦lambda逻辑: 然后,ma

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

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

  • 框架以及 插件

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

  • 像这样解耦lambda逻辑:
  • 然后,main函数检查它是否是本地实例,然后运行本地post端点,否则启动lambda
  • 在这两者之间有一个适配器模式,可以将http请求转换为lambda函数接受的任何内容,例如:
对于使用
sam cli
的本地手动测试(非单元测试),您可以使用
-n,--env vars PATH
选项指定环境变量文件,并像通常在云形成模板中那样使用实际资源标识符(有关更多信息,请参阅)

这应该允许您直接调用其他函数,并使用真正的DynamoDB表和所有其他AWS云资源


注意:如果您使用VSCode,您可以尝试。

如果您正在寻找一些非常轻的东西,也有一些npmjs包允许这样做(NodeJS),例如
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
}
func main() {
    environment := loadEnv()
    if environment == "develop" {
        router.NewRouter()
        select {}
    } else {
        lambda.Start(lambdahandler.HandleRequest)
    }
}
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
}