У меня довольно простой стек: API Gateway перед лямбдой. В настоящее время мои пути выглядят примерно так:
/dogs, /dogs/{id} и др.
Все, что я хочу сделать, это добавить версию к базовому пути (например, api.dogs.com/v1/dogs). Я попытался сделать это, создав собственное доменное имя с сопоставлением базового пути v1, указывающим на мой этап в API Gateway.
Это прекрасно маршрутизируется через API-шлюз, но возникают проблемы, когда он попадает в логику маршрутизации в моей лямбде. Моя лямбда ожидает /dogs, но с сопоставлением базового пути путь на самом деле v1/dogs.
Как лучше подойти к этому? Я хочу избавиться от необходимости иметь дело с версиями непосредственно в моем коде (лямбда), если это возможно.





В объекте event, который получает ваша лямбда-функция, вы фактически должны найти всю необходимую информацию с версией и без нее:
event = {
"resource": "/hi",
"path": "/v1/hi",
"requestContext": {
"resourcePath": "/hi",
"path": "/v1/hi",
....
},
....
}
Просто настройте код в логике маршрутизатора, чтобы получить доступ к нужным атрибутам, это должно решить вашу проблему и избавить от необходимости снова заботиться о версиях в вашем коде.
Оказывается, в aws-lambda-go-api-proxy есть функция для этого точного варианта использования (StripBasePath).
Правильно, в этом есть смысл. Я предполагаю, что проблема для меня заключается в структуре, которую я использую (github.com/gin-gonic/gin), которая должна быть маршрутизацией на основе пути, а не ресурса. Я должен посмотреть, есть ли способ сделать это.