光帆与 Lambda + S3

Lightsail versus Lambda + S3

听起来像是一个奇怪的问题,但请耐心等待。

我需要构建一个小型 Web 项目。为了让它免费,我打算将前端部分作为静态站点托管在 S3 上,并通过 AJAX 调用 REST API 托管在拉姆达函数。我以前在自己的 Web 应用程序中做过这件事,但我记得在发出跨源请求时它会导致并发症,我最终求助于使用 JSONP。这个设置有什么问题吗?我听说 JSONP 可能是一个安全问题,这个新网站是为 public 使用而设计的。

我的替代设置是在托管站点和后端的 lightsail 上构建服务器。显然这可能是更正确的做事方式,但要花更多的钱。

以下哪种方法可能是更好的选择?

其他问题:是否可以设置 CORS,这样我就不必为跨源请求使用 JSONP?我对CORS有点陌生。

Which of these methods is likely the better option?

我会假装你没有问过这个问题,因为没有 "correct" 答案 -- 这是主观的,并且有很多因素,其中一些是基于意见的。

但这两种解决方案都是可行的。

API 网关是您用来将 Lambda 函数公开到 Internet 的前端,它支持 CORS,因此您不必担心这一点。

另一种选择是使用 S3 和 Lambda(使用 API 网关),但将这两种资源都配置为 CloudFront 分配背后的来源。将默认缓存行为指向存储桶,然后使用像 /api/* 这样的路径模式将 API 请求路由到 API 网关。这会将所有请求代理到适当的来源,但您的站点在 DNS 中的主机名指向 CloudFront,其中 all 资源被访问,这意味着 none 的请求将是交叉的-origin——一切都在一个主机名上访问。 CloudFront 的 CDN/caching 功能是获取静态内容时获得最佳性能的奖励,并且可以针对 API.

禁用

听起来费用是您关心的问题..所以请记住这一点:如果您应用程序的任何服务器端代码都需要与 Internet 通信,您还必须为 Lambda 提供 NAT 网关以用于与 Internet 对话。 Lambda 本身没有出站互联网访问权限。除了数据传输和处理费用外,NAT 网关目前的费用为每小时 0.045 美元。使用 Lambda,您只需为函数为 运行 的时间付费,但您的 NAT 网关将一直为 运行。最重要的是,如果您的流量是通过 API 网关到达您的 Lambda 函数,则需要考虑这一点……因为它是一个小型应用程序,我假设您永远不会达到引发 API 网关费用,但是,如果您启用了 CloudTrail,您将获得 (1) Lambda、(2) NAT 网关、(3) S3 和 (4) API 网关的 CloudTrail 日志。这可能会让您支付可能的 CloudTrail 费用。

现在将其与最便宜的 Lightsail 实例进行比较,后者每小时收费 0.047 美元,并且已经可以访问互联网。当然,可用的 RAM 确实很小,但如果您是 运行 一个小应用程序..并且希望它不是用 Java 编写的,那么这应该不是问题。此外,堆栈更小且更易于管理。

因此,以每小时 0.002 美分的基线差异(将 NAT 网关成本与 Lightsails 成本进行比较)..同时考虑到 Lightsail 的简单性,..Lightsail 可能是更好的选择。

如果您担心 Lambda 会自动扩展这一事实,请记住,您可以通过编程方式触发更多和更大的 Lightsail 实例,并基本上实现相同类型的扩展范例。但请注意,您不能简单地关闭不使用的 Lightsail 实例,您必须在月底之前将其删除,以防止产生全月费用。

话虽这么说,对于 EC2 实例,您不必删除它以避免产生额外费用,您只需将其关闭..所以实际上,我会推荐 EC2 而不是 Lightsail,因为您可以使事情变得更简单。

仅供参考 要解决 CORS 问题,您必须创建一个 lambda 来响应选项预检请求(以及 link 与 API 网关一起响应),然后将 lambda 配置为return 你想要的 CORS headers