Кэширование SAM API Gateway методом с параметрами запроса - PullRequest
1 голос
/ 01 июля 2019

Со следующим шаблоном SAM:

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      CacheClusterEnabled: true
      CacheClusterSize: '0.5'
      MethodSettings:
        - HttpMethod: GET
          CacheTtlInSeconds: 120
          ResourcePath: "/getData"
          CachingEnabled: true
      DefinitionBody:
        swagger: 2.0
        basePath: /Prod
        info:
          title: OutService
        x-amazon-apigateway-policy:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal: "*"
              Action: execute-api:Invoke
              Resource:
                - execute-api:/*/*/*
        paths:
          "/getData":
            get:
              x-amazon-apigateway-integration:
                httpMethod: POST
                type: aws_proxy
                uri:
                  Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${OutLambda.Arn}/invocations
              responses: {}
      EndpointConfiguration: PRIVATE
      Cors:
        AllowHeaders: "'*'"

Теперь / getData принимает параметры запроса, например, - /getData?path=abcd/efgh с ответом 1234.

Когда я запускаю API с путем /getData?path=abcd/efgh, это кэшируется правильно - отвечает 1234.

Однако после того, как я запустил API с другими параметрами запроса - например, /getData?path=uvw/xyz ожидает ответа 789 ответ, кэшированный для первого запроса, возвращается - 1234.

Как я могу убедиться, что кэширование применяется к путям с параметрами запроса?

Пример последовательности выданных запросов и соответствующих ответов:

/getData?path=abcd/efgh -> 1234 возвращается и кэшируется в 11: 01: 01

/getData?path=uvw/xyz -> 789 возвращается и кэшируется в 11: 01: 02

/getData?path=abcd/efgh -> 1234 возвращается из кэша в 11: 01: 20

/getData?path=uvw/xyz -> 789 возвращается из кэша в 11: 01: 31

EDIT

Я пытаюсь использовать RequestParameters и затем сопоставить их с CacheKeyParameters, как объяснено в этих 2 статьях - https://medium.com/@dougmoscrop/i-set-up-api-gateway-caching-here-are-some-things-that-surprised-me-7526d954fbe6 & https://theburningmonk.com/2016/04/serverless-enable-caching-on-query-string-parameters-in-api-gateway/,, но обе они используют безсерверную платформу, которой я являюсь не могу понять, как это вписалось бы в мой шаблон

1 Ответ

1 голос
/ 01 июля 2019

Конечный результат в консоли AWS API Gateway должен отображать, что установлен флажок кэширования:

enter image description here

Мы можем достичь этого следующим образом:

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      CacheClusterEnabled: true
      CacheClusterSize: '0.5'
      MethodSettings:
        - HttpMethod: GET
          CacheTtlInSeconds: 120
          ResourcePath: "/getData"
          CachingEnabled: true
      DefinitionBody:
        swagger: 2.0
        basePath: /Prod
        info:
          title: OutService
        x-amazon-apigateway-policy:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal: "*"
              Action: execute-api:Invoke
              Resource:
                - execute-api:/*/*/*
        paths:
          "/getData":
            get:
              # ** Missing param start **
              parameters:
                - name: "path"
                  in: "query"
                  required: "false"
                  type: "string"
              # ** Missing param end **
              x-amazon-apigateway-integration:
              # ** Key is cached **
                cacheKeyParameters:
                  - method.request.querystring.path
                httpMethod: POST
                type: aws_proxy
                uri:
                  Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${OutLambda.Arn}/invocations
              responses: {}
      EndpointConfiguration: PRIVATE
      Cors:
        AllowHeaders: "'*'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...