我正在使用Brenda console和Brenda在云中进行一些Blender渲染。 Brenda使用EC2-classic。
我很难获得价格合理的EC2实例,因为AWS总是挑选一个我不想要的昂贵的可用区域,因此我永远无法启动渲染。我希望能够在渲染开始时选择我的可用区域。
我在美国东部(弗吉尼亚州)。当我在布兰达控制台上查看价格时,我得到的结果如下:
Spot price data for instance c3.large
us-east-1a 2017-07-22T12:28:47.000Z $0.0156
us-east-1b 2017-07-22T12:28:47.000Z $0.0158
us-east-1c 2017-07-22T12:28:47.000Z $0.0159
us-east-1d 2017-07-22T12:28:47.000Z $1.05
us-east-1e 2017-07-22T13:31:02.000Z $0.016
us-east-1f 2017-07-22T12:28:47.000Z $1.05
Spot price data for instance c3.xlarge
us-east-1a 2017-07-22T09:00:40.000Z $0.0428
us-east-1b 2017-07-22T13:04:01.000Z $0.0426
us-east-1c 2017-07-22T12:16:19.000Z $0.0427
us-east-1d 2017-07-22T07:12:25.000Z $2.1
us-east-1e 2017-07-22T11:42:37.000Z $0.0436
us-east-1f 2017-07-22T07:12:25.000Z $2.1
无论我选择哪种情况,我都想使用us-east-1a的可用区,因为它是最便宜的。但是,当我开始渲染工作时,我总是以us-east-1d结束,这是最昂贵的可用区。我的0.02美元出价无处可去,因为我们东1d的价格远远高于其他区域。
AFAIK,我无法设置我的AWS账户,因此它默认选择us-east-1a。 (如果有办法,请告诉我。)看来我必须在请求我的实例时发送实际可用区域。
我相信我需要修改第39行附近的代码here,以便我可以传入所需的可用区域。我想我需要做这样的事情,我通过展示位置密钥在可用区域发送:
zone = {
'availability_zone': 'us-east-1a',
}
run_args = {
'image_id' : ami_id,
'max_count' : opts.n_instances,
'instance_type' : itype,
'user_data' : user_data,
'key_name' : ssh_key_name,
'security_groups' : sec_groups,
'block_device_map' : bdm,
'placement' : zone,
}
...然后这段代码将调用AWS:
ec2 = aws.get_ec2_conn(conf)
reservation = ec2.run_instances(**run_args)
然而,这似乎不是正确的解决方案,因为它仍然启动了对us-east-1d的请求,即我 想要的可用区域
我错过了什么?
答案 0 :(得分:0)
1)事实证明我把可用区代码放在Python脚本中的错误位置 - 我把它放在随需应变功能中,而不是现场功能。所以现在实际上正在调用可用性代码。
2)我的语法很接近但不正确。没有必要像亚马逊的JSON文档所隐含的那样创建区域对象。 Placement应该只是一个带有可用区的字符串,如下所示:
dir
无论如何,问题解决了。