【问题标题】:How to Launch a instance in VPC using boto?如何使用 boto 在 VPC 中启动实例?
【发布时间】:2015-09-30 13:53:52
【问题描述】:

我需要从 AMI 启动一个实例..此外..我需要启动具有与创建 AMI 的原始实例相同的属性的新实例..即,相同的 VPC id、相同的 key_name、相同_region 等

我的代码接受的是:

reservations = conn.get_all_instances(instance_ids=[sys.argv[1]])
instances = [i for r in reservations for i in r.instances]
for i in instances:
    key_name = i.key_name
#    security_group = "sg-f05ee295"      #i.groups
    instance_type = i.instance_type
#    print security_group[0]
#    subnet_name = i.subnet_id
    reserve = 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

这不起作用,因为它说::

boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidParameterCombination</Code><Message>VPC security groups may not be used for a non-VPC launch</Message></Error></Errors><RequestID>57c29a87-8f6c-462d-a16b-7a4888dd5341</RequestID></Response>

帮帮我!!!!!!!

【问题讨论】:

    标签: python amazon-web-services boto


    【解决方案1】:

    我遇到了同样的问题..你需要做的就是这个

    reservations = conn.get_all_instances(instance_ids=[sys.argv[1]])
    instances = [i for r in reservations for i in r.instances]
    for i in instances:
        key_name = i.key_name
        security_group = i.groups[0].id
        instance_type = i.instance_type
        print "Now Spinning New Instance"
        subnet_name = i.subnet_id
        reserve = conn.run_instances(image_id=ami_id,key_name=key_name,instance_type=instance_type,security_group_ids=[security_group],subnet_id=subnet_name)
    

    这将解决您的问题。问候 \m/

    【讨论】:

    • 是的,我检查过了..我对子网和 sec_group id 的东西感到困惑..就像你说的那样工作:)
    • 嗨 Nishant/Killercrock,我更新了上面的代码,因为如果 SG 超过 1 个,它不会创建精确的副本
    • @padmakarojha 如果答案有问题,请在评论中指出并添加您自己的答案。
    【解决方案2】:

    所以基本上,Nishant 的回答会起作用,但如果有多个 SG,你不会得到精确的副本:

    请参考以下代码:

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

    参考:我在这个帖子上回答了同样的问题 How to Launch a exact same replica of a EC2 instance in VPC from the AMI of a previous EC2 instance

    【讨论】:

    • 好吧..对..你也用过 vpc_id = i.vpc_id ,这是必需的吗?因为我没有看到它在任何地方被传递/使用
    • 不,它不是必需的,子网负责那部分,这个 sn-p 是较大代码的一部分,它刚刚离开,你可以忽略它或者只是删除它。我将在上面进行相同的编辑,
    猜你喜欢
    • 2014-02-01
    • 2015-08-26
    • 2020-05-29
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2013-04-26
    相关资源
    最近更新 更多