4

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

我需要建立一个小型网络项目。为了使它免费,我打算将前端部分托管在 S3 上作为静态站点,并通过对 lambda 函数中托管的 REST API 进行 AJAX 调用来调用服务器端函数。我以前在自己的 web 应用程序中这样做过,但我记得在发出跨源请求时它会导致复杂化,我最终求助于使用 JSONP。这个设置有问题吗?我听说 JSONP 可能是一个安全问题,而这个新站点是供公众使用的。

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

这些方法中的哪一种可能是更好的选择?

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

4

3 回答 3

6

这些方法中的哪一种可能是更好的选择?

我会假装你没有问这个,因为没有“正确”的答案——这是主观的,有很多因素,其中一些是基于意见的。

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

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

另一种选择是使用 S3 和 Lambda(带有 API 网关),但将这两个资源配置为 CloudFront 分配后面的源。将默认缓存行为指向存储桶,然后使用路径模式,例如/api/*将 API 请求路由到 API 网关。这会将所有请求代理到适当的源,但您的站点在 DNS 中的主机名指向 CloudFront,所有资源都可以在其中访问,这意味着所有请求都不会是跨源的——所有内容都通过一个主机名访问。CloudFront 的 CDN/缓存功能是在获取静态内容时获得最佳性能的奖励,并且可以为 API 禁用。

于 2017-04-13T23:37:48.310 回答
2

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

现在将此与最便宜的 Lightsail 实例进行比较,该实例的成本为每小时 0.047 并且已经可以访问 Internet。当然,可用的 RAM 真的很小,但是如果您正在运行一个小应用程序 .. 并且希望它不是用 Java 编写的,那么这应该不是问题。此外,堆栈更小且更易于管理。

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

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

话虽如此,对于 EC2 实例,您不必删除它以避免额外费用,您可以简单地将其关闭.. 所以实际上,我会推荐 EC2 而不是 Lightsail,因为您可以让事情变得更简单。

于 2019-04-12T18:08:02.933 回答
0

仅供参考要解决 CORS 问题,您必须创建一个 lambda 来响应选项预检请求(并将其与 API 网关链接),然后配置 lambda 以返回所需的 CORS 标头

于 2022-01-14T00:15:59.847 回答