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

 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__)

上面的代码能够获取我作为参数提供的实例的详细信息,我需要从该实例的 ami 启动一个新实例,我如何将详细信息存储在一个变量中,然后使用它来启动一个新实例个人电脑??

4

2 回答 2

0

所以你需要通过 , 的属性instance(替换iinstance有意义)

>>> instance.image_id
u'ami-XXXXXXX'

>>> instance.vpc_id
u'vpc-XXXXXXXX'

>>> dir(instance)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_in_monitoring_element', '_placement', '_previous_state', '_state', '_update', 'add_tag', 'add_tags', 'ami_launch_index', 'architecture', 'block_device_mapping', 'client_token', 'confirm_product', 'connection', 'create_image', 'dns_name', 'ebs_optimized', 'endElement', 'eventsSet', 'get_attribute', 'get_console_output', 'group_name', 'groups', 'hypervisor', 'id', 'image_id', 'instance_profile', 'instance_type', 'interfaces', 'ip_address', 'item', 'kernel', 'key_name', 'launch_time', 'modify_attribute', 'monitor', 'monitored', 'monitoring', 'monitoring_state', 'persistent', 'placement', 'placement_group', 'placement_tenancy', 'platform', 'previous_state', 'previous_state_code', 'private_dns_name', 'private_ip_address', 'product_codes', 'public_dns_name', 'ramdisk', 'reason', 'reboot', 'region', 'remove_tag', 'remove_tags', 'requester_id', 'reset_attribute', 'root_device_name', 'root_device_type', 'sourceDestCheck', 'spot_instance_request_id', 'start', 'startElement', 'state', 'state_code', 'state_reason', 'stop', 'subnet_id', 'tags', 'terminate', 'unmonitor', 'update', 'use_ip', 'virtualization_type', 'vpc_id']

如果您需要运行一个新实例,请通过

启动实例

run_instances 的一部分

于 2015-09-28T07:56:50.790 回答
0

以下面的代码为参考,使用 instance.image_id 获取图像 id ,然后使用 run_instances 方法启动新实例。

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

instances = ['enter instance id here']
key_name = "keyname"
security_group = ['security group ids in array']
instance_type = "c3.xlarge"
subnet_name = "subnet-id"

# 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)

reservations = conn.get_all_instances(instance_ids=instances)
instances = [i for r in reservations for i in r.instances]
for i in instances:
    image_id = i.image_id
    reserve = conn.run_instances(image_id=image_id,key_name=key_name,subnet_id=subnet_name ,instance_type=instance_type,security_group_ids =security_group)
    print "new system id is " + reserve.instances[0].id
于 2015-09-28T08:48:02.997 回答