英文:
Using Golang Gin with AWS Lambda and Serverless with proxy path
问题
我想通过一个单一的 Lambda 函数调用来代理所有的根目录 HTTP 请求。
我尝试在 serverless.yml 中将 /{proxy+}
设置为路径。但是当我部署它时,访问根目录时出现了 "This page isn't redirecting properly" 的错误。
serverless.yml 片段
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()))
}
}
英文:
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()))
}
}
答案1
得分: 1
path: /{proxy+}
是正确的。
请确保您使用的是正确的 Apex 版本。Apex README 指出您需要使用 Apex v2 来进行 HTTP API。您似乎正在使用仅支持 REST API 的 v1 版本。
英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论