map(lambda s:_使用Lambda和S3构建高度可扩展的Imgur克隆

map( s:
因此,我前两次尝试在一夜之间成为百万富翁的尝试已经失败了 。当然,我设法鼓起了一点兴奋,但是我还没有在自己家的车道上坐着法拉利……
这第三次尝试肯定会获胜,对吧?
我将建立一个可以与流行图像托管网站Imgur媲美的网站 。这将是一个高度可扩展,有弹性且低成本的解决方案,它将利用无服务器 技术来取得巨大成功 。更具体地说,我将使用AWS的产品来托管单个页面应用程序以及组成该站点的一系列端点 。
在货币化方面? 我想我会等到明天看到成群的天使投资者在寻找便宜的投资在进行中! 我将尽快将自己的汽车发射入轨道…
交通预测 。要求
好的,和往常一样,我们需要定义项目必须遵守的一系列要求,才能使此成功 。
这些对于一个小型项目而言是相当可实现的,并且不应花费太长时间来实施,同时还显示了,和S3组合的强大功能 。
伸展任务
在以后的文章中,我将对此进行扩展,以便我可以使用和等服务作为认证考试的练习 。
Vue.JS中的前端
我最新的百万美元构想的前端将使用Vue.JS 2构建 。这将允许用户登录/注册+将新图像上传到站点 。它还将以真实的imgur样式显示网站上所有可用的图像 。
0.01版将如下所示:

map(lambda s:_使用Lambda和S3构建高度可扩展的Imgur克隆

文章插图
我们简单的前端实作
我们的前端将利用---js和aws-sdk节点模块来与我们的AWS 服务进行通信 。我们需要将以下信息传递到前端的配置文件中,以便连接到的服务:
export default {
region: 'eu-west-1',
IdentityPoolId: 'eu-west-1_9IBAarCx9',
UserPoolId: 'eu-west-1:853957954650',
ClientId: '43duengi4ldb6jel18p84sgq22',
s3SignedUrl: 'https://rvv1a9to8j.execute-api.eu-west-1.amazonaws.com/dev/upload-node'
}
最初,将这些内容包含在我的前端代码中的想法有些可怕 。如果您像我一样,那么您可能会想到-“如果我揭露了这些,那么人们将能够假装他们是我,并积rack数百万美元的费用” 。
但是,这些值仅用于命中未经身份验证的端点,黑客对其使用“没有”危害 。
【map(lambda s:_使用Lambda和S3构建高度可扩展的Imgur克隆】我们的认知服务
借助---js库,我们可以轻松创建注册功能,身份验证和验证功能 。我不会发布完整的服务文件,但会介绍一下和功能:
完整的源文件可以在这里找到: https : ////imgur-clone/blob//src/imgur-/src//.js
只需在AWS控制台中进行一些设置,并编写140行代码,我们便拥有了一个功能全面的用户配置文件系统 。考虑到弹性如何,这非常了不起,并且只需很少的工作即可充分充实 。我不必定义架构,建立数据库,确保数据库弹性或类似功能 。我只是配置了一个用户池,所以一切顺利 。
接下来几天,我将在我的频道上做一个深入的教程: https : /// ,介绍如何实现自己的用户管理系统 。我们的函数
现在,我们已经对一个简单的前端进行了排序,我们需要我们的函数,这些函数将使我们能够完成一些很酷的事情,例如上传文件,并检索到存储桶中所有图像的链接 。
为了使它起作用,我们需要2个函数来开始 。
为了部署我们的功能,我们将再次使用的cli 。
文件上传函数
因此,我们的“上传”功能实际上并不是将图像上传到s3存储桶的功能 。本质上,它将仅获取签名的URL,然后将其与PUT HTTP请求打中以便上传到S3 。
这里要注意一些关键事项 。我们正在创建一个对象,其中包括我们要上传到的存储桶名称,密钥,该密钥将是文件名,内容类型,签名的URL对其保持有效的时间以及ACL 。此ACL是访问控制列表,我们需要将其设置为-read ,以便人们能够查看存储桶中的图像 。
然后调用s3.() ,该s3.()返回我们随后上传到的URL 。漂亮又简单 。
列出所有函数
我们列出所有函数将完成查询s3存储桶中的所有对象并将其作为json响应返回的工作 。
我们可以通过将所有上载的图像与一个键和一个发电机中的位置相关联来进一步扩展此功能,然后让该函数返回一个分页的结果列表,但是就最低限度可行的产品而言,这将立即执行 。
无服务器部署
每当涉及到部署函数时,我都可以使用无服务器cli轻松实现 。
在这个.yml文件中,我可以定义IAM权限以及用于保护我的函数的授权者 。这些授权者将确保人们不能仅仅编写脚本并每秒攻击这些端点5,000次 。他们还需要拥有一个注册帐户,并设置一个带有有效令牌的适当授权标头 。
每当我对功能进行更改时,我都 其称为,它会部署无服务器帝国,并为我提供API端点,现在我可以用任何HTTP请求来实现这些端点 。对于我的两个功能,此部署大约需要10秒钟,因此速度相当快 。
无服务器的喜悦
整个项目的主要工具之一是无服务器cli 。这极大地改善了我编写并随后部署它们的方式 。如果您有兴趣了解更多有关如何管理所有的信息,那么我建议您查阅我的另一篇文章《使用管理 》:
使用无服务器管理
如果您一直关注我一段时间,您就会知道我非常喜欢新的无服务器概念……
完整的源代码
如果您想自己尝试一下,可以在这里找到该项目的完整源代码:
/ imgur-clone
通过在上创建一个帐户为imgur-clone开发做出贡献 。
演示链接
您可以在以下网址找到最终产品:[可能吗? NSFW ] #/
测试一下,注册一个帐户,然后上传合适的东西! 请记住,尽管我还没有时间实现诸如密码重置之类的小事情 。
结论
这个相当简单的项目拥有一个功能齐全的用户帐户系统,并带有电子邮件验证功能 。它还具有弹性和高度可扩展性,如果您要在专用服务器上设计类似的项目,则需要在多个数据中心中使用多个服务器,则必须设置负载平衡器并为基础系统提供弹性 。
通过利用无服务器和服务,我们能够构建一个需要花费数月甚至数年的开发工作才能满足旧基础架构上相同标准的系统 。
希望您发现本文有趣而有教育意义! 如果您喜欢这个,请随时在下面的评论部分或通过发给我 来让我知道 。如果您想联系我,我也在上 !
翻译自:
map( s: