Home > Blockchain >  Using Golang Gin with AWS Lambda and Serverless with proxy path
Using Golang Gin with AWS Lambda and Serverless with proxy path

Time:07-28

I want to proxy all my HTTP requests from root through a single lambda function call. I tried setting /{proxy } as the path in my serverless.yml. But when I deploy it I get "This page isn't redirecting properly" when visiting the root.

serverless.yml snippet

functions:
  hello:
    handler: bin/hello
    url: true
    events:
      - httpApi:
#          path: /{proxy }
          path: /{any }
          method: get

main.go


import (
    "fmt"
    "github.com/apex/gateway"
    "github.com/gin-gonic/gin"
    "log"
    "net/http"
    "os"
)

func inLambda() bool {
    if lambdaTaskRoot := os.Getenv("LAMBDA_TASK_ROOT"); lambdaTaskRoot != "" {
        return true
    }
    return false
}

func setupRouter() *gin.Engine {
    gin.SetMode(gin.DebugMode)

    r := gin.Default()

    r.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"message": "home page"})
    })
    r.GET("/hello-world", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"message": "hello test completed successfully"})
    })

    return r
}

func main() {
    if inLambda() {
        fmt.Println("running aws lambda in aws")
        log.Fatal(gateway.ListenAndServe(":8080", setupRouter()))
    } else {
        fmt.Println("running aws lambda in local")
        log.Fatal(http.ListenAndServe(":8080", setupRouter()))
    }
}

CodePudding user response:

path: /{proxy } is correct.

Make sure you are using correct apex version. apex README states that you need to use apex v2 for HTTP API. You seem to be using v1 which supports REST API only.

  • Related