Lightsail 与 Lambda + S3

Posted

技术标签:

【中文标题】Lightsail 与 Lambda + S3【英文标题】:Lightsail versus Lambda + S3 【发布时间】:2017-09-10 02:59:14 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

更准确地说,我不是在问哪个更好,而是问是否有明显的问题。我以前从未使用过cors,但设置起来看起来相当简单。那个云端的想法也很不错,我可以试一试。谢谢!【参考方案2】:

听起来成本是您关心的问题 .. 所以请记住这一点:如果您的应用的任何服务器端代码需要与 Internet 通信,您还必须为用于与 Internet 对话的 Lambda。就其本身而言,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,因为您可以让事情变得更简单。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Lightsail 与 Lambda + S3的主要内容,如果未能解决你的问题,请参考以下文章

AWS 与 Lightsail,有啥区别? [复制]

如何在 aws lambda 超时时释放 resdhift 资源?

WP-CLI 是不是与在 AWS Lightsail 上安装的 Bitnami 的 Wordpress 不兼容?

哪些AWS资源可以从AWS Lightsail的带宽传输中受益

哪种 SSL 证书可以确保 Amazon Lightsail 实例上的 C# 侦听器与 iOS 应用程序之间的安全 TCP 连接?

如何获取 Lightsail 实例的实例名称