AWS backend +响应前端:处理请求

我正在搞AWS,我已经使用dynamodb,api网关和cognito设置了一个简单的REST API。 我用node + express编写了REST API。

我的节点应用程序在EB上,基本上我使用cognito处理API网关中的请求的身份validation。 作为一个独立的,这似乎是正常工作,因为我正在testing它使用一个简单的反应的应用程序。

现在我正在为我的实际反应应用程序做服务器端渲染,所以我试图找出处理这个问题的最佳方法。 对于服务器端渲染,我有另一个名为react-app-server的节点应用程序,我想在API网关上处理caching,并使用cloudfront来提供静态文档,图像等。

所以,如果我去www.mysite.com/for-sale/some-item-thats-for-sale ,这个请求应该首先检查是否有这个页面的caching版本并提供它。 否则,我需要让我的react-app-server呈现.html并提供/caching它。 由于有两个节点应用程序,api-server和react-app-server,我怎么能从我的api-gateway指向react-app-server来呈现html?

这个场景如何适应AWS体系结构? 我意识到这可能是一个非常愚蠢的问题,但我真的很新。 谢谢

我build议您将Cloudfront放置在所有应用程序的前面,并允许Cloudfront使用Cache-Control或每个HTML响应返回的Expires标题来处理所有的caching。 这将允许从Cloudfront边缘服务器返回所有caching的内容,从而提高性能并简化您的应用程序。

例如,如果您的节点应用程序返回带有Cache-Control: public, max-age=31536000标题的HTML文档,则Cloudfront将读取该值,并将从边缘服务器返回相同的HTML响应长达1年(31,536,000秒= 1年)。 如果您的节点应用程序使用Cache-Control: public, max-age=3600返回一个HTML文档Cache-Control: public, max-age=3600 Cloudfront将读取该值并在边缘服务器上将HTMLcaching长达1小时。

您可以在发行版中定义两个(或更多)来源,并且可以使用行为来控制每个请求将委派给哪个来源。

实际上我刚刚在AM网站上使用Cloudfront写了一篇教程: https ://www.codeengine.com/articles/process-form-aws-api-gateway-lambda/。 这与您的使用案例不一样,但如果您希望在API网关之前使用Cloudfront,则可以帮助您入门。

如果您按照本教程进行操作,您可以看到我正在处理来自S3存储桶的大部分请求,但是以/rest/开头的路由path相信也可以用于您的用例。

CloudFront是一个内容交付networking,旨在通过将文件的副本放置在边缘位置来减less来自世界各地的访问者的延迟和传输时间。 它具有cachingfunction,所以使用正确的设置,您应该能够从react-prerenderer中获取静态内容并caching它们。

API网关的构build是为了提供dynamic内容,只能在AWS的主要可用区域运行,而不是在边缘位置。 如果可能的话,通过API网关将请求路由到CloudFront将会很奇怪。

另一种可能是在应用程序中处理caching(例如,在Express中你可以使用mcache )。