使用Lambda和S3构建高度可扩展的Imgur克隆

因此,我之前两次尝试在一夜之间成为百万富翁的尝试已经失败了。 当然,我设法鼓起了一点兴奋,但是我还没有法拉利坐在我自己家的车道上……

这第三次尝试肯定是赢家,对吗?

我将建立一个可以与流行图像托管网站Imgur媲美的网站。 这将是一个高度可扩展,有弹性且低成本的解决方案,它将利用无服务器 技术来取得巨大成功。 更具体地说,我将使用AWS的Lambda产品来托管单个页面应用程序和组成站点的一系列端点。

在货币化方面? 我想我会等到明天看到成群的天使投资者在寻找便宜的投资在进行中! 我将尽快将自己的汽车发射入轨道……

交通预测。

要求

好的,和往常一样,我们需要定义项目必须遵守的一系列要求,才能使此成功。

  • 该网站从一开始就必须具有高度的可扩展性。 这将确保它在传播时不会崩溃。 由于我们的端点基于Lambda,因此我们不必太担心可伸缩性。
  • 该网站必须具有某种形式的身份验证/授权,以便人们不能只是开始访问未经身份验证的终结点并上传一百万张图像并破坏我们的乐趣。
  • 该网站绝对不能让我花大价钱!

这些对于一个小型项目而言是相当可实现的,并且不需要花费太长时间来实施,同时还展示了Cognito,Lambda和S3组合的强大功能。

伸展任务

在以后的文章中,我将对此进行扩展,以便我可以使用Rekognition和dynamodb等服务作为认证考试的练习。

  • 在以后的文章中,我们将研究如何使用Rekognition从任何上传的图像中提取一系列标签。 这些标签随后将存储在dynamodb中,并允许人们查看某些类别的图像。
  • 我还想实现一个评论和一个upvote / downvote系统,以便用户可以对网站上他们喜欢的内容进行评论和投票。

Vue.JS中的前端

我最新的百万美元构想的前端将使用Vue.JS 2构建。这将允许用户登录/注册+将新图像上传到站点。 它还将以真实的imgur样式显示网站上所有可用的图像。

0.01版将如下所示:

我们简单的前端

实作

我们的前端将利用amazon-cognito-identity-jsaws-sdk节点模块来与我们的AWS Cognito服务进行通信。 我们需要将以下信息传递到前端的配置文件中,以便连接到Amazon的Cognito服务:

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'
}

最初,将这些内容包含在我的前端代码中的想法有些可怕。 如果您像我一样,那么您可能会想到-“如果我揭露了这些,那么人们将能够假装他们是我,并积millions数百万美元的费用”。

但是,这些值仅用于命中未经身份验证的端点,黑客使用它们不会造成* no *伤害。

我们的认知服务

使用amazon-congito-identity-js库,我们可以轻松创建注册功能,身份验证和验证功能。 我不会发布完整的Cognito服务文件,但会介绍一下configure和signup功能:

完整的源文件可以在这里找到: https : //github.com/elliotforbes/imgur-clone/blob/master/src/imgur-frontend/src/cognito/cognito.js

只需在AWS控制台中进行一些设置,并编写140行代码,我们便拥有了一个可以正常运行的用户配置文件系统。 考虑到弹性如何,这非常了不起,并且只需很少的工作即可充分充实。 我不必定义架构,建立数据库,确保数据库弹性或类似功能。 我只是配置了一个用户池,所以一切顺利。

接下来几天,我将在自己的YouTube频道上做一个深入的教程: https : //www.youtube.com/tutorialedge ,介绍如何实现自己的Cognito用户管理系统。

我们的Lambda函数

现在,我们已经对一个简单的前端进行了排序,我们需要我们的lambda函数,这些函数将使我们能够完成诸如上传文件之类的很酷的事情,并检索到存储桶中所有图像的链接。

为了使它起作用,我们需要2个lambda函数来开始。

  • 该函数将返回一个已签名的url,使我们可以将其上传到s3存储桶
  • 该函数将返回存储桶中所有项目的简单JSON列表。

为了部署我们的功能,我们将再次使用serverless.com的cli。

文件上传Lambda函数

因此,我们的“上传”功能实际上并不是将图像上传到s3存储桶的功能。 本质上,它将仅获取签名的URL,然后将其与PUT HTTP请求打中以便上传到S3。

这里要注意一些关键事项。 我们正在创建一个s3Params对象,其中包括我们要上传到的存储桶名称,密钥,该密钥将是文件名,内容类型,签名的URL保持有效的时间以及ACL。 此ACL是访问控制列表,我们需要将其设置为public-read ,以便人们能够查看存储桶中的图像。

然后调用s3.getSignedUrl() ,该s3.getSignedUrl()返回我们随后上传到的URL。 漂亮又简单。

列出所有Lambda函数

我们列出所有lambda函数将完成查询s3存储桶中的所有对象并将它们作为json响应返回的工作。

我们可以通过将所有上载的图像与一个键和一个发电机中的位置相关联来进一步扩展此功能,然后让该函数返回一个分页的结果列表,但是就最低限度可行的产品而言,这将立即执行。

无服务器部署

每当涉及到部署lambda函数时,我都可以使用无服务器cli轻松实现。

在这个serverless.yml文件中,我可以定义IAM权限以及用于保护我的lambda函数的授权者。 这些授权者将确保人们不仅可以编写脚本,而且每秒可以击中这些端点5,000次。 他们还需要拥有一个注册帐户,并设置一个带有有效令牌的适当Authorization标头。

每当我对函数进行更改时,我都serverless deploy其称为serverless deploy ,它会部署无服务器帝国,并为我提供API端点,现在我可以用任何HTTP请求来实现这些端点。 对于我的两个功能,此部署大约需要10秒钟,因此速度相当快。

无服务器的喜悦

整个项目的主要工具之一是无服务器cli。 这极大地改善了我编写lambda并随后对其进行部署的方式。 如果您有兴趣了解有关如何管理所有Lambda的更多信息,那么我建议您查阅我的另一篇名为《使用Serverless管理Lambda Empire》的文章:

使用无服务器管理Lambda Empire
如果您一直关注我一段时间,您就会知道我非常喜欢新的无服务器概念…… hackernoon.com

完整的源代码

如果您想自己尝试一下,可以在这里找到该项目的完整源代码:

elliotforbes / imgur-clone
通过在GitHub上创建一个帐户为imgur-clone开发做出贡献。 github.com

演示链接

您可以在以下网址找到最终产品:[可能吗? NSFW ] http://imgur-serverless-clone.s3-website-eu-west-1.amazonaws.com/#/

测试一下,注册一个帐户,然后上传合适的东西 请记住,尽管我还没有时间实现诸如密码重置之类的小事情。

结论

这个相当简单的项目拥有一个功能齐全的用户帐户系统,并带有电子邮件验证功能。 它还具有弹性和高度可扩展性,如果您要在专用服务器上设计类似的项目,则需要在多个数据中心中使用多个服务器,则必须设置负载平衡器并为基础系统提供弹性。

通过利用无服务器和Cognito服务,我们可以构建一个系统,该系统要花费数月甚至数年的开发工作才能满足旧基础架构上的同一标准。

希望您发现本文有趣而有教育意义! 如果您喜欢这个,请随时在下面的评论部分或通过发给我Elliot Forbes来让我知道。 我也想加入LinkedIn 。

From: https://hackernoon.com/building-a-highly-scalable-imgur-clone-with-lambda-and-s3-aaf9da422c3e

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22903.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php匿名图文贴程序,使用imgur api v3使用php匿名上传图像

我计划使用其api匿名上传图像到imgur,我在匿名上传类别中注册了我的应用程序,并获得客户端ID和客户端密码,如何使用php将图像上传到imgur并将图像直接检索到图像? 任何人都可以建议任何示例的链接? 这是我试图做的,但我得到错误“致命错误:最…

uPic 图床配置教程 - Imgur

uPic 图床配置教程 - Imgur 配置项说明Client ID 获取方式 配置项说明 Client ID: Applications Client ID Client ID 获取方式 1.打开Imgur 官网并登陆 2.进入应用注册页面 3.按要求填写表单信息 4.注意Authorization type选项必须选择OAuth 2 authorization without a cal…

在线图片托管服务imgur

免费的图片分享网站imgur 什么是imgur 网址:https://imgur.com/ Imgur于2009年由俄亥俄大学一位大三学生Alan Schaaf创办,很快就获得了很多人的关注。 Imgur是一个在线图片托管服务网站。网站于2009年2月23日由阿兰沙夫创建。Imgur为用户提供免费图片托管服务&a…

Wallpaper Engine 提取/导出原壁纸

文章目录 前言一、壁纸选取二、提取壁纸总结 前言 本教程基于大佬制作的pkg解压项目,为小白提供的简单教程,项目源地址 https://github.com/notscuffed/repkg 一、壁纸选取 打开 Wallpaper Engine, 选择想要提取的壁纸,右键选择…

微信壁纸小程序V1.2.0(自带后台上传图片)

前篇:微信壁纸头像小程序(附源码)_热衷与自由的博客-CSDN博客_头像小程序源码 前言 在上篇文章中,我给大家介绍了一个纯前端的微信壁纸小程序,也简单教会大家如何去搭建,但是这个小程序的图片是通过网上开放…

Wallpaper壁纸提取得到tex文件,tex文件转图像,tex文件转png,tex文件提取壁纸,Wallpaper壁纸提取无法得到图像文件,RePKG-GUI提取得到tex文件而不是图像的解决方法

之前我们介绍了如何利用RePKG-GUI工具从Wallpaper壁纸的sence.pkg文件提取壁纸,但最近在提取壁纸时,我发现,有一小部分壁纸无法利用RePKG-GUI工具提取得到图像文件,而是会得到一个.tex类型的文件。 Bug是怎么产生的暂时不知道&am…

一键提取Wallpaper Engine壁纸 pkg格式壁纸图片素材导出教程

wallpaper engineer下载的壁纸文件并不能直接查看,在资源管理器中打开后会有一个scene.pkg的文件中。并不能打开,网上搜了些解决办法,记录一下。 软件下载链接如下: 点我下载 提取码:kwft 下载后直接解压点击RePKG-GU…

(转载)《HelloGitHub》第 82 期

《HelloGitHub》第 82 期 原文链接:HelloGitHub|第 82 期https://hellogithub.com/periodical/volume/82 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目,每月 28 号更新一期。 这里有好玩和入门级的开源项目、开源书籍、实战项目、企业…

23/04/16使用pyecharts绘制中国地图并显示城市

需求 近日几个高中朋友都上岸研究生,某人提议做一个求学路线图,这种技术活儿当然就交给我了。 一共是两幅图,本科城市分布图和研究生城市分布图背景是中国地图在地图中标记大学所在城市在标记点上显示每个人的头像附录显示大学名称每个人本…

ChatGPT中的提示工程(Prompt)怎么做?DAIR.AI最新《提示工程指南》,全面讲述提示技术,附书册课件视频...

来源:专知 提示工程是一门相对较新的学科,用于开发和优化提示,以有效地将语言模型(LM)用于各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLM)的能力和局限性。 研究人员使用prompt engineering来提高LLM在广泛的常见和复杂…

ChatGPT引发混乱!数千种期刊:它不能成为论文作者

本文来源:艾思科蓝整理自财新网、卫报、中国科学报、百度百科,编辑:募格学术 ChatGPT诞生才两个月,但它给全世界投下的「重磅炸弹」就没停下来过。 日前,中国人民大学首都发展与战略研究院副院长郭英剑也发表了题为“2…

【算法动画图解】:安利一款昨天发现的app

偶然看到一个app:算法动画图解,用动画的形式帮你把基础算法捋一遍,个人觉得很赞。 如下是目录。后面有空我会逐个大类更新具体内容。 1、分类 (1)冒泡排序 (2)选择性排序 (3&…

chatgpt赋能python:如何用Python制作动画?

如何用Python制作动画? Python作为一种优秀的编程语言,可以用于不同领域的编程。其中,Python也可以被用于创建动画。使用Python的主要好处之一是其强大的Matplotlib库,它可以帮助我们更轻松地创建可视化效果。 什么是Matplotlib…

GAN生成漫画脸

最近对对抗生成网络GAN比较感兴趣,相关知识点文章还在编辑中,以下这个是一个练手的小项目~ (在原模型上做了,为了减少计算量让其好训练一些。) 一、导入工具包 import tensorflow as tf from tensorflow.keras import layersimport numpy a…

拥抱毒瘤 DDD!

点击关注公众号,Java干货及时送达👇 来源:小姐姐味道 牛B的人物,早已经厌倦了中英文混杂,他们更进一步,使用中英文缩写,对普通人进行降维打击。更厉害的,造就新的名词,并…

技术人的618种草书单,这些好书值得收藏

虽然才刚刚进入 6 月,但各大网店的 618 活动都已经悄悄拉开帷幕,最近图灵君收到读者们的催更,希望我们推荐一些值得购买的书,想趁着 618 期间下手,于是火速响应大家的需求,集结了各方数据,整理出…

人工智能的黎明:从信息动力学的角度看ChatGPT| 观点

David S. Soriano, CC BY-SA 4.0 via Wikimedia Commons 导读: 以ChatGPT为代表的新的人工智能语言模型的出现与更迭,引发人们极大的兴奋和关注。 物理学家祁晓亮从信息动力学的角度分析,认为AI革命的标志是信息处理复杂度的临界点。AI还没有…

安卓集成腾讯即时通信IM完成聊天室功能

安卓集成腾讯即时通信IM完成聊天室功能 没有效果图的文章都是扯淡**请将下面的MainActivity的代码复制到源码里面,替换掉源码的MainActivity.class**话不多说,下来上代码:以上就是所有的代码附上demo源码。源码:[源码请点这里](ht…

「GPT虚拟直播」实战篇二|无人直播间如何接入虚拟人

摘要 虚拟人和数字人是人工智能技术在现实生活中的具体应用,它们可以为人们的生活和工作带来便利和创新。在直播间场景里,虚拟人和数字人可用于直播主播、智能客服、营销推广等。接入GPT的虚拟人像是加了超强buff,具备更强大的自然语言处理能…

从腾讯实时音视频发家史,看爆发中的 RTC 将何去何从

作者 | 夕颜 头图 | 下载于视觉中国 出品 | AI 科技大本营(ID:rgznai100) 早在2015年左右,直播和短视频的兴起渗透进普通人的日常生活,人们信息消费的内容已经开始从文字向语音、视频信息转变。而疫情期间全民“家里蹲”的窘境&am…