开箱-10分钟学会使用 Amazon Aurora Serverless构建无服务器应用程序

Posted 码农飞哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开箱-10分钟学会使用 Amazon Aurora Serverless构建无服务器应用程序相关的知识,希望对你有一定的参考价值。

官方操作手册地址:使用 Amazon Aurora Serverless构建无服务器应用程序

1. 摘要

初看标题中【快速构建无服务器应用程序】,您是否大吃一惊呢?没有服务器怎么运行应用程序呢?没有服务器怎么操作应用程序呢?这么好用的东西该如何使用呢?是不是收费呀?无数的问号从脑海中浮现而过。码农飞哥将在本文中为您一一解答。现在你需要做的就是带着好奇心开启本文的阅读之旅。

2.背景说明

不知不觉中,我们已经进入了云计算时代,数据上云,应用上云。Amazon作为云计算时代的先行者与领导者,早在2006年就推出了AWS(Amazon Web Service)产品,它以Web服务的形式向企业提供IT基础设施服务,这些IT基础设施服务包括业务应用程序部署,存储服务 ,数据分析,容器,应用程序集成,开发工具,数据库服务,云计算等等。本文构建无服务器应用程序就需要涉及到旗下的Amazon Aurora,Amazon SNSAWS LambdaAmazon Aurora Serverless这几款产品。

3. 认识新面孔

小伙伴们可能对前面提到的Amazon Aurora,Amazon SNSAWS LambdaAmazon Aurora ServerlessAmazon 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、phpjavascript等常用编程语言的基本工具,也就是说通过我,你可以编写这些语言的程序。在本次实践之旅中,我充当的角色依然是开发工具。

4. 实践之旅

经过上面的介绍,相信大家对我们兄弟几个都已经有所了解。接下来就是要回到本文的主题上了,下面将一步步介绍如何使用Amazon Aurora Serverless构建无服务器应用程序。整体分为如下几大步骤:

如果你还没有AWS的账户,请先新建一个AWS账户哦。

1. 创建Aurora Serverless数据库

首先就需要创建一个Aurora Serverless数据库,这是因为最终应用程序需要将数据写入到该数据库。

2. 创建AWS Cloud9环境

AWS Cloud9可以让你在线编写、运行和调试代码。为后面创建Lambda函数并在上面修改代码做准备。

3. 创建AWS Lambda函数

这一步就是在第二步创建的Cloud9环境中,创建Lambda 函数。

4. 配置权限

需要为第三步创建的Lambda函数配置权限,只有给Lambda函数配置了操作Aurora Serverless数据库的权限,它才能操作Aurora Serverless数据库。

5. 创建Amazon SNS主题

Amazon Simple Notification Service (SNS) 作为Lambda的消息触发器,由它来给Lambda函数发送消息。

6. 向Amazon SNS主题订阅AWS Lambda函数

这一步的主要目的就是将Amazon SNS设置为AWS Lambda函数的触发器,为后面SNS 发布消息触发Lambda函数做准备。

7. 发布测试消息

这一步就是发布测试消息验证一下SNS能否触发Lambda函数执行,之后通过查看数据库的数据得到验证结果。

8. 清理

如果你不在需要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 遇到问题不要慌

在部署构建过程中难免会遇到这样那样的问题,遇到问题的时候不要慌,也不用着急去百度。首先从官方文档中去寻找答案,实在寻找不到答案,再去百度或者找客服。

  最后,作者感谢各位小伙伴的耐心阅读,如果你觉得不错的话,还请您不吝亲亲的点个赞,分享给其他需要的朋友。您的鼓励是我前行的最大动力。

以上是关于开箱-10分钟学会使用 Amazon Aurora Serverless构建无服务器应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Amazon Aurora DB 中的 character_set_server?

Elastic Beanstalk 是不是支持 Amazon 的 Aurora DB?

使用 SQLAlchemy 连接到 Amazon Aurora

是否可以从 Amazon Aurora 迁移回 Amazon RDS 中的原生 MySQL?

使用MySQL Workbench连接到Amazon Aurora时出错

如何使用 cloudformation 模板创建 Amazon RDS aurora Master 和只读副本集群