AWS 使用 SAM API 网关的 queryStringParameter PathParameter 启用缓存
AWS enable caching with queryStringParameter PathParameter for SAM API Gateway
我想为我的无服务器函数启用 API 网关的缓存,但很难理解在哪里做,用什么方法。
我曾尝试在我的无服务器函数中设置 queryStringParameters,但这会导致错误,我还尝试将它们添加到我的 GLOBAL Api 下,但没有成功(也希望避免在全局中这样做)
还检查了我在 API 网关中的资源,并且 RequestParams 和 QueryStringParams 的缓存被禁用。
- 作为参考:
https://awslabs.github.io/serverless-application-model/internals/generated_resources.html
- 作为参考:
https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
- 作为参考:
https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
模板
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󟥾
我试过在模板中添加多个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 分配,这是一种资源浪费,但效果很好。
我想为我的无服务器函数启用 API 网关的缓存,但很难理解在哪里做,用什么方法。
我曾尝试在我的无服务器函数中设置 queryStringParameters,但这会导致错误,我还尝试将它们添加到我的 GLOBAL Api 下,但没有成功(也希望避免在全局中这样做)
还检查了我在 API 网关中的资源,并且 RequestParams 和 QueryStringParams 的缓存被禁用。
- 作为参考: https://awslabs.github.io/serverless-application-model/internals/generated_resources.html
- 作为参考: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessapi
- 作为参考: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
模板
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󟥾
我试过在模板中添加多个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 分配,这是一种资源浪费,但效果很好。