4

我广泛使用 EC2 实例来测试分布式系统。不幸的是,有时我达到了运行实例的限制,导致整个部署失败。我发现了适当的异常,但我更愿意避免整个部署,而不是在启动多个实例后失败。为了避免这种情况,我想进行飞行前检查:

number_of_running_instances + number_of_required_instances <= instance_limit

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

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

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

有什么办法可以解决这个问题吗?

4

6 回答 6

8

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

于 2014-03-05T06:20:22.457 回答
3

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

“aws ec2 描述帐户属性”

于 2014-07-16T17:03:14.507 回答
2

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

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

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

于 2013-01-09T17:42:34.043 回答
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']
于 2015-01-19T10:26:48.013 回答
1

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

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

于 2015-11-03T11:00:41.083 回答
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选项)

于 2018-08-10T18:29:10.063 回答