AWS 使用 SAM API 网关的 queryStringParameter PathParameter 启用缓存

AWS enable caching with queryStringParameter PathParameter for SAM API Gateway

我想为我的无服务器函数启用 API 网关的缓存,但很难理解在哪里做,用什么方法。

我曾尝试在我的无服务器函数中设置 queryStringParameters,但这会导致错误,我还尝试将它们添加到我的 GLOBAL Api 下,但没有成功(也希望避免在全局中这样做)

还检查了我在 API 网关中的资源,并且 RequestParams 和 QueryStringParams 的缓存被禁用。

模板

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
  Api:
    EndpointConfiguration: REGIONAL
    CacheClusterEnabled: true
    CacheClusterSize: "0.5"
    MethodSettings: 
      - CachingEnabled: true
        CacheDataEncrypted: true
        CacheTtlInSeconds: 60
        HttpMethod: "*"
        ResourcePath: "/*"
Resources:
......
  GetItem:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: GetItem.handler
      Runtime: nodejs8.10
      Timeout: 20
      CodeUri: "codes"
      Events:
        GetItem:
          Type: Api
          Properties:
            Path: /item/{itemCode}
            Method: get
......

***************************************编辑********* ************************

发现如果 API 网关不知道这些参数,那么它将忽略它进行缓存 https://forums.aws.amazon.com/thread.jspa?messageID=915838&#915838

我试过在模板中添加多个methodSetting条目,CF似乎没有忽略它,但结果还是一样。如果可能的话,我也不确定如何对 queryStringParameters 做同样的事情。

  - ResourcePath: "/~1item~1/~1{itemCode}"
    CachingEnabled: true
    CacheDataEncrypted: true
    CacheTtlInSeconds: 60
    HttpMethod: "*"

***************************************编辑********* ************************

我更喜欢一种方法来为每个资源下的 RequestParams 和 QueryParams 启用缓存,也就是 'AWS::Serverless::Function'

非常感谢您的帮助。

此时 SAM 框架不支持执行此操作。他们计划发布一个更新,在此 link 上启用更多功能:https://github.com/awslabs/serverless-application-model/issues/1140

在那之前,我唯一能想到的解决方案是 os 在 API 网关前创建一个 CloudFront 分配,这是一种资源浪费,但效果很好。