用于检查EC2实例限制的API?

时间:2013-01-09 16:20:14

标签: amazon-web-services amazon-ec2

我广泛使用EC2实例来测试分布式系统。不幸的是,有时我遇到了运行实例的限制,导致整个部署失败。我捕获了相应的异常,但我宁愿避免整个部署,而不是在启动多个实例后失败。为了避免这种情况,我想进行一次预检检查:

number_of_running_instances + number_of_required_instances <= instance_limit

我可以轻松检查number_of_running_instancesnumber_of_required_instances,但我找不到用于检查instance_limit的API。更糟糕的是,AWS支持声称没有客户可见的api:

https://forums.aws.amazon.com/message.jspa?messageID=296314

此外,我不想假设该限制是默认的,因为我们公司的某些AWS账户申请了更高限额。

是否有解决该问题的解决方法?

6 个答案:

答案 0 :(得分:7)

仅供参考,可以查询您的AWS账户限额,请参阅:http://alestic.com/2013/12/ec2-account-attributes

答案 1 :(得分:3)

不,没有办法做到这一点。但实际上没有必要这样做,因为捕获异常(并优雅地处理它)是一个更好的设计。当启动整个机群时,可能会出现任何问题:API调用神秘地消失在虚空中,AWS无法在请求的AZ中启动某个实例类型,实例和EBS卷可能在创建期间卡住等。

由于部署AWS资源时可能会出现大量未知问题,因此您应该定期计划发生的问题。您的代码需要预测并解决它。

值得注意的是,您正在使用CloudFormation模板进行配置,与此相关的大部分痛苦都得到了缓解。所有资源的回滚都会在出错时自动执行。

答案 2 :(得分:3)

您可以使用amazon describe-account-attributes来获取aws帐户的限制。

“aws ec2 describe-account-attributes”

答案 3 :(得分:1)

Boto中的示例

from boto.ec2.connection import EC2Connection

__author__ = 'uva'

conn = EC2Connection(aws_secret_access_key="+secret_key",
                     aws_access_key_id="access_key")
attributes = conn.describe_account_attributes()
for attribute in attributes:
    print(attribute.attribute_name + " : " + str(attribute.attribute_values))

示例回复

vpc-max-security-groups-per-interface : [u'5']
max-instances : [u'20']
supported-platforms : [u'VPC']
default-vpc : [u'vpc-e1e73484']
max-elastic-ips : [u'5']
vpc-max-elastic-ips : [u'5']

答案 4 :(得分:1)

您可以使用Trusted Advisor。这是Boto API的链接。 对于每个服务,您可以获得限制名称,区域,限额和当前使用。您可以编写一个小包装器并获取所需的值。

如果您已登录到您的AWS账户,则此link应显示有关当前限制和服务使用情况的所有详细信息。

答案 5 :(得分:0)

AWS似乎添加了此内容,尽管奇怪的是它是“ gamelift” API的一部分,而不是在“ ec2”下。

即使我从未使用过GameLift,其输出也与在console.aws.amazon.com-> EC2->限制网页中找到的内容匹配。

示例:

$ aws gamelift describe-ec2-instance-limits --ec2-instance-type t2.micro
{
    "EC2InstanceLimits": [
        {
            "EC2InstanceType": "t2.micro",
            "CurrentInstances": 0,
            "InstanceLimit": 20
        }
    ]
}

(它输出不带--ec2-instance-type选项的所有实例类型)