2015-09-28 107 views
0

我有一个EC2实例A,不能重新启动,但问题是它将因维护而关闭。我基本上是用我的代码如下所示创建该实例的AMI:如何从以前的EC2实例的AMI启动VPC中的EC2实例的完全相同的副本

import boto.ec2 
import time 
import sys 
conn = boto.ec2.connect_to_region("ap-southeast-1") 

image_id = conn.create_image(sys.argv[1], "nits", description="Testing", no_reboot=True, block_device_mapping=None, dry_run=False) 
image = conn.get_all_images(image_ids=[image_id])[0] 

while image.state != 'available': 
    time.sleep(10) 
    image.update() 
    print "The image is being Created, Please wait!! state:%s" % (image.state) 

if image.state == 'available': 
    print "AMI CREATED SUCCESSFULLY with AMI id = %s" % image_id 
else: 
    print "Something Went Wrong!!" 

上述脚本工作正常,并创建我提供作为系统参数的实例的AMI。我需要启动实例“A”的EXACT SAME REPLICA,即需要启动的实例需要具有相同的VPC,SEC组,键名等。 我想我需要存储实例A的在变量的详细信息,然后利用它们来从AMI或类似的东西推出一个新的实例..

PS:该follwing代码有助于获得实例A的细节:

reservations=conn.get_all_instances(sys.argv[1]) 
instances = [i for r in reservations for i in r.instances] 
for i in instances: 
    print(i.__dict__) 

回答

0

下面的代码将基本上采用您将提供实例id的系统的ami,然后它提取现有系统的详细信息,并提供新的复制系统

from boto.regioninfo import * 
from boto.ec2.connection import EC2Connection 

# Enter Instance ID here for which you want replication 
instance_id = 'i-XXXXXXXX' 

# AWS connect info 
aws_access_key_id='########## AWS Access Key ############' 
aws_secret_access_key='########### AWS Secret Key ############' 
region_name='ap-southeast-1' 
region_ec2_endpoint='ec2.ap-southeast-1.amazonaws.com' 

# Connect EC2 
aws_region = RegionInfo(name=region_name, endpoint=region_endpoint) 
conn = EC2Connection(aws_access_key_id,aws_secret_access_key,region=aws_region) 

# create ami 
print "Step 1 : Creating ami" 
ami_id = conn.create_image(instance_id,"testami",no_reboot=True) 
ami_status = "Pending" 
print "ami is being launched " + ami_id 

# check_ami_status 
image = conn.get_image(ami_id) 
while image.state == "pending": 
    time.sleep(10) 
    image = conn.get_image(ami_id) 
    print "ami is in pending state, waiting for 10 sec before next check" 

image = conn.get_image(ami_id) 
print "Image is now " + image.state 

reservations = conn.get_all_instances(instance_ids=[instance_id]) 
instances = [i for r in reservations for i in r.instances] 
for i in instances: 
    key_name = i.key_name 
    security_group = [] 
    for each in i.groups: 
     security_group.append(each.id) 
    instance_type = i.instance_type 
    subnet_name = i.subnet_id 
    vpc_id = i.vpc_id 
    reserve = conn.run_instances(image_id=ami_id,subnet_id=subnet_name ,key_name=key_name,instance_type=instance_type,security_group_ids =security_group) 
    print "new replica system id is " + reserve.instances[0].id 
+1

<?XML版本= “1.0” 编码= “UTF-8”?> InvalidParameterCombination参数组名不能与参数子网 5242ae3a-03EA-491C-a230-5d86afcc3870使用 我需要在VPC中做到这一点 –

+0

Nishant尝试更新/编辑答案,我们需要一个sg_ids数组,早些时候它是一个对象数组。 – padmakarojha

+1

我试图用了硬编码SG名称: 实例= [我当r在预订我在r.instances] 因为我在实例: KEY_NAME = i.key_name #security_group = “SG-f05ee295” #I .groups INSTANCE_TYPE = i.instance_type #打印security_group [0] #子网名称= i.subnet_id 储备= conn.run_instances(image_id = ami_id,KEY_NAME = KEY_NAME,INSTANCE_TYPE = INSTANCE_TYPE,security_group_ids = [ 'SG-f05ee295'] ) print“new replica system id is”+ reserve.instances [0] .id 仍然说我无法使用VPC子群进行非VPC启动 –