- Начало обновления -
Причина, по которой вы получаете ошибку Invalid cache key parameter specified
, потому что вы явно не выделили раздел параметров пути.
Это потому, что, хотя пользовательский интерфейс каким-то образом экстраполировал наличие параметра пути, он не был явно вызван в конфигурации шлюза API.
Я тестировал сниже и смог повторить поведение на консоли.Чтобы решить эту проблему, следуйте моему полному ответу Point 1
.
functions:
katatable:
handler: handler.katatable
events:
- http:
method: get
path: kata/table/get/{tableid}
- конец обновления -
Здесьты иди.У меня до сих пор нет вашего точного serverless.yml, поэтому я создал мой пример, похожий на ваш, и проверил его.
serverless.yml
functions:
katatable:
handler: handler.katatable
events:
- http:
method: get
path: kata/table/get/{tableid}
request:
parameters:
paths:
tableid: true
resources:
Resources:
ApiGatewayMethodKataTableGetTableidVarGet:
Properties:
Integration:
CacheKeyParameters:
- method.request.path.tableid
Выше должен быть путь tableid
параметр кэширован.
Объяснение:
Точка 1 .Вы должны убедиться в своих событиях после того, как ваш метод и путь созданы, ниже раздел создан, иначе следующий раздел ресурсов CacheKeyParameters потерпит неудачу.Примечание - логическое значение true
означает, что параметр пути является обязательным.После того, как вы явно выделите параметр path, вы сможете включить кеширование и через консоль без раздела resources
.
request:
parameters:
paths:
tableid: true
Точка 2 .В разделе ресурсов API-шлюзу необходимо включить кэширование по параметру пути tableid
.Это не что иное, как серверная интерпретация синтаксиса шаблона CloudFormation.Как я понял, что мне нужно использовать ApiGatewayMethodKataTableGetTableidVarGet
, чтобы это работало?Просто прочитайте приведенные ниже рекомендации и советы, чтобы получить имя.
https://serverless.com/framework/docs/providers/aws/guide/resources/
Совет. Если вы не знаете, как называется ресурс, на который вы хотите сослаться из своих пользовательских ресурсов.Вы можете выдать пакет без сервера.Это создаст шаблон CloudFormation для вашего сервиса в папке .serverless (он называется cloudformation-template-update-stack.json).Просто откройте файл и проверьте сгенерированное имя ресурса.
Что значит выше?- Сначала запустите serverless package
без раздела ресурсов и найдите папку .serverless
в каталоге и откройте вышеупомянутый файл json.Ищите AWS::ApiGateway::Method
.вы получите точный нормализованный синтаксис имени (ApiGatewayMethodKataTableGetTableidVarGet
), который вы можете использовать в разделе ресурсов.
Вот некоторые ссылки, которые я использовал.
https://medium.com/@dougmoscrop/i-set-up-api-gateway-caching-here-are-some-things-that-surprised-me-7526d954fbe6
https://serverless.com/framework/docs/providers/aws/events/apigateway#request-parameters
PS - Если вам все еще нужны шаги CLI, чтобы включить его, сообщите мне.