【问题标题】:AWS EC2 spot market - run instance on a particular Availability ZoneAWS EC2 现货市场 - 在特定可用区上运行实例
【发布时间】:2017-12-28 18:02:56
【问题描述】:

我正在使用 Brenda console 和 Brenda 在云中进行一些 Blender 渲染。 Brenda 使用 EC2-classic。

我很难获得价格合理的 EC2 实例,因为 AWS 总是选择我不想要的昂贵的可用区,因此我永远无法开始渲染。我希望能够在渲染开始时选择我的可用区。

我在美国东部(弗吉尼亚州)。当我在 Brenda 控制台上查看价格时,我得到如下所示的内容:

    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 美元的出价没有结果,因为 us-east-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 的请求,这是我想要的可用区。

我错过了什么?

【问题讨论】:

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


    【解决方案1】:

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

    1) 事实证明,我将可用区代码放在 Python 脚本中的错误位置——我将它放在按需函数中,而不是点函数中。所以现在实际调用了可用性代码。

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

        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'        : 'us-east-1a',
        }
    

    不管怎样,问题解决了。

    【讨论】:

    • 旁注:您可以指定子网,而不是指定可用区。这会将实例启动到 VPC 内的特定子网中。由于子网是在 AZ 内创建的,因此它还标识要使用的AZ。
    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2020-01-13
    • 2015-04-21
    相关资源
    最近更新 更多