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

时间:2019-09-12 12:59:45

标签: caching aws-lambda aws-api-gateway aws-sam serverless-application-model

我想为我的无服务器功能启用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: "*"

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

我希望有一种方法可以对每个资源(也称为“ AWS :: Serverless :: Function”)下的RequestParams和QueryParams进行缓存。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

目前,SAM框架不支持这样做。他们计划发布更新,以在以下链接上启用更多功能:https://github.com/awslabs/serverless-application-model/issues/1140

直到那时,我才能够提出在OS网关前面创建CloudFront分配的唯一解决方案,虽然有点浪费资源,但是效果很好。