簡體   English   中英

如何從以前的EC2實例的AMI在VPC中啟動與EC2實例完全相同的副本

[英]How to Launch a exact same replica of a EC2 instance in VPC from the AMI of a previous EC2 instance

我有一個不能重新啟動的EC2實例A,但問題是它將要停機維護。 我基本上使用我的代碼創建此實例的AMI,如下所示:

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”的完全相同的副本,即需要啟動的實例必須具有相同的VPC,秒組,鍵名等。我在想我需要存儲實例A的詳細信息在變量中,然后使用它們從AMI或類似的東西啟動新實例。

PS:以下代碼有助於獲取實例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__)

下面的代碼將基本上獲取您要為其提供實例ID的系統的名稱,然后獲取現有系統的詳細信息以及新的副本系統

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM