如何从先前 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、sec 组、密钥名称等。
我在想我需要将实例 A 的详细信息存储在一个变量中,然后使用它们从 AMI 或类似的东西启动一个新实例。
P.S: 以下代码有助于获取实例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 的系统的 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
我有一个不能重启的 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、sec 组、密钥名称等。 我在想我需要将实例 A 的详细信息存储在一个变量中,然后使用它们从 AMI 或类似的东西启动一个新实例。
P.S: 以下代码有助于获取实例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 的系统的 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