其实做为AWS管理员每天开操作平台其实风险还是比较高的,因为很多选项是支持多选的,有时候你可能不知道多选择了一个实例,在操作的时候很容易出现人为事故,比如终止一个实例,不小心终止了其它实例,是件非常恶心的事,所以当平台熟悉后就要多用下脚本操作平台,很多时候你根本不用登录平台就可以完成很多操作,今天因为开很多实例,抽空研究了怎么用boto实现创建一个实例的方法,如果你熟悉了平台操作,基本上脚本也很容易写了,写脚本不难,难在于你对create instance的理解,建立一个实例都需要制定什么条件,我们一起来看看:
1、需要一个镜像文件
2、需要指定访问的key或创建一个key
3、指定实例类型
3、需要指定或新建一个安全组,而且要给出访问端口,然后增加安全组规则
如果简单建一个实例,传入以上参数就够了,如果要建立一个符合实际应用的instance就需要给出很多参数,具体可以参考官方文档启动一个实例的参数,可以灵活定制符合你业务的实例,好了,现在开始我们的代码工作吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#!/usr/bin/env python import os import time import boto from boto import ec2 #制定镜像ID,实例类型,key名称扩展和保存地址,安全组名称,访问的端口,tag名称(非必须) def launch_instance(ami='ami-a8xxxxx', instance_type='t2.micro', key_name='pro', key_extension='.pem', key_dir='~/.ssh', group_name='bicher', ssh_port=22, cidr='0.0.0.0/0', tag='pow', user_data=None): #建立连接,创建key,非必须,你可以指定一个你现有的key ec2 = boto.ec2.connect_to_region('your region') try: key = ec2.get_all_key_pairs(keynames=[key_name])[0] except ec2.ResponseError, e: if e.code == 'InvalidKeyPair.NotFound': print 'Creating keypair: %s' % key_name key = ec2.create_key_pair(key_name) key.save(key_dir) else: raise #创建安全组 try: group = ec2.get_all_security_groups(groupnames=[group_name])[0] except ec2.ResponseError, e: if e.code == 'InvalidGroup.NotFound': print 'Creating secuity group:%s' % group_name group = ec2.create_security_group(group_name, 'A gourp description') else: raise #增加安全组策略 try: group.authorize('tcp', ssh_port, ssh_port, cidr) except ec2.ResponseError, e: if e.code == 'InvalidPermission.Duplicate': print 'security group: %s already authorized' % group_name else: raise #启动实例 reservation = ec2.run_instances(ami, key_name=key_name, security_groups=[group_name], instance_type=instance_type, user_data=user_data) instance = reservation.instances[0] print 'relax a moment :' while instance.state != 'running': print '.' time.sleep(5) instance.update() print 'done' #instance.add_tag(tag) return instance launch_instance(ami='ami-a8xxxxx',\ instance_type='t2.micro',\ key_name='test20150513',\ key_extension='.pem',\ key_dir='~/.ssh',\ group_name='your group name',\ ssh_port=22,\ cidr='0.0.0.0/0',\ tag='pro',\ user_data=None) |
以上就是全部代码了,部分我加了注释,整体的流程跟在页面上操作基本一样,只不过在页面选择的内容,需要在代码里指定好,比如镜像id等,今天创建实例的就写到这里了,还有很多没有提到,比如如何attache ebs,分配IP都没有提到,因为内容较多,后面部分需要单独写一篇来介绍,很晚了,研究快睁不开了,睡觉z~~~~~