簡體   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