Amazon s3 缓存AWS Lambda响应并使其无效

Amazon s3 缓存AWS Lambda响应并使其无效,amazon-s3,amazon-dynamodb,aws-lambda,aws-api-gateway,serverless-architecture,Amazon S3,Amazon Dynamodb,Aws Lambda,Aws Api Gateway,Serverless Architecture,我正在尝试在AWS上实施一个解决方案,如下所示: 我有一个每天运行一次的爬虫程序来索引某些站点。我想缓存这些数据并以API的形式将其公开,因为在爬网之后,这些数据一整天都不会改变。在爬虫重新蚀刻之后,我想使这个缓存失效并重建它,以便为更新的数据提供服务。我正在尝试使用无服务器架构来构建它 可能的解决方案 很明显,爬虫程序将在AWS Lambda上运行。我不清楚的是如何管理为数据服务的缓存。以下是我想到的一些解决办法 S3和Cloudfront用于缓存:爬网后,将数据以.json文件的形式存储在S

我正在尝试在AWS上实施一个解决方案,如下所示:

我有一个每天运行一次的爬虫程序来索引某些站点。我想缓存这些数据并以API的形式将其公开,因为在爬网之后,这些数据一整天都不会改变。在爬虫重新蚀刻之后,我想使这个缓存失效并重建它,以便为更新的数据提供服务。我正在尝试使用无服务器架构来构建它

可能的解决方案

很明显,爬虫程序将在AWS Lambda上运行。我不清楚的是如何管理为数据服务的缓存。以下是我想到的一些解决办法

  • S3和Cloudfront用于缓存:爬网后,将数据以.json文件的形式存储在S3中,该文件将使用AWS Cloudfront进行缓存。当爬虫重新读取新数据时,它将重建这些文件并请求Cloudfront使缓存无效

  • API网关DynamoDB:爬网后,将数据存储在DynamoDB中,然后由缓存的API网关提供服务。这里唯一的问题是,当爬虫重新爬行时,我如何在一天结束时请求使该缓存无效?由于数据将在一天内保持静态,我怎么能不支付DynamoDB将运行的额外时间(因为如果我在API网关上实现缓存,在这之后,只有一次调用DynamoDB进行缓存,它将在一天内处于空闲状态)

  • 有没有其他我错过的方式


    谢谢

    您可以在S3中的不同路径中存储新数据,其中包括创建日期。可能是这样的:

    index_2017_08_11.json
    
    这样就不需要使CloudFront端的缓存失效。因为要访问这些新对象,您需要提供新的URL,所以旧的CloudFront缓存不会成为问题。您可以使用删除前一天的S3文件

    另一个选项是设置过期缓存HTTP头,以便在缓存中的数据:

    Expires标头字段用于指定过期日期和时间 使用RFC 2616中指定的格式,超文本传输协议-- HTTP/1.1第3.3.1节,完整日期,例如:Sat,2015年6月27日 23:59:59格林尼治标准时间

    您可以在API网关中设置此标头,以指定对象应在何时失效

    由于数据将是静态的一天,我怎么能不支付 DynamoDB将运行的额外时间


    如果数据是静态的,您是否可以将其存储在S3中,并使用API网关从S3而不是DynamoDB提供数据?

    由于客户端的URL将被静态编码,因此最好使缓存无效,并要求Cloudfront重新验证它,以便不必更改客户端URL。数据在一天内是静态的,但每天都会改变,但在S3中存储json文件似乎更像是一种黑客行为,而不是真正的解决方案。对于我的用例,在AWS中还有什么可以使用的吗?我想使用Lambda->Cache某处1天->通过API提供缓存->一天后失效如何:Lambda crawler->写入S3;客户端->Cloudfront(在边缘缓存数据)->API网关->Lambda(设置Expires标头)->S3。在这种情况下,您将有一个对Lambda的请求,因为如果您设置“Expires”标头,Cloudfront将保留缓存直到一天结束,并且仅在缓存过期时执行另一个请求。您不需要为DynamoDB“闲置”一天付费。