AWS Lambda和S3静态文件路由与自定义域

Emp*_*k12 13 amazon-s3 amazon-cloudfront amazon-route53 aws-lambda aws-api-gateway

我一直在尝试在AWS上设置一个简单的无服务器应用程序,但我无法理解如何将这些部分与自定义域放在一起.

Web应用程序路由应如下所示:

  • / - >从S3 Bucket提供静态HTML/CSS/JS
  • /api/people/ - > Lambda函数调用
  • /api/dogs/ - > Lambda函数调用
  • /stats/ - > Lambda函数调用
  • /backend/ - >从S3 Bucket提供静态HTML/CSS/JS

我尝试过使用API​​ Gateway和CloudFront并将它们与Route53连接到我的自定义域,但它们似乎只支持静态S3或Lambda JSON路由.

AWS架构将如何显示我可以自由选择路由到不同AWS资源的路径(例如/- > S3,/api/people/- > Lambda,/api/dogs/- > Lambda,/backend/- > S3)

非常感谢你提前.

Ash*_*han 9

使用无服务器技术设置完整堆栈Web应用程序的主要挑战之一是具有代理层来路由计算(Lambda)和静态文件(HTML,JS,CSS,Images)的消息.尽管API Gateway在内部使用CloudFront,但它无助于提供来自S3的静态内容和使用相同域的动态内容(避免跨域访问).

因此,需要使用AWS CloudFront将消息代理到API网关和Lambda,这些消息我一直用于大多数Web项目.权衡是,在通过CloudFront访问API网关时,存在增加的延迟和成本(虽然这并不重要),这应该是可接受的.

有关更多详细信息,请参阅我在AWS上使用Full Stack无服务器Web应用程序的文章.

  • 您的链接很有趣,但不幸的是它没有提供有关如何实现它的具体示例。 (2认同)

小智 1

我对 AWS 比较陌生,但最近我成功地通过 S3 运行了一个静态站点并访问了 Lambda 函数,所以它在我的脑海中相当新鲜。

首先,无法将特定的域路径定向到特定的 AWS 资源。因此,如果您使用 Route 53 将域指向 S3 存储桶来提供静态资源,则该域的所有路径将尝试仅获取该 S3 存储桶中的资源。现在,由于您的“后端”还提供来自 S3 存储桶的静态文件,从技术上讲,这可能与您使用的“/”位于同一个 S3 存储桶中,只是存储在名为“后端”的文件夹中(如果可以接受)。

否则,真正的答案是使用子域。

有了这个概念,您可以执行以下操作:

  • www.yourdomain.com 指向包含“/”静态站点的 S3
  • api.yourdomain.com 指向可以充当访问 Lambda 函数的代理的 AWS API Gateway
  • backend.yourdomain.com 指向您的“/backend”站点的 S3 存储桶(如果需要)

您只需将记录集添加到您的域的托管区域即可创建子域。请参阅此处的文档。

完成所有这些设置远远超出了这个问题的范围,而且会很长,但希望这些信息有意义,并有助于引导您走向更有意义的方向。