蓝灯与Lambda + S3的比较

4
可能听起来有些奇怪,但请跟我走。
我需要建立一个小型 web 项目。为了使其免费,我打算将前端部分托管在 S3 上作为静态网站,并通过向在 lambda 函数中托管的 REST API 发送 AJAX 调用来调用服务器端函数。我以前在自己的 web 应用程序中做过这个操作,但是我记得当进行跨域请求时会引起一些复杂性,最终不得不使用 JSONP。这种设置有什么问题吗?我听说 JSONP 可能会存在安全隐患,而这个新站点是面向公众使用的。
我的备选设置是在 lightsail 上构建一个托管网站和后端的服务器。显然,这可能是更正确的做事方式,但是稍微花费的费用略高一些。
这两种方法哪种更好呢?
附加问题:是否可以设置 CORS,以便我不必在进行跨域请求时使用 JSONP?我对 CORS 有点不熟悉。
3个回答

6
哪种方法更好呢?
我假装你没有问这个问题,因为没有“正确”的答案 - 这是主观的,有许多因素,其中一些是基于意见的。但两种解决方案都是可行的。
API Gateway是将Lambda函数暴露给互联网的前端,具有CORS支持,因此这不应该成为您担心的问题。
另一个选项是使用S3和Lambda(带有API Gateway),但将这两个资源配置为CloudFront分发后面的源。将默认缓存行为指向存储桶,然后使用类似于/api/*的路径模式将API请求路由到API Gateway。这会代理所有请求到适当的源,但您站点的DNS中的主机名指向CloudFront,在那里访问所有资源,这意味着没有请求会跨域 - 所有内容都在单个主机名下访问。CloudFront的CDN /缓存功能对于获取静态内容时的最佳性能是一个奖励,可以针对API禁用它们。

更准确地说,我不是在问哪个更好,而是是否有明显的问题。我以前从未使用过cors,但它看起来很容易设置。那个cloudfront的想法也很好,我可能会试一试。谢谢! - master565

3
看起来成本是您的问题..因此请记住:如果您的应用程序中的任何服务器端代码需要连接到Internet,则还必须为Lambda提供NAT网关以用于与Internet通信。独立使用Lambda没有出站Internet访问权限。NAT Gateway目前每小时费用为0.045美元,加上数据传输和处理费用。使用Lambda时,您只需支付函数运行时间的费用,但您的NAT网关将一直运行。除此之外,如果您的流量通过API Gateway到达Lambda函数,则需要考虑这一点。由于这是一个小型应用程序,因此我假设您永远不会达到产生API Gateway费用的限制,但是,如果您打开了CloudTrail,则将获得(1)Lambda,(2)NAT Gateway,(3) S3和(4)API Gateway的CloudTrail日志..这可能会使您面临可能的CloudTrail费用。
现在将此与最便宜的Lightsail实例进行比较,其每小时费用为0.047美元,并具有Internet访问权限。当然,可用RAM非常小,但是如果您正在运行小型应用程序..并且希望其不是用Java编写的,则这不应该是问题。另外,堆栈要简单得多,易于管理。
因此,在每小时0.002美元的基线差异下(将NAT Gateway成本与Lightsails成本进行比较),同时考虑到Lightsail的简单性..Lightsail可能是更好的选择。
如果您担心Lambda将自动扩展,请记住,您可以以编程方式触发其他更大的Lightsail实例,并实现同样类型的扩展范例。请注意,您不能仅关闭您未使用的Lightsail实例,必须在月底之前删除它以避免完整的月度费用。
话虽这么说,对于EC2实例,您无需删除它以避免额外费用,您只需将其关闭即可..因此,实际上我建议使用EC2而不是Lightsail,因为您可以使事情变得更简单。

0

提示:要解决CORS问题,您需要创建一个Lambda函数来响应options预检请求(并将其与API网关链接),然后配置Lambda函数以返回所需的CORS标头。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接