AWS EC2 总结和实验
Elastic Computing Cloud
其实本质就是个虚拟机。虚拟机的资源划分就和我们普通的服务器没啥区别。计算,存储,内存。所以AWS在提供EC2服务的时候也是这么划分的。当然因为业务的需求,现在细分了不少。英语名称为instance type:
一个compute optimized 的instance type的参数
当我们在launch一个EC2 intance的时候,需要选择一个AMI(AWS Machine Image)。我个人理解这个类似虚拟机硬盘的一个指针,(当然同时包含了实例需要的操作系统,应用程序及其相关的模板)。因为虚拟机的硬盘,内存等其实都是以文件的形式存在的。所以只要provision了一堆资源,当用户发起一个EC2,只要把预先弄好的指针指到相应的EBS 卷就可以了。
4种类型的AMI
- Published by AMI 免费的
- AMI Marketplace (这个是第三方发布的,例如微软会发布一个打完补丁的Windows 2016)
- Generated from Existing Instance 顾名思义
- Uploaded Virtual Services (可以用VMWare 的ova,vmdk文件生产虚拟机,因为我们知道AWS是基于KVM开发的)
AWS默认以及建议使用密钥对(Key Pair)的形式访问EC2实例,AWS将保存public key,用户负责保存私private key。
安全组(Security Group)检测数据包的端口、协议、源IP地址,类似一个stateful Firewall的作用。记住Security Group只有allow,没有deny
弹性IP(Elastic IP address): An elastic IP address is an address unique on the Internet that you reserve independently and associate with an Amazon EC2 instance. 其实可以把它简单的理解为公网地址。这个Elastic IP有个备份功能,即这台虚拟机挂了,接上来的虚拟机能继续使用这个elastic ip,从而实现冗余。Because it can be transferred to a replacement instance in the event of an instance failure, it is a public address that can be shared externally without coupling clients to a particular instance.
在开启EC2 instance的时候,有几个feature在实际运维中也可以有所帮助。
- Bootstraping:实际上就是在开机的时候刷一段脚本,可以是Linux bash,也可以是Windows Powershell
- VM import/export 不仅可以从AMI导入。也可以将现有的EC2导出,然后放入on-prem的环境里
- Instance meta data: http://169.254.169.254/latest/meta-data/ 会以json格式返回大量的关于此EC2 instance的attributes
EC2的计费类型On-Demand Instances 用多少付多少Reserved Instances 和AWS签一年或者三年的合同,可以获得折扣。同时买断这些运算资源Spot Instances 竞价实例,较为便宜,但同时用户得到的资源也不稳定Scheduled Reserved Instances Dedicated Instances Dedicated Hosts重点是前三种
开始进入console 创建一个EC2
第一个EC2, 选择AWS 的Linux,里面预装了AWS CLI,Ruby,Pythonstep 1 Choose AMIstep 2 选择instance typestep 3 配置参数这里说一下placement groupWhen you launch a new EC2 instance, the EC2 service attempts to place the instance in such a way that all of your instances are spread out across underlying hardware to minimize correlated failures. cluster:同一个AZ,一般使用在延时低的环境里面。同时,如果开启了CloudWatch对这台EC2进行监控会有额外费用产生。租户啥的不用管。一般都用最便宜的。
step 4 Add storage 其实就是创建一个EBS volumestep 5 Add Tags Step 6 Security GroupAWS竟然还能自动检测我家的ip地址……
当review 完launch之后,生成一对秘钥对。记得这个秘钥对需要用putty的generator重新load一下 变成ppk形式才能使用。然后Amazon Linux不是root user……是ec2-user...成功进入查看metadata的方法 curl http://169.254.169.254/latest/meta-data/
创建完EC2之后,也要捎带开一下这个dashboard个人觉得比较重要的是Tag。Tag可以在业务层面打上表示,在day2 的运维中,很多其他的AWS服务也能调用。典型例子就是IAM。
在创建EC2的时候,需要挂载一个卷。通常卷我们会使用EBS。注意EBS,其实是区别于S3的一种存储服务,也是可以存数据的,只不过单价较贵,我们通常只会用来给EC2的实例使用。比较有趣的是,EBS是可以脱离EC2实例存在的,即你terminate一个EC2的时候,你是可以选择是否保留这个EBS卷的。这个EBS卷,只在本AZ里面生效。这里我搬运一句study 贵的上的原话:Each Amazon EBS volume is automatically replicated within its Availability Zone to protect you from component failure。
EBS备份的方式是做snapshot,这个snapshot可以保存在S3上面,并且是incremental的。如果要将EBS卷复制到不同的AZ,那就是将这个快照复制到另外一个AZ,然后根据这个snapshot生成一个卷。
EBS根据需求一般分为三类,magenetic,general purpose SSD, provisioned-IOPS-SSD。加个么,肯定最后那个最贵啦。总结一下:
- 备份的快照将会保存在亚马逊S3 (Simple Storage System)上
- EBS快照属于ncremental backup,即只会在更新过的数据上做备份
- 你可以在EC2实例运行的状态下进行EBS的快照操作,但会给EC2的系统带来一定延迟(CPU,内存利用率会变高)
- 最佳实践是将EC2实例停止,然后将EBS从EC2上卸载下来,进行快照操作
- 你可以基于EBS Snapshot去创建一个新的EBS volume
- 加密的EBS volume创造的snapshot, 也是自动加密的
EC2/AMI/EBS/Snapshot的关系
如果想要将EC2从一个区域迁移到另外一个区域。唯一的方法就是如下:
- 从EC2中创建一个AMI
- 将此AMI复制到另一个region中,注意,虽然AMI 内容一样,但是AMI的ID是不同的
- 通过这个AMI创建一个EC2实例
- 将此EC2挂载的EBS卷,备份成snapshot
- 将snapshot迁移到另外一个区域(其实这是S3的操作),转换成一个EBS卷
- 将这个volume挂载到我们之前创建的EC2上
同一个AZ就不用那么麻烦了,直接创建一个你想要的用的EBS挂上去就行。
ELB/ALB/ASGAWS的load balancer在功能性上较为简单,只是简单的TCP,SSL。实际上就是F5的LTM的基础功能。不过在一般的生产环境中也够用了。load balancer本身也是managed service,所以不需要对太多的具体参数进行调优,也不需要考虑redundancy,打补丁等,因为本来就是分布式架构
study guide上把load balancingf和auto scaling 单独放在一章,配置界面里面可以看到实际上集成在EC2 dashboard的。
一边配置这个load balancer一边讲概念
Step 1: 基础配置Internet LB vs Internal LBInternet 好理解,一般来说end user都是通过用户名访问某些资源(通常是web server,所以这里我选择了ALB,listener 开启https 443)Internal LB 通常是放在web server访问application server之间。我放一段学习指南的原话:An Internet-facing load balancer might receive and balance external traffic to the presentation or web tier whose Amazon EC2 instances then send its requests to a load balancer sitting in front of the application tier.
注意在基础配置里面,会让你选择AZ,可以看出AWS的load balancer就是分布式架构。
Step 2: 安全配置这里的证书,其实就是一个根证书,用来validate用户访问的。取决于你是用internal 还是internet LB。
Step 3 Configuring Routing
选择target group,实际上就是F5里面的Pool,定义了一个业务/服务。
Step 4 Registering Targets往Pool 里面添加pool member。一般这时候Auto Scaling Group就派上用场了。附上茶馆的一张图:
Auto Scaling:自动地增加/减少EC2实例的数量,从而让你的应用程序一直能保持可用的状态。
Auto Scaling Plans:(一看名字就一目了然,没啥好说的)
- Manual Scaling
- Sceduled Scaling
- Dynamic Scaling
Auto Scling 的组件
- Launch Configuration其实就是一台EC2 一般需要的参数 (这个截图就不放了,基本和创建一台EC2 没设呢么区别,就是少了些步骤)AMI, keypair,Instance type, Security Group,IAM Role(这些可以复用的参数)
- Auto Scaling GroupName, Launch Configuration, AZ, Desired Capacity, Maximum Capacity, Load Balancer
- Scaling policy指的是在何种情况下我们需要添加或者删减EC2 的实例。Auto Scaling Group还可以根据CloudWatch的警报在调整。
放一张三个组件的关系。
这里补充一点IAM的操作。当我要在EC2上使用AWS CLI的时候,现在是不让的。需要创建一个基于SDK的user创建完之后会有个key 生成,记得需要保存。通过AWS configure进行配置就可以用AWS CLI啦。所以以此类推,这个可以看出基本上还是以一个json的形式。个人感觉这个对于devops意义不大,我个人还是更喜欢rest api
当我更改了这个policy之后,可以看见S3的操作就不能操作了。
不过这种方式毕竟有泄露key的风险,所以最保险的方法仍然是使用role。由于AWS的架构其实就是将各种服务串联在一块,所以很有必要熟练使用role。首先创建一个role,适用服务EC2,选择的策略S3fullAccess然后在EC2上attach![](https://s4.51cto.com/images/blog/202006/30/9ef2aade3df417f90515b667338a72d7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk