我正在尝试使用python-boto配置多个网络的opensatck设置启动实例。
但我得到了以下错误,
EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0"?>
<Response><Errors><Error><Code>NetworkAmbiguous</Code><Message>Multiple possible networks found, use a Network ID to be more specific.</Message></Error></Errors><RequestID>req-28b5a4e8-3838-4111-95db-337c5048716d</RequestID></Response>
我的代码就像这里一样,
from boto import ec2
ostack = ec2.connection.EC2Connection(
ec2_access_key, ec2_secret_key, is_secure=False, port=8773, region='nova',
path='/services/Cloud'
)
ostack.run_instances('ami-xxxxx', key_name='BotoTest')
以上版本适用于配置为openstack的单个网络。
注意:run_instances没有network-id的关键字参数。
我犯了错误或如何解决?或者它是python-boto中的错误?
提前谢谢。
答案 0 :(得分:2)
我认为这不是boto的错误,boto是为与AWS-API进行通信而构建的。虽然大多数EC2-AWS功能与EC2-OpenStack API配合良好,但某些功能尚未实现,并且可通过HTTP-Error 500或400进行应答。
AWS将VPC(虚拟私有云)用作网络,将可用区用作子网。两者都有一个默认设置,如果在创建新实例时没有进一步的规范,则会采用该设置。但是在OpenStack中,我看不到将网络和子网标记为默认值的可能性。
在我的尝试中,private_ip_address
和subnet_id
都无法在run_instances()
指定网络/子网,如果OpenStack上有多个网络/子网。
编辑:如果您只有一个网络/子网,以下代码可以在trystack.org上与boto一起使用:
import boto
conn = boto.connect_ec2_endpoint("http://8.21.28.222:8773/services/Cloud",aws_access_key_id='...',aws_secret_access_key='...')
new_instance = conn.run_instances("ami-00000020", key_name="trystack", security_groups=["default"], instance_type="m1.small")
答案 1 :(得分:0)
from boto import ec2
ostack = ec2.connection.EC2Connection(
ec2_access_key, ec2_secret_key, is_secure=False, port=8773, region='nova',
path='/services/Cloud', debug=1
)
然后
ostack.run_instances('ami-xxxxx', subnet_id='your network id', key_name='BotoTest')
亚马逊将其用于VPC网络?你在运行VPC吗?