亚马逊弹性计算云服务(Elastic Compute Cloud,EC2)是亚马逊提供的云计算环境的基本平台。网络数据流的流向非常复杂,企业和个人的网络平台所需的计算能力也随着这些流量增加在不断地变化着。利用亚马逊提供的各种应用接口,用户可以按照自己的需求随时创建、增加或删除实例。通过配置实例数量可以保证计算能力随着通信量的变化而变化。这样在提高访问者用户体验的同时也降低了成本,对于中小企业来说是非常有利的。本节主要讲解EC2体系的基本架构,侧重讲解其中涉及的一些基本概念,最后简单介绍服务中经常使用的一些命令。
EC2向用户提供了如下一些非常有价值的特性[8][10]。
1)灵活性:EC2允许用户对运行的实例类型、数量自行配置,还可以选择实例运行的地理位置,可以根据用户的需求随时改变实例的使用数量。
2)低成本:EC2使得企业不必为暂时的业务增长而购买额外的服务器等设备。EC2的服务都是按小时来收费的,而且价格非常合理。
3)安全性:EC2向用户提供了一整套安全措施,包括基于密钥对机制的SSH方式访问、可配置的防火墙机制等,同时允许用户对它的应用程序进行监控。
4)易用性:用户可以根据亚马逊提供的模块自由构建自己的应用程序,同时EC2还会对用户的服务请求自动进行负载平衡。
5)容错性:利用系统提供的诸如弹性IP地址之类的机制,在故障发生时EC2能最大程度地保证用户服务仍能维持在稳定的水平。
EC2的基本架构如图4-8所示。
图4-8 EC2基本架构
下面将对图中涉及的模块一一进行讲解,对于还有一些重要的未在图中表示出的概念也会做详细介绍。
AMI[13](Amazon Machine Image)是亚马逊机器映像,它是一个可以将用户的应用程序、配置等一起打包的加密机器映像。AMI是用户云计算平台运行的基础,所以,用户使用EC2服务的第一步就是要创建一个自己的AMI,这和使用PC首先需要操作系统道理相同。AMI是存储在S3(亚马逊的简单存储服务,后面会有讲解)中的,目前亚马逊提供的AMI有以下四种类型。
1)公共AMI:由亚马逊提供,可免费使用。
2)私有AMI:用户本人和其授权的用户可以进入。
3)付费AMI:向开发者付费购买的AMI。
4)共享AMI:开发者之间相互共享的一些AMI。
用户初次使用EC2时,可以以亚马逊提供的AMI为基础创建自己的服务器平台,也可以用EC2 社区提供的脚本来创建新的 AMI,但这种方法对用户的要求比较高,一般来说使用亚马逊提供的AMI即可。选定好AMI后需要将AMI打包压缩,然后加密并分割上传,最后再使用相关的命令将AMI恢复即可。
Instance[13]表示实例。当用户创建好AMI后,实际运行的系统就称为一个实例,实例和我们平时用的主机很像。EC2服务的计算能力是由实例提供的,因此可以说实例是EC2服务的核心内容之一。按照亚马逊目前的规定,每个用户最多可以拥有20个实例。每个实例自身携带一个存储模块(Instance Store),但是模块的设计并不是为了用户数据的长期存储,它只是一个临时存放区。当用户的实例重启后,它其中的内容还会存在,但如果出现故障或实例被终止后,存储在其中的数据将全部消失。因此对于一些重要的数据亚马逊建议保存在EBS中,这种方法会在后面讲解。按照计算能力来划分,实例可以被分成标准型[13]和高CPU型[13]。标准型实例的CPU和内存是按一定比例配置的,对于大多数的应用来说已经足够了。如果用户对于计算能力的要求比较高,可以选择高CPU型的实例,这种实例的CPU资源比内存资源要高。为了屏蔽底层硬件的差异,准确地度量用户实际使用的计算资源,EC2定义了所谓的CPU计算单元。一个EC2计算单元被称为一个ECU(EC2 Compute Unit)。表4-2[4]所示是目前可选的实例类型和其相关配置。
表4-2 实例类型和其相关配置
资 源 |
Small |
Large |
Extra Large |
High-CPU Medium |
High-CPU Extra Large |
平台 |
32位 |
64位 |
64位 |
32位 |
64位 |
CPU |
1ECU |
4ECU |
8ECU |
5ECU |
20ECU |
内存 |
1.7GB |
7.5GB |
15GB |
1.7GB |
7GB |
存储容量 |
160GB |
850GB |
1690GB |
350GB |
1690GB |
实例类型名 |
m1.small |
m1.large |
m1.xlarge |
c1.medium |
c1.xlarge |
需要注意的是,随着技术的发展和硬件成本的降低,表4-2中的内容也在不断地变化着。如果按照使用的方式来划分,实例可以被分为按需实例[13](On-demand Instance)和预留实例[13](Reserved Instance)。按需实例不需要提前支付任何费用,当需要时就直接使用,用完后按小时付费即可。这比较适合于那些对于EC2使用不是很频繁的用户。如果需要使用预留实例的话则必须首先对所需实例做出预定,并为这些实例预先支付一定的费用。但是你以后在一定期限内使用这些服务时就可以享受很大的折扣。对于需要长期使用EC2的用户来说很划算,建议使用这种类型。但要注意的是实际使用的实例必须和预留的实例是同一类型且在同一个可用区域,只有这样才可以享受到相应的优惠。可用区域的概念将在后面讲解。
前面提到,实例自身也携带了一个存储模块,但是该模块的缺点在于它只是一个临时的存储空间。对于需要长期保存或者比较重要的数据,则用户需要存储模块来完成,这个模块就是弹性块存储(Elastic Block Store,EBS)[13]。和S3不同,它是专门为EC2设计的,所以可以更好地和EC2配合使用。EBS允许用户创建卷(Volume),卷的功能和我们平常使用的移动硬盘非常类似。亚马逊限制每个EBS最多创建20个卷,每一个卷可以作为一个设备挂载(Mounted as a Device)在任何一个实例上。挂载以后就可以像使用EC2的一个固有模块一样来使用它,这点和S3是完全不同的。因此用户需要使用EC2服务时,推荐使用EBS作为其存储对象。当实例被终止时,EBS上的数据会继续保存下去直到用户自己删除它,这就和关机后移动硬盘上的数据还会长久保存是一个道理。快照(Snapshot)是EBS提供的一个非常实用的功能,可以捕捉当前卷的状态,然后数据就可以被存储在S3中。对于习惯使用S3的用户来说这是一个很方便的功能,快照的另一个功能是用来作为创建一个新卷的起始点。
区域[13](Zone)是EC2中独有的概念。亚马逊将区域分为两种:地理区域(Region Zone)和可用区域(Availability Zone)。其中地理区域是按照实际的地理位置划分的,而可用区域的划分则是为了隔绝各个区域之间的错误,这样某个可用区域的错误就不会影响到别的可用区域。因此,可用区域实际就是人工隔绝出的一个“孤岛”。
从图4-9可以很明显地看出两者关系。EC2
系统中包含多个地理区域,而每个地理区域中又包含多个可用区域。为了确保系统的稳定性,用户最好将自己的多个实例分布在不同的可用区域和地理区域中。这样在某个区域出现问题时可以用别的实例代替,最大程度地保证了用户利益。
图4-9 EC2中区域间关系
在EC2服务中,系统各模块之间以及系统和外界之间的信息交互是通过IP地址来进行的。EC2中的IP地址包括三大类:公共IP地址[13](Public IP Address)、私有IP地址[13](Private IP Address)以及弹性IP地址[13](Elastic IP Address)。EC2的实例一旦被创建就会自动地分配两个IP地址,也就是公共IP地址和私有IP地址。公共IP地址和私有IP地址之间通过网络地址转换(Network Address Translation,NAT)技术来实现相互之间的转换。公共IP地址和特定的实例相对应,在某个实例终结或者被弹性IP地址替代之前,公共IP地址会一直存在,实例通过这个公共IP地址和外界进行通信。私有IP地址也和某个特定的实例相对应,它由动态主机配置协议(DHCP)分配产生。私有IP用于实例之间的通信流程,从图4-8中可以很容易看出。与公共IP和私有IP地址相对应的还有两个概念,那就是外部DNS名(Public DNS Name)和内部DNS名(Internal DNS Name)。外部DNS名用于实例和外部通信时域名的解析,内部DNS名用于对私有IP 地址的解析,在EC2外不起作用。
对网络传输中的数据进行控制的一个非常有效的办法是配置防火墙。但是传统的防火墙的规则是建立在IP地址、子网范围等基础之上的,EC2的特点之一就是允许用户随时更新实例状态,用户可以随时加入或者删除实例。实例状态的动态变化方便了用户,但是却给防火墙的配置带来了麻烦,为此EC2引入了安全组[13](Security Group)的概念。安全组其实就是一组规则,用户利用这些规则来决定哪些网络流量会被实例接受,其他则全部拒绝。一个用户目前最多可以创建100个安全组。当用户的实例被创建时,如果没有指定安全组,则系统自动将该实例分配给一个默认组(Default Group)。默认组只接受组内成员的消息,拒绝其他任何消息。当一个组的规则改变后,改变的规则自动适用于组中所有的成员。
用户在访问EC2时需要使用SSH(Secure Shell)密钥对[13](Key Pair)来登录服务。SSH是目前对网络上传输的数据进行加密的一种很可靠的协议,当用户创建一个密钥对时,密钥对的名称(Key Pair Name)和公钥(Public Key)会被储存在EC2中。在用户创建新的实例时,EC2会将它保存的信息复制一份放在实例的元数据(Metadata)中,然后用户使用自己保存的私钥(Private Key)就可以安全地登录EC2并使用相关服务了。这一过程如图4-10[13]所示。
图4-10 用户使用密钥对登录服务
在EC2的容错机制中,使用弹性IP地址是非常有效的一种方法。在创建实例时,系统会分配一个公共IP和一个私有IP给实例。用户是通过Internet利用公共IP地址访问实例的,但每次启动实例时这个公共IP地址都会发生变化。而DNS解析器中的IP地址和DNS名称的映射关系的更新是需要时间的,为了解决这个问题,EC2引入了弹性IP地址的概念。弹性IP地址和用户账号绑定而不是和某个特定的实例绑定,这给系统的容错带来极大的方便。当系统正在使用的实例出现故障时,用户只需要将弹性IP地址重新映射到一个新的实例即可,这样在访问服务时不会感觉到任何差异。这也是前面为什么建议在不同的区域建立实例的原因,当某一区域出现问题时可以直接用其他区域的实例来代替。因为所有区域的实例都出现故障的概率几乎为零,所以通过弹性IP地址改变映射关系总可以保证有实例可用。
EC2中常用的一些API主要有以下几种。
1)ec2-bundle-vol:通过对本地机器的根文件系统进行打包、加密、建立快照的方式创建新的AMI。
2)ec2-upload-bundle:将打包后的AMI上传到S3中。
3)ec2-download-bundle:从S3中下载指定的打包文件。
4)ec2-unbundle:将分割后的打包文件重新组合成AMI。
5)ec2-delete-bundle:从S3中删除指定的包。
6)ec2-migrate-bundle:将打包的AMI从一个地理区域复制到另一个地理区域。
1)ec2-run-Instances:基于某个AMI运行一个或多个实例。
2)ec2-terminate-Instances:终止指定实例。
1)ec2-create-volume:从快照或者用户指定大小的空卷中创建新的EBS卷。
2)ec2-delete-volume:删除指定卷。
3)ec2-attach-volume:将卷挂载到实例上并指定其为某个特定设备。
4)ec2-detach-volume:从实例中卸载卷。
5)ec2-create-snapshot:创建当前卷状态的快照并存储在S3中。
6)ec2-delete-snapshot:删除卷快照。
1)ec2-add-group:创建新的安全组。每个账户内的组名必须唯一。
2)ec2-delete-group:删除指定的安全组。
3)ec2-authorize:向指定安全组中添加规则。默认接受所有请求。
4)ec2-revoke:撤销安全组中某个规则。
1)ec2-allocate-address:获取一个弹性IP地址。
2)ec2-release-address:释放一个弹性IP地址。
3)ec2-associate-address:将弹性IP和指定实例进行关联。
4)ec2-disassociate-address:解除弹性IP和指定实例的关联关系。
1)ec2-add-keypair:产生一个由用户指定名称的RSA密钥对。
2)ec2-delete-keypair:通过从EC2中移除公钥来删除该密钥对。
转载自:http://blog.csdn.net/gloud/archive/2010/06/12/5667571.aspx