书名:AWS云计算实战
ISBN:978-7-115-48486-4
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [德] 安德烈亚斯•威蒂格(Andreas Wittig)
迈克尔•威蒂格(Michael Wittig)
译 费良宏 张 波 黄 涛
责任编辑 杨海玲
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Original English language edition, entitled Amazon Web Services in Action by Andreas Wittig and Michael Wittig published by Manning Publications Co., 209 Bruce Park Avenue, Greenwich, CT 06830. Copyright © 2016 by Manning Publications Co.
Simplified Chinese-language edition copyright © 2018 by Posts & Telecom Press. All rights reserved.
本书中文简体字版由Manning Publications Co.授权人民邮电出版社独家出版。未经出版者书面许可,不得以任何方式复制或抄袭本书内容。
版权所有,侵权必究。
Amazon Web Services(AWS)是亚马逊公司的云计算平台,它提供了一整套基础设施和应用程序服务,可以帮助用户在云中运行几乎一切应用程序。本书介绍了AWS云平台的核心服务,如计算、存储和网络等内容。读者还可以从本书中了解在云上实现自动化、保证安全、实现高可用和海量扩展的系统架构的最佳实践。
本书分4个部分,共14章。本书从介绍AWS的基本概念开始,引入具体的应用示例,让读者对云计算和AWS平台有一个整体的了解;然后讲解如何搭建包含服务器和网络的基础设施;在此基础上,深入介绍如何在云上存取数据,让读者熟悉存储数据的方法和技术;最后展开讨论在AWS上如何设计架构,了解实现高可用性、高容错率和高扩展性的最佳实践。
本书适合对AWS感兴趣的运维人员和开发人员,尤其是那些需要将分布式应用向AWS平台迁移的运维人员和开发人员阅读。
大约30年前,我第一次见到了传说中的计算机——名为IBM PC的个人电脑。以今天的眼光来看,这台设备体型庞大、磁盘吱吱作响、操作界面极其简单,但是在那个时代能够操作这台设备的人简直是凤毛麟角。在其他同学面前,我不由得暗自得意,未来是计算机的时代,而我们注定是这个时代的佼佼者。
大约25年前,我第一次通过一台终端连接上了互联网,那个年代极少有人知道的新玩意儿。尽管当时互联网上的资源还是少得可怜,可这不妨碍我用Gopher、FTP还有Mosaic玩得不亦乐乎。我相信我接触到的是一个远未开发出来的金矿,它一定会改变我们的生活。
大约10年前,通过IT媒体我听到了那个时间最热门的概念——云计算。尽管关于什么是云计算以及云计算究竟会产生怎样的影响还有很大的争议,但是基于互联网提供计算服务的这个想法还是让我感到无比的振奋。我知道延续技术发展的脉络,未来的计算机以及互联网注定要融入云计算这个外延无限广阔的概念当中。
时至今日,我们生活中用到的手机打车、移动支付、社交媒体、新闻娱乐还有各种各样的新奇的应用无一例外都是依托于云计算而风起云涌般地出现的。而诸如联合利华、GE、飞利浦以及时代集团这样的传统企业也在利用云计算实现其数字化转型。无疑,云计算已经是这个时代的“新常态”。
今天当我们谈论起云计算,总会让我联想到30年前的个人电脑以及25年前互联网的出现。我相信云计算带来的改变和冲击不会亚于前两次技术进步的浪潮,而我们注定要在这个变革时代做出选择:成为赢家或者被时代淘汰。
我们选择翻译这一本书的目的,就是想让更多的读者了解到当前云计算发展的状态。通过实践让自己成为弄潮儿。在我的职业经历中,已经见识过太多的因为不适应技术进步而被淘汰的输家。当这一次变革到来的时刻,我们希望每一位读者都可以是时代的赢家。
感谢人民邮电出版社编辑对我们的支持,没有他们的努力这本书不会面世。在此一并致谢。
在整个20世纪90年代末和21世纪初,作为系统管理员,我负责维护网络服务在线、安全和确保用户的正常使用。当时,维护系统是一件乏味、单调的事情,涉及网络电缆吊装、服务器机架、从光盘介质安装操作系统和手动配置软件。任何希望从事新兴在线网络市场的企业都要承担管理物理服务器、接受相关资金成本和运营成本的压力,并希望获得足够的成功来证明这些付出是有价值的。
当Amazon Web Services(AWS)在2006年出现的时候,它标志着行业的转变。许多以前重复、耗时的任务变得不必要了,启动新服务的成本急剧下降。突然之间,任何有创意和行动能力的人都可以在世界级的基础设施上建立一个全球性的业务,并且只需要付出每小时几美分的成本。就针对已有的格局的颠覆性而言,一些技术明显凌驾于其他领域之上,AWS就是其中之一。
当今,进步的步伐依然不减。2014年11月,在拉斯维加斯举行的年度re:Invent大会上,AWS宣布这一次与会的人数超过13 000人,从2008年起,AWS的主要新功能和服务的数量每年都几乎翻了一倍。因为现有服务也有类似比例的增长,S3和EC2服务较上年有大约100%的增长。这种增长为工程师和企业提供了新的机遇,提供了着力解决一些具有挑战性的问题的能力,可以帮助他们去构建互联网领域一些具有挑战的问题。
不用说,这种前所未有的力量和灵活性以极大的复杂性作为代价。在客户期待并响应客户需求的情况下,AWS已经提供了许多的服务,其中数以千计的功能和特性有时候容易让新用户混淆。这些显而易见的好处也伴随着一个个崭新的词汇和独特架构以及最佳技术实践。当然,有时这些服务功能上的重叠也会使初学者困惑。
本书通过示例让读者掌握知识,揭示了学习AWS面临的挑战。两位作者Andreas和Michael从事于用户可能遇到的重要的服务和功能,并且把安全性的考虑放在了优先和中心的位置。这样有助于建立安全的云中的托管系统,即使是对安全敏感的应用也是安全的。因为许多读者将会在使用中收到账单,所以书中对需要付费的例子都会明确指出。
作为一名顾问、作者和工程师,我非常赞赏那些对新用户介绍云计算美妙世界的所有努力。我可以自信地说,本书是一本实用指南,可以帮助我们穿过迷宫走向行业领先的云计算平台。
有了这本书作为助手,你会在AWS云上搭建什么?
Ben Whaley
AWS社区英雄
《The UNIX and Linux System Administration Handbook》一书的作者
当我们开始开发软件时,我们并不关心运维。我们编写代码,其他人负责部署和运维。这就意味着,软件开发和运维之间存在巨大的鸿沟。更重要的是,发布新功能往往意味着巨大的风险,因为我们无法针对基础设施所有的变更进行手动测试。当需要部署新功能时,每隔6个月我们就要经历一场噩梦。
时间流逝,我们开始负责一个产品。我们的目标是快速迭代,并且能够每周对产品发布新的功能。我们的软件要负责管理资金,因此,软件和基础设施的质量与创新能力一样重要。但是,缺乏灵活性的基础设施和过时的软件部署过程使这一目标根本无法实现。于是,我们开始寻找更好的方法。
我们搜索到了Amazon Web Services(AWS),它为我们提供了灵活、可靠的方式来构建和运行我们设计的应用程序。让我们的基础设施的每一部分实现自动化的可能性令人着迷。逐步地,我们尝试不同的AWS服务,从虚拟服务器到分布式消息队列。能够将运行SQL数据库或在负载均衡器上终止HTTPS连接这类任务外包的特性为我们节省了大量的时间。我们将节省下来的时间投入到实现整个基础设施的自动化测试和运维上。
技术方面并不是在向云转型过程中发生的唯一变化。一段时间后,软件架构从单体应用转变为微服务架构,软件开发与运维之间的鸿沟消失了。相反,我们围绕DevOps的核心原则——“谁构建,谁运维”——构建了我们的组织机构。
我们公司是首家在AWS上进行运营的德国银行。我们在这个云计算的旅程中学到了很多关于Amazon Web Services、微服务以及DevOps的知识。
今天,作为顾问,我们正致力于帮助我们的客户充分利用AWS。有趣的是,他们大多数都不关心怎样节省云计算的成本,相反,他们正在改变他们的组织,从AWS提供的创新空间中获益并领先于自己的竞争对手。
2015年1月,当我们受邀编写一本关于AWS的书时,感到非常惊讶。但是,在我们与Manning出版社的编辑第一次通电话之后,体会到了Manning出版社的专业水准,我们变得越来越有信心。我们喜欢读书以及传授和分享我们的知识,所以写一本书应该是一个完美的契合。
由于Manning出版社和MEAP读者的巨大支持,我们得以在9个月内完成了本书。我们喜欢我们自己、编辑和MEAP读者之间的循环反馈。可以说创建和改进作为本书一部分的所有示例是非常有趣的。
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
本书提供如下资源:
要获得以上配套资源,请在异步社区本书页面中点击 ,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https:// www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
写一本书是非常耗时的。我们投入了大量的时间,其他人也一样投入了大量的时间。我们认为时间是地球上最有价值的资源之一,我们要尊重帮助我们完成这本书的人们为此所花费的每一分钟。
感谢所有购买MEAP版本的读者,你们的信任激励我们完成这本书,而且你们还分享了自己对AWS的兴趣。感谢你们阅读这本书,希望你们能有所收获。
感谢所有在本书作者在线论坛上发表评论以及为改进这本书提供精彩反馈的人们。
感谢所有从第一页到最后一页提供了详细评论的审阅者,他们是Arun Allamsetty、Carm Vecchio、Chris Bridwell、Dieter Vekeman、Ezra Simeloff、Henning Kristensen、Jani Karhunen、Javier Muñoz Mellid、Jim Amrhein、Nestor Narvaez、Rambabu Posa、Scott Davidson、Scott M. King、Steffen Burzlaff、Tidjani Belmansour和William E. Wheeler。你们的建议帮助我们塑造了这本书,希望你们像我一样喜欢这本书。
我们也要感谢Manning出版社对我们的信任。这是我们写的第一本书,所以我们知道他们在承担极高的风险。我们要感谢Manning出版社以下工作人员的出色工作。
非常感谢Ben Whaley为本书作序。
还要感谢Christoph Metzger、Harry Fix和Tullius Walden Bank团队为我们提供了一个令人难以置信的工作场所,在这里通过将德国第一家银行的原有IT迁移到AWS上,我们获得了很多AWS技能。
最后但同样重要的是,我们要感谢我们生活中的一些重要的人,他们在我们写这本书时默默地支持我们。Andreas要感谢他的妻子Simone,Michael要感谢他的合伙人Kathrin在过去9个月的耐心和鼓励。
本书介绍了一些重要的AWS服务,以及如何组合它们以便充分利用Amazon Web Services。我们的大多数示例都使用典型的Web应用程序来展示要点。我们非常重视安全话题,所以本书遵循“最小特权”的原则,而且尽可能使用官方的AWS工具。
自动化贯穿于整本书,所以最终读者会很乐意使用自动化工具CloudFormation,来以自动化的方式设置自己所学到的知识,这将是读者能从本书中学到的最重要的技能之一。
本书将介绍3种类型的代码清单:Bash、JSON和Node.js/JavaScript。我们使用Bash创建小型的脚本,以自动方式与AWS进行交互;JSON用于以CloudFormation可以理解的方式描述基础设施;当需要编程来使用服务时,我们使用Node.js平台用JavaScript创建小型应用程序。
我们将Linux作为本书中虚拟服务器的操作系统。所有的示例尽可能地基于开源软件。
第1章介绍云计算和AWS。我们将了解关键概念和基础知识,并创建和设置自己的AWS账户。
第2章将Amazon Web Services带入具体操作中。我们将轻而易举地进入复杂的云基础设施。
第3章是关于使用虚拟服务器的。这一章将借助一些实际的例子,讲解EC2服务的主要概念。
第4章会展示实现自动化基础设施的不同方法。通过使用3种不同的方法,我们将了解何谓“基础架构即代码”,这3种方法分别是终端、编程语言和称为CloudFormation的工具。
第5章会介绍将软件部署到AWS的3种不同方法。我们将使用每种工具以自动方式将应用程序部署到AWS。
第6章是关于安全性的。我们将学习如何使用私有网络和防火墙来保护自己的系统,还将学习如何保护自己的AWS账户。
第7章会介绍了提供对象存储服务的S3,以及提供长期存储服务的Glacier。我们将学习如何将对象存储集成到应用程序中以实现无状态服务器,并用以创建映像库的示例。
第8章是关于AWS提供的虚拟服务器的块存储的。如果计划在块存储上运行原有的软件,这是一个有趣的话题。我们还可以进行一些性能的测量,以了解AWS上可用的选项。
第9章会介绍RDS,这是一种为客户管理关系数据库系统(如PostgreSQL、MySQL、Oracle和Microsoft SQL Server)而提供的服务。如果客户的应用程序使用这种关系数据库系统,这就是实现无状态服务器架构的简单方法。
第10章会介绍DynamoDB,一个提供NoSQL数据库的服务。我们可以将该NoSQL数据库集成到应用程序中以实现无状态服务器。我们将在这一章中实现一个待办事宜应用的程序。
第11章是关于独立的服务器和完整的数据中心的基础知识的。我们将学习如何在同一个或另一个数据中心中恢复单个EC2实例。
第12章会介绍将系统解耦以增加可靠性的概念。我们将学习如何在AWS上的负载均衡器的帮助下实现同步解耦。异步解耦也是这一章内容的一部分,我们解释如何使用SQS(一种分布式队列服务)搭建容错系统。
第13章会展示如何使用所学的许多服务搭建容错的应用程序。在这一章中,我们将学习基于EC2实例设计容错Web应用程序所需的所有内容,默认情况下它们是不会容错的。
第14章的内容都是关于系统灵活性的。我们将学习如何根据调度或基于系统当前的负载来扩展基础结构的容量。
代码清单中或正文中的所有源代码都是等宽字体,以便与普通文本区分开。许多代码清单附带了代码注释,突出了重要的概念。在某些情况下,有编号的项目符号与代码清单后面的说明联系起来,有时我们需要将一行分成两行或更多,以适应页面。在我们的Bash代码中,我们使用了延续的反斜杠。在我们的JSON和Node.js/JavaScript代码中,➥这个符号表示一个人为换行符。
本书中的示例代码可从出版社的官方网站下载。
安德烈亚斯•威蒂格(Andreas Wittig)和迈克尔•威蒂格(Michael Wittig)作为软件工程师和顾问,专注于AWS以及Web应用程序和移动应用程序开发。他们与遍及全球的客户一同工作。他们一起将德国银行的整个IT基础设施迁移到了AWS。这在德国银行界算是首例。Andreas和Michael在分布式系统开发和架构、算法交易和实时分析方面具有专长。他们是DevOps模型的拥趸,且都是AWS认证的专业级AWS解决方案架构师(AWS Certified Solutions Architect,Professional Level)。
本书封面上的图片标题为“Paysan du Can-ton de Lucerne”,这是瑞士中部卢塞恩州的一名农民。这张照片摘自《Jacques Grasset de Saint-Sauveur》(1757—1810)1797年在法国出售的来自各国的服装服饰的图集《Costume deDifférent Pays》。每幅画都是经过精心绘制和手工上色的。
Grasset de Saint-Sauveur的图集丰富多彩,让我们生动地看到了世界各地的城市和地区在200多年前的文化差异。彼此隔绝,人们讲着不同的方言和语言。在街头或农村,通过人们的服装服饰很容易就能确定他们住在哪里,以及他们的身份和职位。
从那时起,我们的着装方式发生了变化,当时地域的多样化带来的着装上的丰富多彩已经渐渐消逝。现在很难分辨不同地域的居民,更别说不同城镇、不同地区或不同国家的居民了。也许我们已经用更多样化的个人生活交换了文化多样性——当然这是为了一个更多样化和快节奏的科技生活。
在很难分辨出一本计算机相关的图书的时候,Manning出版社以两个世纪前丰富多样的地域生活为基础,借用Grasset de Saint-Sauveur的图画作为书籍的封面,以此赞美计算机行业的创造性和主动性。
你有没有在Netflix上看过影片,在Amazon.com上买过小玩意,或者今天同步过Dropbox上的文件吗?如果有的话,你就已经在后台使用了Amazon Web Services(AWS)。截至2014年12月,AWS运营了140万台服务器,是云计算市场的大玩家。AWS的数据中心广泛分布于美国、欧洲、亚洲和南美洲。但云计算不只是由硬件和计算能力构成的,软件是每个云计算平台的一部分,能使客户体验到云平台的差异。信息技术的研究机构Gartner将AWS列为云计算基础设施即服务(IaaS)的魔力象限的领导者。算上2015年这已经是第四次了。这是因为,AWS平台上的创新速度以及服务的质量都是非常高的。
本书的第一部分将作为了解AWS的第一步,引导读者了解如何使用AWS来改善IT基础设施。第1章将介绍云计算和AWS,读者将了解关键概念和基础知识。第2章将介绍Amazon Web Service的具体操作,让读者轻松进入复杂的云基础设施。
本章主要内容
Amazon Web Service(AWS)是一个提供Web服务解决方案的平台,它提供了不同抽象层上的计算、存储和网络的解决方案。客户可以使用这些服务来托管网站,运行企业应用程序和进行大数据挖掘。这里提到的术语Web服务,它的含义是可以通过Web界面来控制服务。Web界面可以由机器或人类通过图形用户界面来操作。其中最突出的服务是提供虚拟服务器的EC2,以及提供存储服务的S3。AWS上的服务可以配合工作,客户可以使用它们来复制现有的在企业内部部署的系统,或者从头开始设计新的设置。这些服务按使用付费定价模式收取服务费用。
AWS的客户可以选择不同的数据中心。AWS数据中心分布在美国、欧洲、亚洲和南美洲等。例如,客户可以在日本启动一个虚拟服务器,与在爱尔兰启动虚拟服务器是一样的。这使你能够为世界各地的客户提供全球性的基础设施服务。
所有客户都可以使用的AWS数据中心分布在德国、美国(西部1处、东部2处)、爱尔兰、日本、新加坡、澳大利亚和巴西。[1]
[1]截至2018 年1 月,AWS 云在全球18 个地区内运营着49 个可用区,具体信息可以参考AWS 官网介绍。——译者注
AWS使用了什么样的硬件
AWS没有公开其数据中心所使用的硬件。AWS运行的计算、网络和存储的硬件的规模是巨大的。与使用品牌硬件设备的额外费用相比,它很可能使用商品化的硬件组件以节省成本。硬件故障的处理依靠真实的流程和软件。[2]
AWS还使用针对其使用场景而特别开发的硬件。一个很好的例子是英特尔Xeon E5-2666 v3 CPU。这款CPU经过优化为EC2 C4系列的虚拟服务器提供支持。
[2]Bernard Golden, “Amazon Web Services (AWS) Hardware,” For Dummies.
从更广泛的意义上讲,AWS就是所谓的云计算平台。
几乎目前每个IT解决方案都标有云计算或者云。一个时髦的词汇可能有助于产品销售,但在本书中却不适用。
云计算或云是针对IT资源的供应和消费的一个比喻。云中的IT资源对用户来说不直接可见,在这之间有多个抽象的层。云计算提供的抽象级别可能会因虚拟硬件与复杂的分布式系统而有所不同。资源可根据需要大量提供,并按使用付费。
下面是美国国家标准和技术研究所(NIST)对云计算的一个较为正式的定义:
云计算是一种普适的、方便的、按需提供网络访问的可配置的计算资源(如网络、服务器、存储、应用程序和服务)的共享池模型,它能够以最少的管理工作量或与服务提供者交互的方式快速进行分配和发布。
云计算通常被划分成以下几种类型。
AWS提供的是公有云服务。云计算服务也有多种分类。
AWS产品阵容包含了IaaS、PaaS和SaaS。让我们更具体地了解一下AWS究竟可以做什么。
客户可以使用一个或多个服务组合在AWS上运行任何应用程序。本节中的示例将让读者了解AWS可以做什么。
John是一家中型电子商务企业的CIO。他的目标是为他们的客户提供一个快速可靠的在线商店。他决定由企业自行管理该网站。3年前他在数据中心租用了服务器。Web服务器处理来自客户的请求,数据库存储商品信息和订单。John正在评估他的公司如何利用AWS的优势将同样的设置运行在AWS上,如图1-1所示。
图1-1 运行网店的对比:自建和运行在AWS上
John意识到有其他选择可以通过额外的服务来改进他在AWS上的设置。
图1-2展示了John是如何利用AWS增强他们的网店的。
John启动了一个概念验证项目(POC),他发现这些Web应用程序可以迁移到AWS上,并且可以利用AWS上的服务来改进设计。
图1-2 在AWS使用CDN使得Web商店获得更好的性能,用负载均衡器实现高可用性, 用托管的数据库来降低维护成本
Maureen是一家全球性企业的高级系统架构师。当公司的数据中心合同在几个月后即将到期的时候,她希望将部分业务应用程序迁移到AWS上,以降低成本并获得灵活性。她发现在AWS上运行企业应用程序是完全可行的。
为此,她在云中设定了一个虚拟网络,并通过虚拟专网(VPN)将其连接到网络。公司可以通过使用子网以及控制列表来管理网络流量,这样就可以满足访问控制和保护关键任务的数据。Maureen使用网络地址转换(NAT)和防火墙来控制互联网的流量。她将应用程序服务器安装在虚拟机(VM)上以运行Java EE应用程序。Maureen还考虑将数据存储在SQL数据库服务之中(如Oracle数据库企业版或Microsoft SQL Server EE版)中。图1-3解释了Maureen的架构。
Maureen已经成功地将本地数据中心与AWS上的私有网络连接起来。她的团队已经开始将第一个企业应用程序迁移到云端。
图1-3 在企业网络和AWS的环境中运行Java EE应用
Greg负责管理一个小型律师事务所的IT基础设施。他的主要工作目标是以可靠、耐用的方式存储和归档所有数据。他运行了一个文件服务器,提供了在办公室内共享文件的功能。存储所有数据对他来说是一个挑战。
为了节省资金并提高数据安全性,Greg决定使用AWS。他将数据传输到具有高可用特性的对象存储服务上。存储网关使得不需要购买和管理本地的网络附加存储和本地备份。一个虚拟的磁带机负责完成在所需的时间段内归档数据的任务。图1-4展示了Greg如何在AWS上实现这个使用场景,并将其与本地的解决方案进行比较。
Greg在AWS上存储和归档数据的新的解决方案很棒,因为能够明显地提高质量,并获得了扩展存储大小的可能性。
图1-4 在专有环境和AWS下备份和归档数据
Alexa是一名软件工程师,工作于一家创业企业。她知道墨菲定律适用于IT基础设施:任何可能出错的事情都会出错。Alexa正在努力构建一个容错系统,以防止运行中业务出现中断。她知道AWS上有两种类型的服务:容错服务和可以以容错方式运行的服务。Alexa构建了一个如图1-5所示的具有容错架构的系统。数据库服务提供复制和故障转移处理。Alexa使用了虚拟服务器充当Web服务器,这些虚拟服务器默认情况下不具有容错的特性。但是,Alexa使用了负载均衡器,并可以在不同的数据中心启动多台服务器以实现容错。
到目前为止,Alexa采用的方法已经在事故中保护了公司的系统。不过,她和她的团队总是在为各种系统失效做计划。
现在读者对AWS可以做什么应该有了一个广泛的了解。一般来说,客户可以在AWS上托管任何应用程序。下一节将介绍AWS提供的9个重要的好处。
图1-5 在AWS上构建容错系统
使用AWS最重要的优势是什么?你可能会说是节省成本。但省钱肯定不是唯一的优势。让我们看看你可以从使用AWS中获益的其他方法。
2014年,AWS在拉斯维加斯举办的年度会议re:Invent上宣布了500多项新的服务和功能。除此之外,几乎AWS每周都会有新功能和改进的发布。客户可以将这些新的服务和功能转化为针对自己的客户的创新解决方案,从而体现竞争优势。
re:Invent大会的与会者的数量从2013年的9 000人增加到2014年的13 500人。[3]AWS的客户中有超过100万家企业和政府机构,在2014年第一季度的业绩沟通会上,该公司表示将继续聘请更多的人才谋求进一步的发展。[4]在未来几年里,我们可以期待更多的新功能和新服务。
[3]Greg Bensinger, “Amazon Conference Showcases Another Side of the Retailer’s Business,” Digits, Nov. 12, 2014.
[4]“Amazon.com’s Management Discusses Q1 2014 Results - Earnings Call Transcript,” Seeking Alpha, April 24, 2014.
如我们所了解的,AWS是一个服务平台。常见的问题,如负载均衡、队列、发送电子邮件以及存储文件等,都可以通过服务加以解决。而客户不需要“重新发明轮子”。客户的工作就是选择合适的服务来构建复杂的系统。然后,客户可以让AWS来管理这些服务,而自己则可以专注于所服务的客户。
由于AWS提供了API,因此客户可以自动执行所有的操作:客户可以编写代码来创建网络,启动虚拟服务器集群或部署关系数据库。自动化提高了可靠性,并提高了效率。
系统拥有的依赖性越大,它就会变得更复杂。面对复杂的图形,人类可能很快就失去透视能力,而计算机可以应付任何大小的图形。客户应该集中精力于人类擅长的领域——描述系统的任务,而计算机则会了解如何解决所有这些依赖关系来创建系统。基于客户的蓝图在云平台上设置所需的环境可以通过基础设施即代码以自动化的方式来完成,关于这部分内容将在第4章介绍。
灵活的容量的特性可以使客户免于做规划。客户可以从一台服务器扩展到数千台服务器。客户的存储容量可以从GB级别增长到PB级别。客户不再需要预测未来几个月和几年的容量需求。
如果你经营一家网店,则会有季节性流量的模式,如图1-6所示。想想白天与晚上、平日与周末或假期。如果你可以在流量增长时增加容量并在流量缩减时减少容量,那岂不是很好吗?这正是灵活容量的特性。你可以在几分钟之内启动新的服务器,然后在几小时后删除它们。
图1-6 网店的季节性流量模式
云计算几乎没有容量的限制。客户不再需要考虑机架空间、交换机和电源供应,客户可以添加尽可能多的服务器。如果数据量增长,则始终可以添加新的存储容量。
灵活的容量也意味着客户可以关闭未使用的系统。在我们最近的一个项目中,测试环境只在工作日从上午7:00到下午8:00运行,这让我们的成本节省了60%。
大多数AWS服务都具有容错或高可用的特性。如果客户使用这些服务,可以免费获得可靠性。AWS支持客户以可靠的方式构建系统,它为客户提供了创建自己的容错系统所需的一切资源。
在AWS中,客户请求一个新的虚拟服务器。几分钟后,该虚拟服务器将被启动并可以使用。同样的情况也适用于任何其他AWS服务。客户可以按需使用它们。这使客户能够快速地将自己的基础架构调整以满足新的需求。
由于反馈循环更短,客户的开发过程将更快。客户可以消除各种限制,如可用的测试环境数量。如果客户需要一个更多资源的测试环境,可以创建并运行数小时。
在编写此书时,自2008年以来使用AWS的费用已经降至最初的1/42。
截至2014年12月,AWS运营了140万台服务器。所有与操作有关的过程都必须进行优化,以便在如此规模上运行。AWS规模越大,价格就会越低。[5]
[5]截至2017 年11 月,AWS 已经进行了62 次降价。——译者注
客户可以将应用程序部署到尽可能接近自己的客户的地方。AWS在以下位置建有数据中心:
有了AWS,客户就可以在全球运营自己的业务。[6]
[6]除上述之外,AWS 在全球部署基础设施的国家和地区还包括了美国(俄亥俄)、印度(孟买)、韩国(首尔)、加拿大、欧洲(法兰克福、伦敦、巴黎)、中国(北京、宁夏)等。——译者注
AWS符合以下合规性要求。
如果你还不相信AWS是专业的合作伙伴,那么你应当知道AWS已经承担了Airbnb、Amazon、Intuit、NASA、Nasdaq、Netflix和SoundCloud等重要的任务。
在下一节我们将详细阐述成本效益。
AWS的账单类似于电费账单。服务根据用量收费。客户需要支付运行虚拟服务器的时间、从对象存储库使用的存储空间(以GB为单位)或正在运行的负载均衡器的数量。服务按月开具发票。每项服务的定价是公开的,如果要计算计划中每月的成本,可以使用“AWS简单月度计算器”(AWS Simple Monthly Calculator)来估算。
在注册后的前12个月内客户可以免费使用一些AWS服务。免费套餐的目的是让客户能够对AWS进行实验并获得一些经验。下面是免费套餐中包含的内容。
如果超出了免费套餐的限制,就要开始为使用的资源支付费用,而不再另行通知。客户将在月底收到一张账单。在开始使用AWS之前,我们将向读者展示如何监控成本。如果免费套餐在一年后结束,读者将为所使用的所有资源付费。
客户还可以获得一些额外的好处,详情参见http://aws.amazon.com/free。本书尽可能多使用免费套餐的资源,并清楚地说明何时需要额外的不在免费套餐之内的资源。
如前所述,客户可能会被以下几种方式计费。
[7]AWS 从2017 年10 月2 日起以按需、预留和竞价形式发布的Linux 实例的使用将按1 s 的增量计费。同样,EBS 卷的预置存储也将按1 s 的增量计费。——译者注
还记得在1.2节提过的网店的例子吗?图1-7展示了这家网店使用AWS的示意图,并添加了有关各个部分的计费信息。
图1-7 网店的例子
假设你的网店在1月开始启动,并且你决定开展营销活动以提高下个月的销售额。幸运的是,你可以在2月将网店的访问人数增加5倍。正如你所了解的,你必须根据使用情况支付AWS。表1-1展示了你的1月和2月的账单。访客人数从10万人增加到50万人,月收入从142.37美元增加到538.09美元,涨幅是3.7倍。因为你的网店必须处理更多流量,所以你必须为更多的服务(如CDN、Web服务器和数据库)付费。其他服务,如静态文件的存储,因为没有增加更多的用量,所以价格保持不变。
表1-1 如果网店访客的数量增加,AWS的账单将如何变化
服 务 |
1月用量 |
2月用量 |
2月费用(美元) |
增加(美元) |
---|---|---|---|---|
网站访客 |
10万人 |
50万人 |
||
CDN |
2 600万条请求,25 GB流量 |
13 100 万条请求125 GB流量 |
113.31 |
90.64 |
静态文件 |
使用50 GB的存储 |
使用50 GB的存储 |
1.50 |
0.00 |
负载均衡器 |
748 h+50 GB流量 |
748 h+250 GB流量 |
20.30 |
1.60 |
Web服务器 |
1台服务器=748 h |
4台服务器=2 992 h |
204.96 |
153.72 |
数据库(748 h) |
小型服务器+20 GB存储 |
大型服务器+20 GB存储 |
170.66 |
128.10 |
流量(出站到互联网流量) |
51 GB |
255 GB |
22.86 |
18.46 |
DNS |
200万条请求 |
1 000万条请求 |
4.50 |
3.20 |
总成本 |
538.09 |
395.72 |
使用AWS,客户可以实现流量和成本之间的线性关系,而其他机会正等待客户使用这个定价模式。
AWS按使用付费的定价模式创造了新的机会。客户不再需要对基础设施进行前期投资。客户可以根据需要启动服务器,并且只支付每小时使用时间的费用,客户可以随时停止使用这些服务器,而不必再为此付费。客户不需要对自己将使用多少存储进行预先承诺。
一台大型服务器的成本大致与两个较小的服务器之和相同。因此,客户可以将系统分成几个较小的部分,因为服务器成本是相同的。这种容错的能力不仅适用于大公司,而且还可用于较小预算的场景。
AWS不是唯一的云计算提供商。微软和谷歌也有云计算的产品。
OpenStack则有不同,因为它是开源的,由包括IBM、HP和Rackspace在内的200多家公司共同开发。这些公司中的每一家都使用OpenStack来运行自己的云计算产品,有时候这些公司会用到闭源的附件。你可以根据OpenStack来运行自己的云,但是将失去1.3节中所描述的大部分好处。
在云计算供应商之间进行比较并不是一件容易的事,因为缺少太多的开放标准。像虚拟网络和消息队列这样的功能实现的方式差异很大。如果客户知道自己需要什么具体功能,可以比较细节并做出决定;否则,AWS将是客户最好的选择,因为在找到能够解决自己的问题的方法中,AWS的机会是最高的。
以下是云计算服务提供商一些常见的功能:
更有趣的一个问题是,云计算服务提供商有何不同?表1-2比较了AWS、Azure、Google Cloud Platform和OpenStack。
表1-2 AWS、Microsoft Azure、Google Cloud Platform和OpenStack的不同
AWS |
Azure |
Google Cloud Platform |
OpenStack |
|
---|---|---|---|---|
服务的数量 |
大部分 |
一些 |
满足 |
少数 |
位置分布的数量(每个位置有多个数据中心) |
9 |
13 |
3 |
有(依赖OpenStack服务提供者) |
合规性 |
公共的标准(ISO 27001、HIPAA、FedRAMP、SOC),IT Grundschutz(德国)、G-Cloud(英国) |
公共的标准(ISO 27001、HIPAA、FedRAMP、SOC),ISO 27018(云隐私)、G-Cloud(英国) |
公共的标准(ISO 27001、HIPAA、FedRAMP、SOC) |
有(依赖Open Stack服务提供者) |
SDK语言 |
Android、浏览器(JavaScript)、iOS、Java、.NET、Node.js(JavaScript)、PHP、Python、Ruby、Go |
Android、iOS、Java、.NET、Node.js(JavaScript)、PHP、Python、Ruby |
Java、浏览器(JavaScript)、.NET、PHP、Python |
— |
与开发过程的融合 |
中级,与特定的生态无关 |
高级,与Microsoft生态链接(如.NET开发) |
高级,与Google生态链接(如Android) |
— |
块存储(连接的网络存储) |
有 |
有(可同时被多个虚拟服务器使用) |
没有 |
有(可同时被多个虚拟服务器使用) |
关系数据库 |
有(MySQL、PostgreSQL、Oracle Data Base、Microsoft SQL Server) |
有(Azure SQL Data Base、Microsoft SQL Server) |
有(MySQL) |
有(依赖OpenStack服务提供者) |
NoSQL 数据库 |
有(专有) |
有(专有) |
有(专有) |
没有 |
DNS |
有 |
没有 |
有 |
没有 |
虚拟网络 |
有 |
有 |
没有 |
有 |
发布/订阅消息服务 |
有(专有,JMS库可用) |
有(专有) |
有(专有) |
没有 |
机器学习工具 |
有 |
有 |
有 |
没有 |
部署工具 |
有 |
有 |
有 |
没有 |
私有数据中心集成 |
有 |
有 |
有 |
没有 |
在我看来,AWS是目前可用的、成熟的云计算平台。
用于计算、存储和联网的硬件是AWS云计算的基础。AWS在硬件上运行软件服务来提供云服务,如图1-8所示。Web界面、API充当AWS服务和应用程序之间的接口。
图1-8 AWS云由可通过API访问的硬件和软件服务组成
客户可以通过图形用户界面、使用SDK以编程的方式手动发送请求至API,以实现对服务的管理。为此,客户可以使用诸如管理控制台、基于Web的用户界面或命令行工具等工具。虚拟服务器有其特殊性,例如,客户可以通过SSH连接到虚拟服务器,并获得管理员访问权限。
这意味着客户可以在虚拟服务器上安装所需的任何软件。其他服务,如NoSQL数据库服务则是通过API提供其功能,细节被隐藏到幕后。图1-9展示了管理员在虚拟服务器上安装定制的PHP Web应用程序,并管理所依赖的服务,如PHP Web应用程序使用的NoSQL数据库。
图1-9 管理运行在虚拟服务器以及所依赖的服务上的定制应用
用户将HTTP请求发送到虚拟服务器。在此虚拟服务器有安装Web服务器与定制的PHP Web应用程序。Web应用程序需要与AWS服务进行通信,以便响应用户的HTTP请求。例如,Web应用程序需要从NoSQL数据库查询数据、存储静态文件和发送电子邮件。Web应用程序和AWS服务之间的通信由API处理,如图1-10所示。
一开始,客户可能会惊讶于AWS提供的服务的数量。下面对AWS服务的分类将有助于客户找到所需要的服务。
图1-10 定制的Web应用使用AWS服务来处理HTTP请求
要知道我们所列出的仅仅是最重要的服务的类别。其他服务当然也是可用的,同样可以支持客户运行自己的应用程序。
现在我们看一看AWS服务的细节,了解一下如何与这些服务进行交互。
当客户与AWS进行交互以配置或者使用AWS服务的时候,客户就会调用API。这里提到的API是AWS的入口,如图1-11所示。
接下来,我将给读者提供调用API的可用工具的全貌。读者可以比较这些工具的能力,它们可以帮助你自动完成每日的工作。
图1-11 与AWS API交互的工具
客户可以使用基于Web的管理控制台实现与AWS的交互。通过这个方便的图形用户界面,客户可以手动控制AWS。这个管理控制台支持每一种现代Web浏览器(Chrome、Firefox、Safari 5以上版本、IE 9以上版本),如图1-12所示。
图1-12 管理控制台
如果你正在尝试AWS,那么这个管理控制台就是最好的起点。它能够帮你获得不同服务的全貌并快速取得成功。管理控制台也是为了开发、测试而设置云基础设施的比较好的方式。
客户可以通过命令行启动虚拟服务器、设置存储并且发送邮件。使用这个命令行接口(CLI),可以控制AWS的一切,如图1-13所示。
图1-13 命令行接口
CLI通常用于自动执行AWS上的任务。如果客户想通过持续集成服务器(如Jenkins)的帮助自动化基础设施的某些部分,则CLI是该任务的正确工具。CLI提供了访问API的便捷方式,并可以将对API的多个调用整合到一个脚本中。
客户甚至可以通过将多个CLI调用链接起来,以实现基础设施的自动化。CLI可用于Windows、Mac和Linux,还有一个适用于PowerShell的版本。
有时客户需要从自己的应用程序中调用AWS。使用SDK,客户可以使用自己喜欢的编程语言将AWS集成到应用程序逻辑中。AWS为以下环境提供了SDK:
[8]目前也有C++的SDK。——译者注
SDK通常用于将AWS服务集成到应用程序中。如果客户正在进行软件开发,并希望集成AWS服务(如NoSQL数据库或推送通知服务),那么SDK就是该任务的正确选择。某些服务(如队列和主题订阅)必须在应用程序中使用SDK。
蓝图是包含所有服务和依赖关系的对于系统的描述。蓝图并没有说明实现所描述的系统所必需的步骤或顺序。图1-14展示了如何将蓝图转移到正在运行的系统中。
图1-14 使用蓝图实现基础设施自动化
如果你必须控制许多或复杂的环境,可以考虑使用蓝图。蓝图将帮你自动化云中基础设施的配置。例如,你可以使用蓝图来设置虚拟网络并在该网络中启动不同的服务器。
蓝图免除了客户的大部分工作负担,因为客户不再需要担心系统创建期间的依赖关系——蓝图将整个流程自动化。我们将在第4章中了解有关自动化基础设施的更多信息。
现在是开始创建自己的AWS账户并在所有这些理论之后探索AWS实践的时候了。
在开始使用AWS之前,客户需要创建一个账户。AWS账户是客户拥有的所有资源的一个篮子。如果多个人需要访问该账户,客户可以将多个用户添加到一个账户下面。默认情况下,客户的账户将有一个root用户。要创建一个账户,客户需要提供以下内容:
使用原有账户可以吗
在使用本书中的示例时,读者可以使用现有的AWS账户。在这种情况下,使用可能不在免费套餐的范围之内,可能需要支付费用。
此外,如果读者在2013年12月4日之前创建了现有的AWS账户,那么应该创建一个全新的AWS账户,否则在尝试运行本书的示例时可能会遇到遗留问题的麻烦。
注册的流程包括以下5个步骤。
(1)提供登录凭据。
(2)提供联系信息。
(3)提供支付信息的细节。
(4)验证身份。
(5)选择支持计划。
将所使用的浏览器指向AWS官方网站,然后单击“创建免费账户”按钮。
注册页面,为客户提供了两个选择,如图1-15所示。客户可以使用Amazon.com账户创建账户,也可以重新开始创建账户。如果创建新账户,请按照下面的步骤;否则,请跳到第5步。
填写电子邮件地址,点击“继续”,创建登录凭据。我们建议选择一个强大的密码来防止误用。
我们建议密码的长度为16字节,包括数字和符号。如果有人可以访问你的账户,这就意味着他们有可能破坏你的系统或者窃取你的数据。
图1-15 创立一个AWS账号:注册页
下一步需要提供联系信息,如图1-16所示。填写完所需的全部内容,然后继续下一步。
图1-16 创建一个AWS账户:提供联系信息
现在的屏幕显示如图1-17所示,需要支付信息。AWS支持MasterCard以及Visa信用卡。如果不想以美元支付自己的账单,可以稍后再设置首选付款货币。这里支持的货币有欧元、英镑、瑞士法郎、澳元等。
图1-17 创建一个AWS账户:提供支付信息的细节
接下来就是验证身份。图1-18展示了这个流程的第一步。
当完成这个部分以后,你会接到一个来自AWS的电话呼叫。一个机器人的声音会询问你的PIN码,这个PIN码将会如图1-19所示显示在屏幕上。身份被验证以后,就可以继续执行最后一步。
图1-18 创建一个AWS账户:身份验证(1/2)
图1-19 创建一个AWS账户:身份验证(2/2)
最后一步就是选择支持计划,如图1-20所示。在这种情况下,请选择免费的“基本方案”。如果你以后为自己的业务创建一个AWS账户,我们建议你选择AWS的“业务方案”。你甚至可以以后切换支持计划。
图1-20 创建一个AWS账户:选择支持计划
现在你已经完成了全部的步骤,可以使用AWS管理控制台登录到自己的账户了。
你现在已经有了一个AWS账户,可以登录AWS管理控制台。如前所述,管理控制台是一个基于Web的工具,可用于控制AWS资源。
管理控制台使用AWS API来实现客户需要的大部分功能。图1-21展示了登录页面。
输入你的登录凭据,然后点击“下一步”,就可以看到图1-22所示的管理控制台。
图1-21 登录到管理控制台
图1-22 AWS管理控制台
在这个页面中最重要的部分是顶部的导航栏,如图1-23所示。它由以下6个部分组成。
图1-23 AWS管理控制台导航栏
接下来,我们需要创建一个用于连接虚拟服务器的密钥对。
要访问AWS中的虚拟服务器,客户需要一个由私钥和公钥组成的密钥对。公钥将上传到AWS并配置到虚拟服务器中,而私钥是客户私有的。这有点儿类似于密码,但更安全。一定要保护好自己的私钥,它就像是密码一样。这是私有的,所以不要弄丢它。一旦丢失,就无法重新获得。
要访问Linux服务器,请使用SSH协议。客户将在登录时通过密钥对而不是密码进行身份验证。如果客户需要通过远程桌面协议(RDP)来访问Windows服务器,客户也需要使用密钥对才能解密管理员密码,然后才能登录。
以下步骤将引导客户进入提供虚拟服务器的EC2服务的仪表板,在那里客户可以获取密钥对。
(1)在https://console.aws.amazon.com上打开AWS管理控制台。
(2)点击导航栏中的“服务”,找到“EC2服务”并点击它。
(3)客户的浏览器将显示EC2管理控制台。
如图1-24所示,EC2管理控制台被分成3列。第一列是EC2导航栏,因为EC2是最早的服务,所以它具有许多可以通过导航栏可以访问的功能;第二列简要介绍了所有的EC2资源;第三列提供了附加信息。
图1-24 EC2管理控制台
以下步骤可以用来创建一个新的密钥对。
(1)在“网络与安全”下的导航栏中点击“密钥对”。
(2)点击图1-25所示的页面上的“创建密钥对”按钮。
(3)将密钥对命名为mykey
。如果客户选择了其他名字,则必须在后续的所有示例中替换密钥对的名字!
在密钥对创建期间,客户要下载一个名为mykey.pem的文件。你现在必须准备好该密钥对以备将来使用。根据所使用的操作系统,你可能需要采取不同的操作。因此需要阅读对应的操作系统的部分。
图1-25 EC2管理控制台上的密钥对
使用自己的密钥对
读者也可以将现有的密钥的公钥上传到AWS。这样做有以下两个优点。
可以复用现有的密钥对。
可以确定只有自己知道密钥对的私钥部分,如果使用“创建密钥对”按钮,你可能担心AWS知道(至少暂时的)自己的私钥。
我们决定在本书中不采用这个做法,因为在一本书里面用这种做法会有一些不方便的地方。
客户现在唯一需要做的是更改mykey.pem的访问权限,以便只有自己可以读取该文件。为此,请在终端中运行命令chmod 400 mykey.pem
。当读者需要在本书中首次登录虚拟服务器时,将会了解如何使用密钥。
Windows不提供SSH客户端,因此客户需要下载适用于Windows的PuTTY安装程序,然后安装PuTTY。PuTTY提供了一个名为PuTTYgen的工具,可以将mykey.pem文件转换为mykey.ppk文件,客户需要按照以下步骤操作。
(1)需要运行应用程序PuTTYgen,界面如图1-26所示。
(2)在“Type of key to generate”(要生成的密钥类型)下选择“SSH-2 RSA”。
(3)点击“Load”(加载)。
(4)因为PuTTYgen仅显示*.pkk文件,需要将“文件名”字段的文件扩展名切换到“所有文件”。
(5)选择mykey.pem文件,然后点击“Open”(打开)。
(6)确认对话框。
(7)将“Key comment”改成mykey
。
(8)点击“Save private key”。在没有密码的情况下,忽略关于保存密钥的警告。
图1-26 PuTTYgen允许将下载的pem文件转换成PuTTY需要的.pkk文件
.pem文件现在已转换为PuTTY所需的.pkk格式。当需要在本书中首次登录虚拟服务器时,我们会学习如何使用密钥。
在开始使用AWS账户之前,我们建议读者创建一个计费告警。如果超过免费套餐的额度,读者会收到告警邮件。本书中的示例如果超出了免费套餐的范围会给出一个提醒。为了确保在清理过程中没有遗漏任何内容,读者要按照AWS建议创建一个计费告警。
本章主要内容
在第1章中,我们了解了为什么AWS是运行Web应用的绝佳选择。在本章中,我们评估将一个博客站点的基础设施架构从假想公司的服务器迁移至AWS。
示例都包含在免费套餐中
本章中的所有示例都包含在免费套餐中。只要不是运行这些示例好几天,就不需要支付任何费用。记住,这仅适用于读者为学习本书刚刚创建的全新AWS账户,并且在这个AWS账户里没有其他活动。尽量在几天的时间里完成本章中的示例,在每个示例完成后务必清理账户。
你假想的公司目前在自己的服务器上使用WordPress来承载超过1000篇博客内容。由于用户不能忍受服务中断,博客站点的基础架构必须具备高可用的特点。为了评估这个迁移是否可行,需要完成如下工作。
WordPress用PHP编写,使用MySQL数据库存储数据,由Apache作为Web服务器来展现页面。根据这些信息,现在把你的需求映射到AWS服务之上。
可以使用4种不同的AWS服务把旧的基础设施复制到AWS。
图2-1展示了需要部署的全部基础设施。看起来有不少工作要做,让我们开始吧!
图2-1 该公司的博客网站的基础设施包括两台负载均衡的Web服务器 运行了WordPress和一台MySQL数据库服务器
如果你以为搭建步骤会有很多页,那么你现在可以高兴一下了。因为创建所有基础架构仅需在图形界面上完成一些点击操作,然后后台就会自动完成下列任务。
(1)创建一个ELB。
(2)创建一个应用MySQL数据库的RDS。
(3)创建并附加上安全组。
(4)创建两个Web服务器:
yum install php, php-mysql, mysql, httpd
;为了创建博客站点的基础设施,要打开AWS管理控制台并登录。点击导航栏中的“服务”,然后点击“CloudFormation”服务,将看到图2-2所示的界面。
图2-2 CloudFormation屏幕界面
注意
本书中的所有示例均使用弗吉尼亚北部(N.Virginia,也称为us-east-1)作为默认区域,如果没有额外的声明即使用该默认区域。在开始工作之前,要确保所选区域是弗吉尼亚北部。在AWS管理控制台的主导航栏右侧,可以确认或更换当前区域。
点击“创建堆栈”启动开始向导,共有4个步骤,如图2-3所示。
图2-3 创建一个博客站点的基础设施:第1步
在“选择一个模板”中选择“指定Amazon S3模板URL”,并且输入https://s3.amazonaws.com/ awsinaction/chapter2/template.json。然后点击“指定详细信息”,将堆栈名称设置为wordpress,将KeyName设置为mykey
,如图2-4所示。
图2-4 创建一个博客站点的基础设施:第2步
点击“下一步”,为基础设施打上标签(tag)。标签是由一个键值对组成,并且可以添加到基础设施的所有组件上。通过使用标签,可以区分测试和生产资源,也可以添加部门名称以追踪各部门成本,还可以在一个AWS账号下运行多个应用时为应用标记所关联的资源。
媒体上传和插件
WordPress使用MySQL数据库存储文章和用户数据。但在默认设置下,WordPress把上传的媒体文件和插件存储在一个名为wp-content的本地文件目录下,所以服务器不是无状态的。如果要使用多台服务器,就需要每个请求可以被任何一个服务器处理,但是由于上传的媒体和插件只保存在某一台服务器上,所以默认配置并不支持多台服务器的部署方式。
因为没有解决上述问题,所以本章中的示例还不够完整。如果读者有兴趣了解进一步的解决方案,参见第14章。第14章将介绍如何在启用虚拟机时自动安装WordPress插件,以及上传的媒体文件是如何集中保存到对象存储中的。
在这个示例中,我们将使用标签来标记WordPress系统的资源,这将有助于你以后轻松地找到自己的基础架构。使用system
作为键,wordpress
作为值。图2-5展示了标签的配置方法。
图2-5 创建一个博客站点的基础设施:第3步
点击“审核”,最后将看到一个确认页面,如图2-6所示。在“估算费用”一栏中,点击“费用”将在后台打开一个新标签页,我们将在下一节处理其中的内容。切换至原先的浏览器标签页,点击“创建”。
基础架构现在将被创建。如图2-7所示,名为wordpress
的堆栈正处于CREATE_IN_PROGRESS
状态。现在可以休息5~15 min,回来之后就会有惊喜。
图2-6 创建一个博客站点的基础设施:第4步
图2-7 审核界面
刷新页面查看结果,选择wordpress
一行,其状态应该是CREATE_COMPLETE
。如果状态仍然是CREATE_IN_PROGRESS
,请耐心等待直到状态变为CREATE_COMPLETE
。如图2-8所示,切换到“输出”标签,将看到wordpress
系统的URL访问链接,点击该链接即可访问。
图2-8 博客站点基础设施的成果
看到这里读者可能会问:其工作原理是什么呢?答案就是自动化。
自动化参考
AWS的关键概念之一就是自动化。用户可以自动化一切AWS的服务。在后台,这个博客站点的基础设施是按照一个蓝图创建的。第4章将介绍更多关于这个蓝图的内容,以及针对基础设施的编程理念。第5章将介绍如何自动化安装软件。
下一节,我们将探索这个博客站点的基础设施,以便更好地了解正在使用的各种服务。
现在我们已经创建了博客站点的基础设施,那就让我们一起来深入了解一下。基础设施包含了如下几个部分:
我们将使用控制台的资源组功能来总览所有内容。
资源组(resource group)是一个AWS资源的集合。资源是AWS服务或功能的抽象概念;资源可以是一台EC2服务器、一个安全组或者一个RDS数据库。资源可以用键值对作为标签来标记,而资源组可以指定拥有哪些标签的资源才能属于该组。此外,资源组会指定资源所处的区域(region)。当在一个AWS账户下运行多个系统时,客户可以使用资源组来归类各种资源。
还记得,我们之前给博客网站点基础设施标记的标签是,system
为键,wordpress
为值。在后文中,我们将采用(system:wordpress
)这样的记法来表示键值对。这里将使用此标签来为WordPress的基础设施创建一个资源组。如图2-9所示,点击导航栏的“资源组”部分,然后点击“创建资源组”。
图2-9 建立一个新的资源组
关于图中圆圈中的数字
在一些图中,如图2-9所示,我们将看到一些带圆圈的数字,它们标记了我们应该遵循的点击顺序,以便执行周围文字所述的流程。
现在我们将创建一个新的资源组。
(1)资源组的名字为wordpress
,或者选择一个自己喜欢的名字。
(2)添加标签,键为system
,值为wordpress
。
(3)选择区域为弗吉尼亚北部。
填写的表单看起来如图2-10所示。现在,保存资源组。
图2-10 为博客站点建立一个资源组
现在我们将看到图2-11所示的界面,在左边栏的EC2分类下选择“实例”就可以看到Web服务器。点击“Go”列的箭头图标,可以很容易地查看某一个Web服务器的细节。
图2-11 在资源组中的博客站点Web服务器
我们现在看到的是Web服务器(也称为EC2实例)的细节。图2-12展示了将会看到的主要内容,一些有趣的细节如下。
图2-12 博客站点基础设施中Web服务器的细节信息
选择“监控”标签查看Web服务器的使用程度。这将成为你日常工作的一部分:掌握基础设施的实际运行情况。AWS收集了一些系统指标,并把它们展示在监控功能里面。如果CPU利用率高于80%,应该添加第三台服务器,以防止Web页面加载时间过长。
点击左边栏EC2分类下的“负载均衡器”,可以看到所创建的负载均衡器,如图2-13所示。点击“开...”列中的箭头,就可以看到负载均衡器的细节。
图2-13 博客站点基础设施资源组中的负载均衡器
现在看一下负载均衡器的细节。图2-14展示了将会看到的主要内容。最有趣的是,负载均衡器是如何将流量转发到Web服务器的。
图2-14 负载均衡器服务于博客站点基础设施的细节
博客站点的基础设施的运行在80端口上,即HTTP协议的默认端口。创建的负载均衡器仅接受HTTP协议的连接,并会把一个请求转发给后端的一台监听80端口的Web服务器上。负载均衡器还会对关联的虚拟服务器进行运行状况检查。因为两台虚拟服务器工作正常,所以负载均衡器就会将流量转发过去。
如前所述,“监控”标签页里包含了一些有趣的指标,我们应该在生产环境里予以关注。如果流量模型突然变化,那么系统可能出现了问题。显示出来的HTTP错误数的指标会帮助我们对系统进行监控和排错。
最后但并非不重要的是,我们一起来看一下MySQL数据库。在wordpress
资源组中可以看到MySQL数据库。在左边栏选择RDS分类下的“数据库实例”,点击“开...”列的箭头(如图2-15所示),将看到数据库的细节信息。
图2-15 博客站点基础设施资源组中的MySQL
图2-16展示了MySQL数据库的细节信息。使用RDS的好处是,因为AWS平台会自动完成数据库备份,客户不再需要关心这些工作。同时,在自定义维护时间窗口后,AWS也将自动完成数据库更新。记住,可以按照实际需要选择适当的数据库的存储、CPU和内存大小。AWS提供了许多不同的实例类型,从1个CPU核、1 GB内存,到32个CPU核、244 GB内存,我们将在第9章了解到更多相关内容。
接下来,应该评估成本了,我们将在下一节分析博客站点基础架构的各项成本。
图2-16 博客站点基础设施中MySQL数据库的信息
估价是成本评估工作的一部分,可以使用“AWS简单月度计算器”(AWS Simple Monthly Calculator)来分析博客站点基础设施的成本。在2.1节中,点击“费用”链接就会打开另外一个浏览器标签页。现在切换到那个标签页,将看到如图2-17所示的内容。如果已经关闭了之前的标签页,可以登录如下链接:https://s3.amazonaws.com/awsinaction/chapter2/cost.html。
图2-17 博客站点基础设施的成本计算
点击“你的月度账单预估”,展开“Amazon EC2服务”和“Amazon RDS服务”两行。
在这个例子中,基础设施1个月将花费大约60美元,表2-1展示了其成本细节。
表2-1 使用AWS简单月度计算器计算基础设施的成本
AWS服务 |
基 础 设 施 |
月度成本(美元) |
---|---|---|
Amazon EC2计算 |
Web服务器 |
26.04 |
Amazon EC2 弹性LB |
负载均衡器 |
18.30 |
Amazon RDS DB实例 |
MySQL数据库 |
12.45 |
Amazon RDS存储 |
MySQL数据库 |
0.58 |
总 计 |
57.37 |
请注意,这只是一个估算的成本。每个月底,你将收到根据实际使用计算出来的账单。所有资源按需使用,账单是按小时或按GB数量计算的。那么,哪些因素会影响基础设施的实际使用呢?
预估基础设施的成本是一项复杂的任务。即时没有在AWS上运行也是如此。此外,灵活性是使用AWS可以得到的好处之一。如果预估的Web服务器数量过多,可以随时停止一台或几台,这就意味着同时停止了计费。
现在你已经对博客站点基础设施的成本有了大概的了解,接下来我们该关闭基础设施并完成迁移评估。
你成功地判断出了自己的公司可以将博客站点的基础设施迁移至AWS,并且每月的花费大约是60美元。现在你可以决定是否要继续执行这个迁移了。
为完成迁移评估,你需要删除博客站点基础设施使用的全部资源。因为使用并非真实的数据进行评估,所以不必担心数据丢失。
进入管理控制台的CloudFormation服务,执行如下操作。
(1)选择wordpress
这一行。
(2)点击“删除堆栈”,如图2-18所示。
图2-18 删除博客站点的基础设施
如图2-19所示,在确认删除之后,AWS会在几分钟内自动分析资源依赖关系并删除整个基础设施。
图2-19 确认删除博客站点的基础设施
这是管理基础设施的一种高效方法。正如自动化创建基础设施一样,删除也是完全自动化的。你可以随时按需创建或删除基础设施,仅需在基础设施上创建和运行时为之支付费用。