使用boto连接到预先存在的Windows实例

时间:2016-01-17 23:01:40

标签: python amazon-web-services boto

我的代码是以下

import boto.ec2
conn = boto.ec2.connect_to_region("us-west-2",aws_access_key_id='secret1',aws_secret_access_key='secret2')




conn.run_instances(
        'i-41ffc2c0',
        key_name='MyWindowsKey',
        instance_type='t2.micro',
        security_groups=['launch-wizard-3'])


print conn

其中launch-wizard-3允许RDP连接没有问题。

现在,当我运行上述操作时,我收到以下错误:

Traceback (most recent call last):
  File "Documents/boto_test.py", line 11, in <module>
    security_groups=['launch-wizard-3'])
  File "/Library/Python/2.7/site-packages/boto/ec2/connection.py", line 973, in run_instances
    verb='POST')
  File "/Library/Python/2.7/site-packages/boto/connection.py", line 1208, in get_object
    raise self.ResponseError(response.status, response.reason, body)
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidParameterValue</Code><Message>Value () for parameter groupId is invalid. The value cannot be empty</Message></Error></Errors><RequestID>e9d2cb00-a49b-4de5-a60e-178067f88119</RequestID></Response>

这是我第一次通过boto连接到这个。

感谢您的任何指示。

2 个答案:

答案 0 :(得分:2)

从错误消息来看,似乎只提供security_groups是不够的。

创建新的ec2实例时请提供security_group_ids。您也可以在没有它的情况下创建实例,并在创建实例后添加安全组。

security_groups (字符串列表) - 用于关联实例的EC2经典安全组的名称

security_group_ids (字符串列表) - 与实例关联的VPC安全组的ID。

注意,您的代码中可能还有一个问题。哪个@jarmod指出了

i-41ffc2c0不是ami id,它是ec2实例id。您还需要更新它。

答案 1 :(得分:-2)

boto库用于管理AWS基础架构,例如启动新的EC2实例,停止它们以及终止它们。它不提供对这些EC2实例的RDP或SSH访问。

要连接到EC2实例,您可以使用常规Windows客户端,例如远程桌面连接(mstsc)或Putty for SSH。请参阅Connecting to your Windows instance using RDP

[已提供额外信息,表明OP寻求如何“启动,连接,断开连接并关闭”ec2实例的帮助

您需要了解的一件事是,较旧的AWS账户具有称为“EC2 Classic”和“VPC”的概念。较新的帐户只有VPC。我假设您的帐户较新,因此以下是您如何使用boto在特定子网中启动EC2实例(在VPC中,从子网ID推断):

r = conn.run_instances(
        image_id='ami-xxxxxxxx',
        key_name='MyWindowsKey',
        instance_type='t2.micro',
        subnet_id='subnet-xxxxxxxx',
        security_group_ids=['sg-xxxxxxxx'])

特别注意:

  • 第一个参数是AMI ID(不是原始帖子显示的实例ID)
  • 您需要提供子网ID(即现有VPC中现有子网的ID)
  • 您需要提供安全组 ID ,而不是名称,ID将采用sg-xxxxxxxx格式,而不是 launch-wizard-3 < / em>(这是'组名')。

要停止正在运行的EC2实例,您需要一个实例ID:

conn.stop_instances(instance_ids=['i-xxxxxxxx'])

要终止EC2实例,您需要一个实例ID:

conn.terminate_instances(instance_ids=['i-xxxxxxxx'])

有关在EC2中使用boto的更多一般示例,请参阅this tutorial