{"value":"官方操作手册地址:[使用 Amazon Aurora Serverless 构建无服务器应用程序](https://aws.amazon.com/cn/getting-started/hands-on/building-serverless-applications-with-amazon-aurora-serverless/?trk=85ada206-153d-46d1-888a-198457242df8&sc_channel=el#)\n\n### **1. 摘要**\n初看标题中【快速构建无服务器应用程序】,您是否大吃一惊呢?没有服务器怎么运行应用程序呢?没有服务器怎么操作应用程序呢?这么好用的东西该如何使用呢?是不是收费呀?无数的问号从脑海中浮现而过。码农飞哥将在本文中为您一一解答。现在你需要做的就是带着好奇心开启本文的阅读之旅。\n### **2. 背景说明**\n不知不觉中,我们已经进入了云计算时代,数据上云,应用上云。Amazon作为云计算时代的先行者与领导者,早在2006年就推出了 Amazon (Amazon Web Service)产品,它以Web服务的形式向企业提供IT基础设施服务,这些IT基础设施服务包括业务应用程序部署,存储服务 ,数据分析,容器,应用程序集成,开发工具,数据库服务,云计算等等。本文构建无服务器应用程序就需要涉及到旗下的Amazon Aurora,Amazon SNS, Amazon Lambda,Amazon Aurora Serverless这几款产品。\n### **3. 认识新面孔**\n小伙伴们可能对前面提到的Amazon Aurora,Amazon SNS, Amazon Lambda,Amazon Aurora Serverless,Amazon Cloud9产品还很陌生。下面就让他们隆重登场,跟大家见个面,来个自我介绍。\n#### **3.1 Amazon Aurora**\n大家好,我叫Amazon Aurora。请原谅我莫得中文名,因为我来自美丽国。我是一个可以兼容MySQL和PostgreSQL的关系数据库。使用这两款数据库的小伙伴来使用我的话不会有丝毫的陌生感哦。我既具有传统企业数据库的性能和可用性,又具有开源数据库的简单性和成本效益。正可谓才华与美貌集于一身。\n#### **3.2 Amazon Aurora Serverless**\n大家好,我叫Amazon Aurora Serverless,看着名字就知道我跟我哥Amazon Aurora的关系了吧,我只比我哥多了一个Serverless。我是一种针对 Amazon Aurora(MySQL 兼容版和 PostgreSQL 兼容版)的按需自动扩展配置,其中,数据库将根据您的应用程序需求来自动启动、关闭以及扩展或缩减。我可以让您可以在云中运行数据库,而无需管理任何数据库实例。我是一种简单且更具成本效益的选择,我适用于不频繁的、间歇性的或不可预测的工作负载。\n#### **3.3 Amazon Lambda**\n此时, Amazon Lambda正在一旁嘀咕着,终于等到我登场了。大家好,我叫 Amazon Lambda,我是一项无服务器事件驱动型计算服务,也就是说我需要触发器来触发我,我才能工作。我可以让您运行几乎任何类型的应用程序或者后端服务代码,而无需预置或者管理服务器。看到没有,我才是本文的核心。我可以创建事件驱动型应用程序,也可以运行交互式Web和移动后端。\n#### **3.4 Amazon SNS**\n大家好,我的全名叫Amazon Simple Notification Service,你们可以简称我叫Amazon SNS,我是一项用于应用与应用之间(A2A)以及应用与人之间(A2P)通信的完全托管型消息收发服务。\n其中:A2A发布/订阅功能为分布式系统、微服务和事件驱动型无服务器应用程序之间的高吞吐量、基于推送的多对多消息传递提供主题。借助 Amazon SNS 主题,发布系统可以向大量订阅系统(包括 Amazon SQS 队列、 Amazon Lambda 函数、HTTP/S 终端节点和 Amazon Kinesis Data Firehose)发出消息,从而实现并行处理。\n使用我的A2P功能,您可以通过 SMS、移动推送和电子邮件将消息大规模发送给其他人。\n#### **3.5 Amazon Cloud9**\n呆坐在角落的Amazon Cloud9这时候都有点坐不住了。兄弟们一个个都介绍完了,还没轮到我,不开森!!!转念一想,自己是压轴登场的,顿时又开心起来了。\n我Amazon Cloud9是一种基于云的集成开发环境,小名叫做IDE。我集成了Python、PHP、JavaScript等常用编程语言的基本工具,也就是说通过我,你可以编写这些语言的程序。在本次实践之旅中,我充当的角色依然是开发工具。\n### **4. 实践之旅**\n经过上面的介绍,相信大家对我们兄弟几个都已经有所了解。接下来就是要回到本文的主题上了,下面将一步步介绍如何使用Amazon Aurora Serverless构建无服务器应用程序。整体分为如下几大步骤:\n如果你还没有 Amazon 的账户,请先[新建一个 Amazon 账户](https://portal.aws.amazon.com/billing/signup)哦。\n1. 创建Aurora Serverless数据库\n首先就需要创建一个Aurora Serverless数据库,这是因为最终应用程序需要将数据写入到该数据库。\n2. 创建 Amazon Cloud9环境\n Amazon Cloud9可以让你在线编写、运行和调试代码。为后面创建Lambda函数并在上面修改代码做准备。\n3. 创建 Amazon Lambda函数\n这一步就是在第二步创建的Cloud9环境中,创建Lambda 函数。\n4. 配置权限\n需要为第三步创建的Lambda函数配置权限,只有给Lambda函数配置了操作Aurora Serverless数据库的权限,它才能操作Aurora Serverless数据库。\n5. 创建Amazon SNS主题\nAmazon Simple Notification Service (SNS) 作为Lambda的消息触发器,由它来给Lambda函数发送消息。\n6. 向Amazon SNS主题订阅 Amazon Lambda函数\n这一步的主要目的就是将Amazon SNS设置为 Amazon Lambda函数的触发器,为后面SNS 发布消息触发Lambda函数做准备。\n7. 发布测试消息\n这一步就是发布测试消息验证一下SNS能否触发Lambda函数执行,之后通过查看数据库的数据得到验证结果。\n8. 清理\n如果你不在需要Aurora DB集群时请将其删除哦,当然在这一步你也可以清理Lambda函数等,因为不删除的话可能会产生不必要的费用。\n#### **4.1 注册Amazon账号**\n如果您已经有了一个Amazon账号,则可以忽略此步骤。如果还没有 Amazon 账号的话则需要先注册一个 Amazon 账号。[新建一个Amazon账户](https://portal.aws.amazon.com/billing/signup) \n\n![image.png](https://dev-media.amazoncloud.cn/a2b606cfbbeb4798bcfdec564dd8e564_image.png)\n\n注册 Amazon 账号一共有五个步骤,前两个步骤都比较简单,只需要输入可用的手机号和邮箱等必要信息即可进行。但是第三步的话\n\n![image.png](https://dev-media.amazoncloud.cn/398ad75f842f4c4dbf489fc2b80400c8_image.png)\n\n需要输入一个可用的信用卡账号,而且这信用卡还是必须是VISA等国外的信用卡,这对我们国内的兄弟就不太友好了。**解决办法就是到某宝花个几十块钱买个VISA卡**。信用卡的问题解决了,后面第四,第五步就简单了,在此不再赘述了。\n\n#### **4.2 创建 Aurora Serverless 数据库**\n4.2.1 首先,需要选择启用的数据库集群的区域\n默认的区域就是 美国东部(弗吉尼亚北部)us-east-1。我们这边选择一个在中国访问较快的亚马逊云海外区域,这里以新加坡为例,在网页右上角切换区域到新加坡,然后在“Amazon Aurora”窗口中单击“创建数据库”。\n\n![image.png](https://dev-media.amazoncloud.cn/a1778d2fd7444422a5e1e85f2732eb26_image.png)\n\n4.2.2 修改容器类型&设置数据库名称\n我们在创建数据库的页面首先需要修改的是容器类型,要将容器类型改成 无服务器,然后给数据库集群起个名字,这里起名“database-2”。其他信息可以按照默认设置。\n\n![image.png](https://dev-media.amazoncloud.cn/2e4a2e49e40047f2aa0d252b219d047f_image.png)\n\n4.2.3 设置数据库的用户名和密码\n接着在凭证设置模块中设置用户名和密码,这里需要保存下设置的用户名和密码。\n\n![image.png](https://dev-media.amazoncloud.cn/a9268ce209f74213a3e82139e9f4b1d9_image.png)\n\n4.2.4 在连接这一块勾选数据API。\n\n![image.png](https://dev-media.amazoncloud.cn/81c472a735a5424a8648ef988794dda5_image.png)\n\n4.2.5 设置最大Aurora容量\n这里将最大Aurora容量单位设置为2ACU,你可以从经济和需求角度进行合理设置。\n\n![image.png](https://dev-media.amazoncloud.cn/eb0dc1e7cc984e9696489522ca44caf7_image.png)\n\n其他的信息可以使用默认的设置,设置完成之后点击右下方的“创建数据库”\n\n![image.png](https://dev-media.amazoncloud.cn/eb46cde1c22d41a5a4057f422144bd01_image.png)\n\n4.2.6 连接数据库\n单击左侧导航栏的 “查询编辑器”按钮\n\n![image.png](https://dev-media.amazoncloud.cn/b00d315d3dff4fff8e8b117699a322c3_image.png)\n\n在查询编辑器的弹框中选择数据库实例,并输入数据库的用户名和密码,接着单击“连接到数据库”。\n\n![image.png](https://dev-media.amazoncloud.cn/57c8f0829dff414a938143603545cc44_image.png)\n\n4.2.7 在查询编辑器窗口运行 CREATE DATABASE tutorial; 语句创建一个名为 tutorial 的数据库\n\n![image.png](https://dev-media.amazoncloud.cn/7a7c5ed8aed846538cf90c9f8216c1f9_image.png)\n\n创建完成之后,单击“更改数据库”,将数据库更改为您刚刚创建的数据库。\n\n![image.png](https://dev-media.amazoncloud.cn/ee9917b9786e49418096c7baf7d957f8_image.png)\n\n4.2.8 使用如下语句创建名为 sample_table 的数据表:\nCREATE TABLE sample_table(received_at TIMESTAMP, message VARCHAR(255));\n通过使用查询编辑器连接到数据库,系统会创建一个密钥,供后续在Lambda函数中使用。暂时不要关闭此选项卡。\n4.2.9 复制密钥ARN\n新开一个窗口,跳转到 [AWS Secrets Manager](https://ap-southeast-1.console.aws.amazon.com/secretsmanager/home?region=ap-southeast-1) 控制台。在密钥列表找到数据库 database-2的密钥,单击密钥名称后,复制密钥 ARN 并将其存放在随时可以找到的位置。\n\n![image.png](https://dev-media.amazoncloud.cn/bc9e5b08cb254ce79662dede0aa8119d_image.png)\n![image.png](https://dev-media.amazoncloud.cn/5840d9079a774f3caf70aa63c38f875f_image.png)\n\n至此创建数据库Aurora Serverless 数据库的工作全部完成。\n#### **4.3 创建Amazon Cloud9环境**\n打开一个新窗口,跳转到 [Amazon Cloud9控制台](https://ap-southeast-1.console.aws.amazon.com/cloud9/home/product)。\n4.3.1 单击“创建环境”,输入新环境的名称,然后单击“下一步”。\n\n![image.png](https://dev-media.amazoncloud.cn/50e41f3e30ea46da94390c7d08fa8861_image.png)\n![image.png](https://dev-media.amazoncloud.cn/713bfe1d504e4fe981c7fa3a082ae0a9_image.png)\n\n4.3.2 禁用AWS Toolkit\n\n![image.png](https://dev-media.amazoncloud.cn/404a2303c2e6439b983a8c071b02105a_image.png)\n\n4.3.3 创建Lambda函数\n然后在Go to Anything 搜索框中Lambda,在搜索的结果中选择 General:LambdaCreateFunction 命令,创建Lambda函数。\n\n![image.png](https://dev-media.amazoncloud.cn/571380206b144645bcd6d793ca08d77d_image.png)\n\n4.3.4 输入Lambda函数名称\n在Create serverless application 的弹框中输入Lambda函数名称:auroratest\n\n![image.png](https://dev-media.amazoncloud.cn/6e74b2acb34c493cbc249627aba61ed9_image.png)\n\n点击 “Next”按钮进入下一步\n4.3.5 选择empty-python 蓝图\n\n![image.png](https://dev-media.amazoncloud.cn/79b8c244428d4e0fb1bc2bd70f73a13e_image.png)\n\n接下来的步骤就是一直点击下一步,直到Lambda 函数的蓝图。\n\n![image.png](https://dev-media.amazoncloud.cn/c73fe860eca24c35854ae20a2d64f519_image.png)\n\n#### **4.4 配置权限**\n4.4.1 单击“角色”,然后搜索以“auroratest”开头的角色,新开一个标签页,搜索进入IAM服务\n\n![image.png](https://dev-media.amazoncloud.cn/d6fc5a0b3d4d49dd900d4085d874e914_image.png)\n\n4.4.2 单击角色名称,然后单击“附加策略”。选择“AmazonRDSDataFullAccess”策略,然后单击“附加策略”。\n\n![image.png](https://dev-media.amazoncloud.cn/61a57c7b988b4dcabc424184a62ace50_image.png)\n\n#### **4.5 创建Lambda函数**\n返回到第4.3步创建的Cloud9 环境,然后按照下面的说明执行操作。\n4.5.1 在控制台中运行以下命令,以转到 auroratest 目录: $ cd auroratest\n\n![image.png](https://dev-media.amazoncloud.cn/cf860aad383b4afa8bfe21e725144a89_image.png)\n\n4.5.2 在控制台中运行以下命令,以安装 boto3 依赖项: $ pip install boto3 -t boto3\n\n![image.png](https://dev-media.amazoncloud.cn/4ba40161b989430f83602e0461968898_image.png)\n\n4.5.3 删除 lambda_function 文件中的代码,并在其位置复制此 [示例代码](https://github.com/aws-samples/amazon-rds-data-api-demo/blob/master/src/main/python/lambda_function_postgres.py)。\n\n![image.png](https://dev-media.amazoncloud.cn/52716857dc3946fbb8c287eaaf2b5215_image.png)\n\n4.5.4 将 cluster_arn 和 secret_arn 值替换为之前步骤中获得的集群 ARN 和密钥 ARN 值。\n\n![image.png](https://dev-media.amazoncloud.cn/6fd981a582474715bca2b29e853a6b8e_image.png)\n\n4.5.5 单击“文件”>“保存”,然后在右侧面板中选择 Lambda 函数。\n\n![image.png](https://dev-media.amazoncloud.cn/f53e5a8683b4441da67e67e9885abac4_image.png)\n\n4.5.6 单击向上箭头部署 Lambda 函数。\n\n![image.png](https://dev-media.amazoncloud.cn/1fc34f49cafa41538967ce7151140594_image.png)\n\n#### **4.6 创建Amazon SNS主题**\nLambda 函数将处理来自 Amazon Simple Notification Service (SNS) 的消息,该服务为微服务和无服务器应用程序提供发布/订阅消息传递。\n\n![image.png](https://dev-media.amazoncloud.cn/237895826b224a6599b44bfe9c625169_image.png)\n\n4.6.1 保留所有默认值,然后单击“创建主题”。\n\n![image.png](https://dev-media.amazoncloud.cn/6c8bdb3b7ae6441dbfe83bc435c76e45_image.png)\n\n#### **4.7 向Amazon SNS主题订阅AWS Lambda函数**\n4.7.1 在前面步骤中创建的Lambda函数的名称。\n\n![image.png](https://dev-media.amazoncloud.cn/69fb7a9e3e324b09baabd402496a5fc9_image.png)\n\n4.7.2 单击添加触发器\n\n![image.png](https://dev-media.amazoncloud.cn/801d01a144bd407bbcd15bdcc04d70ed_image.png)\n\n#### **4.8 发布测试消息**\n单击“创建主题”,输入主题和内容。点击发布即可。\n\n![image.png](https://dev-media.amazoncloud.cn/20183090d3f841089d3996df1f2304bc_image.png)\n\n#### **4.9 验证结果**\n消息发布之后,数据可以顺利的落到tutorial数据库的sample_table表中。\n### **5. 遇到的问题以及解决方案(遇到问题不要慌)**\n官方文档最新的更新时间是截止到2019年,此时,与软件的实际操作略有出入。故遇到不同的地方不要慌,耐心分析。\n5.1 问题一、 Amazon Cloud9环境用Toolkit工具替换了Lambda工具。直接创建Lambda函数就比较麻烦。\n解决方案:禁用Toolkit工具。\n\n![image.png](https://dev-media.amazoncloud.cn/0ba026d49ad246018d7754f408926737_image.png)\n\n5.2 创建lambda函数失败\n创建lambda函数时可能会报如下错误。\n\n![image.png](https://dev-media.amazoncloud.cn/38eaba72bd2e4c0086467dee104a3cd2_image.png)\n\n这是由于python3.6不存在\n\n![image.png](https://dev-media.amazoncloud.cn/3aad69372f1c4c088fcced48afa3a990_image.png)\n\n### **6. 优势与不足**\n通过 Amazon Aurora Serverless 构建无服务器应用程序的优势非常明显。我认为有如下几点优势:\n6.1 全栈的解决方案,更轻松地构建更好的应用程序\n整个流程全部可以通过 Amazon 体系下的产品来实现,无需外部的工具介入。\n应用程序的创建----> 应用程序的编码 ----> 应用程序的运行 ----> 数据存储 ----> 应用程序的管理\n整个流程都可以通过 Amazon 平台上通过 Amazon 的各个产品相互配合来完成。不需要额外的安装其他的软件,工具,更可以直接在线编程。大大节约了客户时间,是客户专属于应用软件本身。\n6.2 按需使用,按需计费,降低成本\n Amazon 采取的是使用按价值计费模式,会自动优化资源的利用率,比如说你申请的最大 Aurora 容量为 64 ACU,但是你的应用程序只用到了2ACU,那么就只按2ACU来计费。\n6.3 大规模采用,面对高并发应对自如\n凭借 Amazon 强大的软硬件支持,当你的应用程序的用户量,调用量爆发性增长时,你不需要自己增加服务器,进行性能优化。\n\n![image.png](https://dev-media.amazoncloud.cn/4e0f6faebabb4665aed1ed5d24ede111_image.png)\n\n当然,不足之处也是有的,Amazon在文档本地化方面还可以做的更好。\n\n### **7. 总结心得**\n使用 Amazon Aurora Serverless构建无服务器应用程序的整个流程还是比较简单的。官方的操作文档也非常的详细。整个使用过程也比较顺畅。在此有几点心得体会想跟分享下。\n7.1 构建部署之前先通览一遍说明文档。\n因为整个部署的流程涉及到多个产品组件,涉及到很多配置。通览文档好处就是心中有个整体印象。通览的过程中可以将核心的步骤做一个记号。比如在本次构建中就多次需要使用到密钥 ARN,所以,在设置完密钥之后可以通过一个单独的文本文档记录下来。通览说明文档避免了盲人摸象的困境。\n7.2 构建部署之前先简单了解下各个产品\n了解本次构建部署所涉及到的各个产品,了解各个产品的目的是让自己明白每个产品的作用\n7.3 遇到问题不要慌\n在部署构建过程中难免会遇到这样那样的问题,遇到问题的时候不要慌,也不用着急去百度。首先从官方文档中去寻找答案,实在寻找不到答案,再去百度或者找客服。\n 最后,作者感谢各位小伙伴的耐心阅读,如果你觉得不错的话,还请您不吝轻轻的点个赞,分享给其他需要的朋友。您的鼓励是我前行的最大动力。","render":"<p>官方操作手册地址:<a href=\"https://aws.amazon.com/cn/getting-started/hands-on/building-serverless-applications-with-amazon-aurora-serverless/?trk=85ada206-153d-46d1-888a-198457242df8&sc_channel=el#\" target=\"_blank\">使用 Amazon Aurora Serverless 构建无服务器应用程序</a></p>\n<h3><a id=\"1__2\"></a><strong>1. 摘要</strong></h3>\n<p>初看标题中【快速构建无服务器应用程序】,您是否大吃一惊呢?没有服务器怎么运行应用程序呢?没有服务器怎么操作应用程序呢?这么好用的东西该如何使用呢?是不是收费呀?无数的问号从脑海中浮现而过。码农飞哥将在本文中为您一一解答。现在你需要做的就是带着好奇心开启本文的阅读之旅。</p>\n<h3><a id=\"2__4\"></a><strong>2. 背景说明</strong></h3>\n<p>不知不觉中,我们已经进入了云计算时代,数据上云,应用上云。Amazon作为云计算时代的先行者与领导者,早在2006年就推出了 Amazon (Amazon Web Service)产品,它以Web服务的形式向企业提供IT基础设施服务,这些IT基础设施服务包括业务应用程序部署,存储服务 ,数据分析,容器,应用程序集成,开发工具,数据库服务,云计算等等。本文构建无服务器应用程序就需要涉及到旗下的Amazon Aurora,Amazon SNS, Amazon Lambda,Amazon Aurora Serverless这几款产品。</p>\n<h3><a id=\"3__6\"></a><strong>3. 认识新面孔</strong></h3>\n<p>小伙伴们可能对前面提到的Amazon Aurora,Amazon SNS, Amazon Lambda,Amazon Aurora Serverless,Amazon Cloud9产品还很陌生。下面就让他们隆重登场,跟大家见个面,来个自我介绍。</p>\n<h4><a id=\"31_Amazon_Aurora_8\"></a><strong>3.1 Amazon Aurora</strong></h4>\n<p>大家好,我叫Amazon Aurora。请原谅我莫得中文名,因为我来自美丽国。我是一个可以兼容MySQL和PostgreSQL的关系数据库。使用这两款数据库的小伙伴来使用我的话不会有丝毫的陌生感哦。我既具有传统企业数据库的性能和可用性,又具有开源数据库的简单性和成本效益。正可谓才华与美貌集于一身。</p>\n<h4><a id=\"32_Amazon_Aurora_Serverless_10\"></a><strong>3.2 Amazon Aurora Serverless</strong></h4>\n<p>大家好,我叫Amazon Aurora Serverless,看着名字就知道我跟我哥Amazon Aurora的关系了吧,我只比我哥多了一个Serverless。我是一种针对 Amazon Aurora(MySQL 兼容版和 PostgreSQL 兼容版)的按需自动扩展配置,其中,数据库将根据您的应用程序需求来自动启动、关闭以及扩展或缩减。我可以让您可以在云中运行数据库,而无需管理任何数据库实例。我是一种简单且更具成本效益的选择,我适用于不频繁的、间歇性的或不可预测的工作负载。</p>\n<h4><a id=\"33__Amazon_Lambda_12\"></a><strong>3.3 Amazon Lambda</strong></h4>\n<p>此时, Amazon Lambda正在一旁嘀咕着,终于等到我登场了。大家好,我叫 Amazon Lambda,我是一项无服务器事件驱动型计算服务,也就是说我需要触发器来触发我,我才能工作。我可以让您运行几乎任何类型的应用程序或者后端服务代码,而无需预置或者管理服务器。看到没有,我才是本文的核心。我可以创建事件驱动型应用程序,也可以运行交互式Web和移动后端。</p>\n<h4><a id=\"34_Amazon_SNS_14\"></a><strong>3.4 Amazon SNS</strong></h4>\n<p>大家好,我的全名叫Amazon Simple Notification Service,你们可以简称我叫Amazon SNS,我是一项用于应用与应用之间(A2A)以及应用与人之间(A2P)通信的完全托管型消息收发服务。<br />\n其中:A2A发布/订阅功能为分布式系统、微服务和事件驱动型无服务器应用程序之间的高吞吐量、基于推送的多对多消息传递提供主题。借助 Amazon SNS 主题,发布系统可以向大量订阅系统(包括 Amazon SQS 队列、 Amazon Lambda 函数、HTTP/S 终端节点和 Amazon Kinesis Data Firehose)发出消息,从而实现并行处理。<br />\n使用我的A2P功能,您可以通过 SMS、移动推送和电子邮件将消息大规模发送给其他人。</p>\n<h4><a id=\"35_Amazon_Cloud9_18\"></a><strong>3.5 Amazon Cloud9</strong></h4>\n<p>呆坐在角落的Amazon Cloud9这时候都有点坐不住了。兄弟们一个个都介绍完了,还没轮到我,不开森!!!转念一想,自己是压轴登场的,顿时又开心起来了。<br />\n我Amazon Cloud9是一种基于云的集成开发环境,小名叫做IDE。我集成了Python、PHP、JavaScript等常用编程语言的基本工具,也就是说通过我,你可以编写这些语言的程序。在本次实践之旅中,我充当的角色依然是开发工具。</p>\n<h3><a id=\"4__21\"></a><strong>4. 实践之旅</strong></h3>\n<p>经过上面的介绍,相信大家对我们兄弟几个都已经有所了解。接下来就是要回到本文的主题上了,下面将一步步介绍如何使用Amazon Aurora Serverless构建无服务器应用程序。整体分为如下几大步骤:<br />\n如果你还没有 Amazon 的账户,请先<a href=\"https://portal.aws.amazon.com/billing/signup\" target=\"_blank\">新建一个 Amazon 账户</a>哦。</p>\n<ol>\n<li>创建Aurora Serverless数据库<br />\n首先就需要创建一个Aurora Serverless数据库,这是因为最终应用程序需要将数据写入到该数据库。</li>\n<li>创建 Amazon Cloud9环境<br />\nAmazon Cloud9可以让你在线编写、运行和调试代码。为后面创建Lambda函数并在上面修改代码做准备。</li>\n<li>创建 Amazon Lambda函数<br />\n这一步就是在第二步创建的Cloud9环境中,创建Lambda 函数。</li>\n<li>配置权限<br />\n需要为第三步创建的Lambda函数配置权限,只有给Lambda函数配置了操作Aurora Serverless数据库的权限,它才能操作Aurora Serverless数据库。</li>\n<li>创建Amazon SNS主题<br />\nAmazon Simple Notification Service (SNS) 作为Lambda的消息触发器,由它来给Lambda函数发送消息。</li>\n<li>向Amazon SNS主题订阅 Amazon Lambda函数<br />\n这一步的主要目的就是将Amazon SNS设置为 Amazon Lambda函数的触发器,为后面SNS 发布消息触发Lambda函数做准备。</li>\n<li>发布测试消息<br />\n这一步就是发布测试消息验证一下SNS能否触发Lambda函数执行,之后通过查看数据库的数据得到验证结果。</li>\n<li>清理<br />\n如果你不在需要Aurora DB集群时请将其删除哦,当然在这一步你也可以清理Lambda函数等,因为不删除的话可能会产生不必要的费用。</li>\n</ol>\n<h4><a id=\"41_Amazon_40\"></a><strong>4.1 注册Amazon账号</strong></h4>\n<p>如果您已经有了一个Amazon账号,则可以忽略此步骤。如果还没有 Amazon 账号的话则需要先注册一个 Amazon 账号。<a href=\"https://portal.aws.amazon.com/billing/signup\" target=\"_blank\">新建一个Amazon账户</a></p>\n<p><img src=\"https://dev-media.amazoncloud.cn/a2b606cfbbeb4798bcfdec564dd8e564_image.png\" alt=\"image.png\" /></p>\n<p>注册 Amazon 账号一共有五个步骤,前两个步骤都比较简单,只需要输入可用的手机号和邮箱等必要信息即可进行。但是第三步的话</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/398ad75f842f4c4dbf489fc2b80400c8_image.png\" alt=\"image.png\" /></p>\n<p>需要输入一个可用的信用卡账号,而且这信用卡还是必须是VISA等国外的信用卡,这对我们国内的兄弟就不太友好了。<strong>解决办法就是到某宝花个几十块钱买个VISA卡</strong>。信用卡的问题解决了,后面第四,第五步就简单了,在此不再赘述了。</p>\n<h4><a id=\"42__Aurora_Serverless__51\"></a><strong>4.2 创建 Aurora Serverless 数据库</strong></h4>\n<p>4.2.1 首先,需要选择启用的数据库集群的区域<br />\n默认的区域就是 美国东部(弗吉尼亚北部)us-east-1。我们这边选择一个在中国访问较快的亚马逊云海外区域,这里以新加坡为例,在网页右上角切换区域到新加坡,然后在“Amazon Aurora”窗口中单击“创建数据库”。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/a1778d2fd7444422a5e1e85f2732eb26_image.png\" alt=\"image.png\" /></p>\n<p>4.2.2 修改容器类型&设置数据库名称<br />\n我们在创建数据库的页面首先需要修改的是容器类型,要将容器类型改成 无服务器,然后给数据库集群起个名字,这里起名“database-2”。其他信息可以按照默认设置。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/2e4a2e49e40047f2aa0d252b219d047f_image.png\" alt=\"image.png\" /></p>\n<p>4.2.3 设置数据库的用户名和密码<br />\n接着在凭证设置模块中设置用户名和密码,这里需要保存下设置的用户名和密码。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/a9268ce209f74213a3e82139e9f4b1d9_image.png\" alt=\"image.png\" /></p>\n<p>4.2.4 在连接这一块勾选数据API。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/81c472a735a5424a8648ef988794dda5_image.png\" alt=\"image.png\" /></p>\n<p>4.2.5 设置最大Aurora容量<br />\n这里将最大Aurora容量单位设置为2ACU,你可以从经济和需求角度进行合理设置。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/eb0dc1e7cc984e9696489522ca44caf7_image.png\" alt=\"image.png\" /></p>\n<p>其他的信息可以使用默认的设置,设置完成之后点击右下方的“创建数据库”</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/eb46cde1c22d41a5a4057f422144bd01_image.png\" alt=\"image.png\" /></p>\n<p>4.2.6 连接数据库<br />\n单击左侧导航栏的 “查询编辑器”按钮</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/b00d315d3dff4fff8e8b117699a322c3_image.png\" alt=\"image.png\" /></p>\n<p>在查询编辑器的弹框中选择数据库实例,并输入数据库的用户名和密码,接着单击“连接到数据库”。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/57c8f0829dff414a938143603545cc44_image.png\" alt=\"image.png\" /></p>\n<p>4.2.7 在查询编辑器窗口运行 CREATE DATABASE tutorial; 语句创建一个名为 tutorial 的数据库</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/7a7c5ed8aed846538cf90c9f8216c1f9_image.png\" alt=\"image.png\" /></p>\n<p>创建完成之后,单击“更改数据库”,将数据库更改为您刚刚创建的数据库。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/ee9917b9786e49418096c7baf7d957f8_image.png\" alt=\"image.png\" /></p>\n<p>4.2.8 使用如下语句创建名为 sample_table 的数据表:<br />\nCREATE TABLE sample_table(received_at TIMESTAMP, message VARCHAR(255));<br />\n通过使用查询编辑器连接到数据库,系统会创建一个密钥,供后续在Lambda函数中使用。暂时不要关闭此选项卡。<br />\n4.2.9 复制密钥ARN<br />\n新开一个窗口,跳转到 <a href=\"https://ap-southeast-1.console.aws.amazon.com/secretsmanager/home?region=ap-southeast-1\" target=\"_blank\">AWS Secrets Manager</a> 控制台。在密钥列表找到数据库 database-2的密钥,单击密钥名称后,复制密钥 ARN 并将其存放在随时可以找到的位置。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/bc9e5b08cb254ce79662dede0aa8119d_image.png\" alt=\"image.png\" /><br />\n<img src=\"https://dev-media.amazoncloud.cn/5840d9079a774f3caf70aa63c38f875f_image.png\" alt=\"image.png\" /></p>\n<p>至此创建数据库Aurora Serverless 数据库的工作全部完成。</p>\n<h4><a id=\"43_Amazon_Cloud9_107\"></a><strong>4.3 创建Amazon Cloud9环境</strong></h4>\n<p>打开一个新窗口,跳转到 <a href=\"https://ap-southeast-1.console.aws.amazon.com/cloud9/home/product\" target=\"_blank\">Amazon Cloud9控制台</a>。<br />\n4.3.1 单击“创建环境”,输入新环境的名称,然后单击“下一步”。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/50e41f3e30ea46da94390c7d08fa8861_image.png\" alt=\"image.png\" /><br />\n<img src=\"https://dev-media.amazoncloud.cn/713bfe1d504e4fe981c7fa3a082ae0a9_image.png\" alt=\"image.png\" /></p>\n<p>4.3.2 禁用AWS Toolkit</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/404a2303c2e6439b983a8c071b02105a_image.png\" alt=\"image.png\" /></p>\n<p>4.3.3 创建Lambda函数<br />\n然后在Go to Anything 搜索框中Lambda,在搜索的结果中选择 General:LambdaCreateFunction 命令,创建Lambda函数。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/571380206b144645bcd6d793ca08d77d_image.png\" alt=\"image.png\" /></p>\n<p>4.3.4 输入Lambda函数名称<br />\n在Create serverless application 的弹框中输入Lambda函数名称:auroratest</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/6e74b2acb34c493cbc249627aba61ed9_image.png\" alt=\"image.png\" /></p>\n<p>点击 “Next”按钮进入下一步<br />\n4.3.5 选择empty-python 蓝图</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/79b8c244428d4e0fb1bc2bd70f73a13e_image.png\" alt=\"image.png\" /></p>\n<p>接下来的步骤就是一直点击下一步,直到Lambda 函数的蓝图。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/c73fe860eca24c35854ae20a2d64f519_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"44__137\"></a><strong>4.4 配置权限</strong></h4>\n<p>4.4.1 单击“角色”,然后搜索以“auroratest”开头的角色,新开一个标签页,搜索进入IAM服务</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/d6fc5a0b3d4d49dd900d4085d874e914_image.png\" alt=\"image.png\" /></p>\n<p>4.4.2 单击角色名称,然后单击“附加策略”。选择“AmazonRDSDataFullAccess”策略,然后单击“附加策略”。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/61a57c7b988b4dcabc424184a62ace50_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"45_Lambda_146\"></a><strong>4.5 创建Lambda函数</strong></h4>\n<p>返回到第4.3步创建的Cloud9 环境,然后按照下面的说明执行操作。<br />\n4.5.1 在控制台中运行以下命令,以转到 auroratest 目录: $ cd auroratest</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/cf860aad383b4afa8bfe21e725144a89_image.png\" alt=\"image.png\" /></p>\n<p>4.5.2 在控制台中运行以下命令,以安装 boto3 依赖项: $ pip install boto3 -t boto3</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/4ba40161b989430f83602e0461968898_image.png\" alt=\"image.png\" /></p>\n<p>4.5.3 删除 lambda_function 文件中的代码,并在其位置复制此 <a href=\"https://github.com/aws-samples/amazon-rds-data-api-demo/blob/master/src/main/python/lambda_function_postgres.py\" target=\"_blank\">示例代码</a>。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/52716857dc3946fbb8c287eaaf2b5215_image.png\" alt=\"image.png\" /></p>\n<p>4.5.4 将 cluster_arn 和 secret_arn 值替换为之前步骤中获得的集群 ARN 和密钥 ARN 值。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/6fd981a582474715bca2b29e853a6b8e_image.png\" alt=\"image.png\" /></p>\n<p>4.5.5 单击“文件”>“保存”,然后在右侧面板中选择 Lambda 函数。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/f53e5a8683b4441da67e67e9885abac4_image.png\" alt=\"image.png\" /></p>\n<p>4.5.6 单击向上箭头部署 Lambda 函数。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/1fc34f49cafa41538967ce7151140594_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"46_Amazon_SNS_172\"></a><strong>4.6 创建Amazon SNS主题</strong></h4>\n<p>Lambda 函数将处理来自 Amazon Simple Notification Service (SNS) 的消息,该服务为微服务和无服务器应用程序提供发布/订阅消息传递。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/237895826b224a6599b44bfe9c625169_image.png\" alt=\"image.png\" /></p>\n<p>4.6.1 保留所有默认值,然后单击“创建主题”。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/6c8bdb3b7ae6441dbfe83bc435c76e45_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"47_Amazon_SNSAWS_Lambda_181\"></a><strong>4.7 向Amazon SNS主题订阅AWS Lambda函数</strong></h4>\n<p>4.7.1 在前面步骤中创建的Lambda函数的名称。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/69fb7a9e3e324b09baabd402496a5fc9_image.png\" alt=\"image.png\" /></p>\n<p>4.7.2 单击添加触发器</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/801d01a144bd407bbcd15bdcc04d70ed_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"48__190\"></a><strong>4.8 发布测试消息</strong></h4>\n<p>单击“创建主题”,输入主题和内容。点击发布即可。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/20183090d3f841089d3996df1f2304bc_image.png\" alt=\"image.png\" /></p>\n<h4><a id=\"49__195\"></a><strong>4.9 验证结果</strong></h4>\n<p>消息发布之后,数据可以顺利的落到tutorial数据库的sample_table表中。</p>\n<h3><a id=\"5__197\"></a><strong>5. 遇到的问题以及解决方案(遇到问题不要慌)</strong></h3>\n<p>官方文档最新的更新时间是截止到2019年,此时,与软件的实际操作略有出入。故遇到不同的地方不要慌,耐心分析。<br />\n5.1 问题一、 Amazon Cloud9环境用Toolkit工具替换了Lambda工具。直接创建Lambda函数就比较麻烦。<br />\n解决方案:禁用Toolkit工具。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/0ba026d49ad246018d7754f408926737_image.png\" alt=\"image.png\" /></p>\n<p>5.2 创建lambda函数失败<br />\n创建lambda函数时可能会报如下错误。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/38eaba72bd2e4c0086467dee104a3cd2_image.png\" alt=\"image.png\" /></p>\n<p>这是由于python3.6不存在</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/3aad69372f1c4c088fcced48afa3a990_image.png\" alt=\"image.png\" /></p>\n<h3><a id=\"6__213\"></a><strong>6. 优势与不足</strong></h3>\n<p>通过 Amazon Aurora Serverless 构建无服务器应用程序的优势非常明显。我认为有如下几点优势:<br />\n6.1 全栈的解决方案,更轻松地构建更好的应用程序<br />\n整个流程全部可以通过 Amazon 体系下的产品来实现,无需外部的工具介入。<br />\n应用程序的创建----> 应用程序的编码 ----> 应用程序的运行 ----> 数据存储 ----> 应用程序的管理<br />\n整个流程都可以通过 Amazon 平台上通过 Amazon 的各个产品相互配合来完成。不需要额外的安装其他的软件,工具,更可以直接在线编程。大大节约了客户时间,是客户专属于应用软件本身。<br />\n6.2 按需使用,按需计费,降低成本<br />\nAmazon 采取的是使用按价值计费模式,会自动优化资源的利用率,比如说你申请的最大 Aurora 容量为 64 ACU,但是你的应用程序只用到了2ACU,那么就只按2ACU来计费。<br />\n6.3 大规模采用,面对高并发应对自如<br />\n凭借 Amazon 强大的软硬件支持,当你的应用程序的用户量,调用量爆发性增长时,你不需要自己增加服务器,进行性能优化。</p>\n<p><img src=\"https://dev-media.amazoncloud.cn/4e0f6faebabb4665aed1ed5d24ede111_image.png\" alt=\"image.png\" /></p>\n<p>当然,不足之处也是有的,Amazon在文档本地化方面还可以做的更好。</p>\n<h3><a id=\"7__228\"></a><strong>7. 总结心得</strong></h3>\n<p>使用 Amazon Aurora Serverless构建无服务器应用程序的整个流程还是比较简单的。官方的操作文档也非常的详细。整个使用过程也比较顺畅。在此有几点心得体会想跟分享下。<br />\n7.1 构建部署之前先通览一遍说明文档。<br />\n因为整个部署的流程涉及到多个产品组件,涉及到很多配置。通览文档好处就是心中有个整体印象。通览的过程中可以将核心的步骤做一个记号。比如在本次构建中就多次需要使用到密钥 ARN,所以,在设置完密钥之后可以通过一个单独的文本文档记录下来。通览说明文档避免了盲人摸象的困境。<br />\n7.2 构建部署之前先简单了解下各个产品<br />\n了解本次构建部署所涉及到的各个产品,了解各个产品的目的是让自己明白每个产品的作用<br />\n7.3 遇到问题不要慌<br />\n在部署构建过程中难免会遇到这样那样的问题,遇到问题的时候不要慌,也不用着急去百度。首先从官方文档中去寻找答案,实在寻找不到答案,再去百度或者找客服。<br />\n最后,作者感谢各位小伙伴的耐心阅读,如果你觉得不错的话,还请您不吝轻轻的点个赞,分享给其他需要的朋友。您的鼓励是我前行的最大动力。</p>\n"}