官方操作手册地址:使用 Amazon Aurora Serverless构建无服务器应用程序
1. 摘要
初看标题中【快速构建无服务器应用程序】,您是否大吃一惊呢?没有服务器怎么运行应用程序呢?没有服务器怎么操作应用程序呢?这么好用的东西该如何使用呢?是不是收费呀?无数的问号从脑海中浮现而过。码农飞哥将在本文中为您一一解答。现在你需要做的就是带着好奇心开启本文的阅读之旅。
2.背景说明
不知不觉中,我们已经进入了云计算时代,数据上云,应用上云。Amazon作为云计算时代的先行者与领导者,早在2006年就推出了AWS(Amazon Web Service)产品,它以Web服务的形式向企业提供IT基础设施服务,这些IT基础设施服务包括业务应用程序部署,存储服务 ,数据分析,容器,应用程序集成,开发工具,数据库服务,云计算等等。本文构建无服务器应用程序就需要涉及到旗下的Amazon Aurora,Amazon SNS,AWS Lambda,Amazon Aurora Serverless这几款产品。
3. 认识新面孔
小伙伴们可能对前面提到的Amazon Aurora,Amazon SNS,AWS Lambda,Amazon Aurora Serverless,Amazon Cloud9产品还很陌生。下面就让他们隆重登场,跟大家见个面,来个自我介绍。
3.1 Amazon Aurora
大家好,我叫Amazon Aurora。请原谅我莫得中文名,因为我来自美丽国。我是一个可以兼容MySQL和PostgreSQL的关系数据库。使用这两款数据库的小伙伴来使用我的话不会有丝毫的陌生感哦。我既具有传统企业数据库的性能和可用性,又具有开源数据库的简单性和成本效益。正可谓才华与美貌集于一身。
3.2 Amazon Aurora Serverless
大家好,我叫Amazon Aurora Serverless,看着名字就知道我跟我哥Amazon Aurora的关系了吧,我只比我哥多了一个Serverless。我是一种针对 Amazon Aurora(MySQL 兼容版和 PostgreSQL 兼容版)的按需自动扩展配置,其中,数据库将根据您的应用程序需求来自动启动、关闭以及扩展或缩减。我可以让您可以在云中运行数据库,而无需管理任何数据库实例。我是一种简单且更具成本效益的选择,我适用于不频繁的、间歇性的或不可预测的工作负载。
3.3 Aws Lambda
此时,Aws Lambda正在一旁嘀咕着,终于等到我登场了。大家好,我叫AWS Lambda,我是一项无服务器事件驱动型计算服务,也就是说我需要触发器来触发我,我才能工作。我可以让您运行几乎任何类型的应用程序或者后端服务代码,而无需预置或者管理服务器。看到没有,我才是本文的核心。我可以创建事件驱动型应用程序,也可以运行交互式Web和移动后端。
3.4 Amazon SNS
大家好,我的全名叫Amazon Simple Notification Service,你们可以简称我叫Amazon SNS,我是一项用于应用与应用之间(A2A)以及应用与人之间(A2P)通信的完全托管型消息收发服务。
其中:A2A发布/订阅功能为分布式系统、微服务和事件驱动型无服务器应用程序之间的高吞吐量、基于推送的多对多消息传递提供主题。借助 Amazon SNS 主题,发布系统可以向大量订阅系统(包括 Amazon SQS 队列、AWS Lambda 函数、HTTP/S 终端节点和 Amazon Kinesis Data Firehose)发出消息,从而实现并行处理。
使用我的A2P功能,您可以通过 SMS、移动推送和电子邮件将消息大规模发送给其他人。
3.5 Amazon Cloud9
呆坐在角落的Amazon Cloud9这时候都有点坐不住了。兄弟们一个个都介绍完了,还没轮到我,不开森!!!转念一想,自己是压轴登场的,顿时又开心起来了。
我Amazon Cloud9是一种基于云的集成开发环境,小名叫做IDE。我集成了Python、PHP、JavaScript等常用编程语言的基本工具,也就是说通过我,你可以编写这些语言的程序。在本次实践之旅中,我充当的角色依然是开发工具。
4. 实践之旅
经过上面的介绍,相信大家对我们兄弟几个都已经有所了解。接下来就是要回到本文的主题上了,下面将一步步介绍如何使用Amazon Aurora Serverless构建无服务器应用程序。整体分为如下几大步骤:
如果你还没有AWS的账户,请先新建一个AWS账户哦。
- 创建Aurora Serverless数据库
首先就需要创建一个Aurora Serverless数据库,这是因为最终应用程序需要将数据写入到该数据库。
- 创建AWS Cloud9环境
AWS Cloud9可以让你在线编写、运行和调试代码。为后面创建Lambda函数并在上面修改代码做准备。
- 创建AWS Lambda函数
这一步就是在第二步创建的Cloud9环境中,创建Lambda 函数。
- 配置权限
需要为第三步创建的Lambda函数配置权限,只有给Lambda函数配置了操作Aurora Serverless数据库的权限,它才能操作Aurora Serverless数据库。
- 创建Amazon SNS主题
Amazon Simple Notification Service (SNS) 作为Lambda的消息触发器,由它来给Lambda函数发送消息。
- 向Amazon SNS主题订阅AWS Lambda函数
这一步的主要目的就是将Amazon SNS设置为AWS Lambda函数的触发器,为后面SNS 发布消息触发Lambda函数做准备。
- 发布测试消息
这一步就是发布测试消息验证一下SNS能否触发Lambda函数执行,之后通过查看数据库的数据得到验证结果。
- 清理
如果你不在需要Aurora DB集群时请将其删除哦,当然在这一步你也可以清理Lambda函数等,因为不删除的话可能会产生不必要的费用。
4.1 注册Amazon账号
如果您已经有了一个Amazon账号,则可以忽略此步骤。如果还没有AWS账号的话则需要先注册一个AWS账号。新建一个Amazon账户
注册AWS账号一共有五个步骤,前两个步骤都比较简单,只需要输入可用的手机号和邮箱等必要信息即可进行。但是第三步的话
需要输入一个可用的信用卡账号,而且这信用卡还是必须是VISA等国外的信用卡,这对我们国内的兄弟就不太友好了。解决办法就是到某宝花个几十块钱买个VISA卡。信用卡的问题解决了,后面第四,第五步就简单了,在此不再赘述了。
**4.2 创建 Aurora Serverless **数据库
4.2.1 首先,需要选择启用的数据库集群的区域
默认的区域就是 美国东部(弗吉尼亚北部)us-east-1。我们这边选择一个在中国访问较快的亚马逊云海外区域,这里以新加坡为例,在网页右上角切换区域到新加坡,然后在“Amazon Aurora”窗口中单击“创建数据库”。
4.2.2 修改容器类型&设置数据库名称
我们在创建数据库的页面首先需要修改的是容器类型,要将容器类型改成 无服务器,然后给数据库集群起个名字,这里起名“database-2”。其他信息可以按照默认设置。
4.2.3 设置数据库的用户名和密码
接着在凭证设置模块中设置用户名和密码,这里需要保存下设置的用户名和密码。
4.2.4 在连接这一块勾选数据API。
4.2.5 设置最大Aurora容量
这里将最大Aurora容量单位设置为2ACU,你可以从经济和需求角度进行合理设置。
其他的信息可以使用默认的设置,设置完成之后点击右下方的“创建数据库”
4.2.6 连接数据库
单击左侧导航栏的 “查询编辑器”按钮
在查询编辑器的弹框中选择数据库实例,并输入数据库的用户名和密码,接着单击“连接到数据库”。
4.2.7 在查询编辑器窗口运行 CREATE DATABASE tutorial; 语句创建一个名为 tutorial 的数据库
创建完成之后,单击“更改数据库”,将数据库更改为您刚刚创建的数据库。
4.2.8 使用如下语句创建名为 sample_table 的数据表:
CREATE TABLE sample_table(received_at TIMESTAMP, message VARCHAR(255));
通过使用查询编辑器连接到数据库,系统会创建一个密钥,供后续在Lambda函数中使用。暂时不要关闭此选项卡。
4.2.9 复制密钥ARN
新开一个窗口,跳转到 AWS Secrets Manager 控制台。在密钥列表找到数据库 database-2的密钥,单击密钥名称后,复制密钥 ARN 并将其存放在随时可以找到的位置。
至此创建数据库Aurora Serverless 数据库的工作全部完成。
*4.3 创建Amazon Cloud9*环境
打开一个新窗口,跳转到 Amazon Cloud9控制台。
4.3.1 单击“创建环境”,输入新环境的名称,然后单击“下一步”。
4.3.2 禁用AWS Toolkit
4.3.3 创建Lambda函数
然后在Go to Anything 搜索框中Lambda,在搜索的结果中选择 General:LambdaCreateFunction 命令,创建Lambda函数。
4.3.4 输入Lambda函数名称
在Create serverless application 的弹框中输入Lambda函数名称:auroratest
点击 “Next”按钮进入下一步
4.3.5 选择empty-python 蓝图
接下来的步骤就是一直点击下一步,直到Lambda 函数的蓝图。
**4.4 **配置权限
4.4.1 单击“角色”,然后搜索以“auroratest”开头的角色,新开一个标签页,搜索进入IAM服务
4.4.2 单击角色名称,然后单击“附加策略”。选择“AmazonRDSDataFullAccess”策略,然后单击“附加策略”。
*4.5 创建Lambda*函数
返回到第4.3步创建的Cloud9 环境,然后按照下面的说明执行操作。
4.5.1 在控制台中运行以下命令,以转到 auroratest 目录:$ cd auroratest
4.5.2 在控制台中运行以下命令,以安装 boto3 依赖项: $ pip install boto3 -t boto3
4.5.3 删除 lambda_function 文件中的代码,并在其位置复制此 示例代码。
4.5.4 将 cluster_arn 和 secret_arn 值替换为之前步骤中获得的集群 ARN 和密钥 ARN 值。
4.5.5 单击“文件”>“保存”,然后在右侧面板中选择 Lambda 函数。
4.5.6 单击向上箭头部署 Lambda 函数。
*4.6 创建Amazon SNS*主题
Lambda 函数将处理来自 Amazon Simple Notification Service (SNS) 的消息,该服务为微服务和无服务器应用程序提供发布/订阅消息传递。
4.6.1 保留所有默认值,然后单击“创建主题”。
*4.7 向Amazon SNS主题订阅AWS Lambda*函数
4.7.1 在前面步骤中创建的Lambda函数的名称。
4.7.2 单击添加触发器
**4.8 **发布测试消息
单击“创建主题”,输入主题和内容。点击发布即可。
**4.9 **验证结果
消息发布之后,数据可以顺利的落到tutorial数据库的sample_table表中。
5. 遇到的问题以及解决方案(遇到问题不要慌)
官方文档最新的更新时间是截止到2019年,此时,与软件的实际操作略有出入。故遇到不同的地方不要慌,耐心分析。
5.1 问题一、 AWS Cloud9环境用Toolkit工具替换了Lambda工具。直接创建Lambda函数就比较麻烦。
解决方案:禁用Toolkit工具。
5.2 创建lambda函数失败
创建lambda函数时可能会报如下错误。
这是由于python3.6不存在
6. 优势与不足
通过Amazon Aurora Serverless 构建无服务器应用程序的优势非常明显。我认为有如下几点优势:
6.1 全栈的解决方案,更轻松地构建更好的应用程序
整个流程全部可以通过AWS体系下的产品来实现,无需外部的工具介入。
应用程序的创建----> 应用程序的编码 ----> 应用程序的运行 ----> 数据存储 ----> 应用程序的管理
整个流程都可以通过AWS平台上通过AWS的各个产品相互配合来完成。不需要额外的安装其他的软件,工具,更可以直接在线编程。大大节约了客户时间,是客户专属于应用软件本身。
6.2 按需使用,按需计费,降低成本
AWS采取的是使用按价值计费模式,会自动优化资源的利用率,比如说你申请的最大Aurora容量为 64 ACU,但是你的应用程序只用到了2ACU,那么就只按2ACU来计费。
6.3 大规模采用,面对高并发应对自如
凭借AWS强大的软硬件支持,当你的应用程序的用户量,调用量爆发性增长时,你不需要自己增加服务器,进行性能优化。
对比
无服务器部署
普通服务器部署
安全性
安全可靠,AWS强大的安全保障策略为应用程序保驾护航
需要专门的运维人员指定安全策略
部署便捷性
部署简单方便,一站式的部署策略
部署麻烦需要安装各种依赖软件
硬件
不需要专门采购服务器,面对性能瓶颈支持弹性伸缩
需要专门采购服务器,不能做到按需使用,不能弹性伸缩
成本
成本低,按使用计费,不需要配置专门的运维人员
成本高,需要配置专门的硬件和运维人员
当然,不足之处也是有的,Amazon在文档本地化方面还可以做的更好。
7. 总结心得
使用Amazon Aurora Serverless构建无服务器应用程序的整个流程还是比较简单的。官方的操作文档也非常的详细。整个使用过程也比较顺畅。在此有几点心得体会想跟分享下。
7.1 构建部署之前先通览一遍说明文档。
因为整个部署的流程涉及到多个产品组件,涉及到很多配置。通览文档好处就是心中有个整体印象。通览的过程中可以将核心的步骤做一个记号。比如在本次构建中就多次需要使用到密钥ARN,所以,在设置完密钥之后可以通过一个单独的文本文档记录下来。通览说明文档避免了盲人摸象的困境。
7.2 构建部署之前先简单了解下各个产品
了解本次构建部署所涉及到的各个产品,了解各个产品的目的是让自己明白每个产品的作用
7.3 遇到问题不要慌
在部署构建过程中难免会遇到这样那样的问题,遇到问题的时候不要慌,也不用着急去百度。首先从官方文档中去寻找答案,实在寻找不到答案,再去百度或者找客服。
最后,作者感谢各位小伙伴的耐心阅读,如果你觉得不错的话,还请您不吝亲亲的点个赞,分享给其他需要的朋友。您的鼓励是我前行的最大动力。
版权归原作者 码农飞哥 所有, 如有侵权,请联系我们删除。