Используйте / path / {proxy +} с AWS SAM, чтобы иметь жадный API в API Gateway - PullRequest
0 голосов
/ 13 апреля 2020

Я использую SAM. Следующая настройка работает:

  Function:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./code/
      Runtime: go1.x
      MemorySize: 64
      Handler: main
      Events:
        TesstApi:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: any

Теперь у меня есть основной метод (в go)

Это выглядит так:

package main

import (
    "context"
    "log"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    ginadapter "github.com/awslabs/aws-lambda-go-api-proxy/gin"
    "github.com/gin-gonic/gin"
)

var ginLambda *ginadapter.GinLambda

func Handler(ctx context.Context, req events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
    if ginLambda == nil {
        // stdout and stderr are sent to AWS CloudWatch Logs
        log.Printf("Gin cold start")
        r := gin.Default()
        r.GET("/", Index)
        r.GET("/test/hello", xxx)
        r.GET("/test/hi", xxx)

        ginLambda = ginadapter.New(r)
    }

    return ginLambda.ProxyWithContext(ctx, req)
}

func main() {
    lambda.Start(Handler)
}

Это работает нормально. Поэтому я могу запустить свой локальный API-шлюз с SAM, и curl 127.0.0.1:3000/test/hello работает хорошо

Теперь я пытаюсь обновить следующее предложение в моем шаблоне:

  Properties:
    Path: /{proxy+}
    Method: any

до

  Properties:
    Path: /test/{proxy+}
    Method: any

Я хочу поймать все после пути test.

Я попробовал следующее:

    r.GET("/hello", xxx)
    r.GET("hello", xxx)
    r.GET("/test/hello", xxx)

, но ни один из них не сработал.

Возможно ли то, что я хочу сделать? Если да, то как?

...