我的代码是以下
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连接到这个。
感谢您的任何指示。
答案 0 :(得分:2)
从错误消息来看,似乎只提供security_groups
是不够的。
创建新的ec2实例时请提供security_group_ids
。您也可以在没有它的情况下创建实例,并在创建实例后添加安全组。
security_groups (字符串列表) - 用于关联实例的EC2经典安全组的名称
security_group_ids (字符串列表) - 与实例关联的VPC安全组的ID。
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'])
特别注意:
要停止正在运行的EC2实例,您需要一个实例ID:
conn.stop_instances(instance_ids=['i-xxxxxxxx'])
要终止EC2实例,您需要一个实例ID:
conn.terminate_instances(instance_ids=['i-xxxxxxxx'])
有关在EC2中使用boto的更多一般示例,请参阅this tutorial。