AWS EC2现货市场 - 在特定可用区域上运行实例

时间:2017-07-22 20:15:15

标签: amazon-web-services amazon-s3 amazon-ec2 blender

我正在使用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的请求,即我 想要的可用区域

我错过了什么?

1 个答案:

答案 0 :(得分:0)

好的,我解决了。有两个问题。

1)事实证明我把可用区代码放在Python脚本中的错误位置 - 我把它放在随需应变功能中,而不是现场功能。所以现在实际上正在调用可用性代码。

2)我的语法很接近但不正确。没有必要像亚马逊的JSON文档所隐含的那样创建区域对象。 Placement应该只是一个带有可用区的字符串,如下所示:

dir

无论如何,问题解决了。