我广泛使用EC2实例来测试分布式系统。不幸的是,有时我遇到了运行实例的限制,导致整个部署失败。我捕获了相应的异常,但我宁愿避免整个部署,而不是在启动多个实例后失败。为了避免这种情况,我想进行一次预检检查:
number_of_running_instances + number_of_required_instances <= instance_limit
我可以轻松检查number_of_running_instances
和number_of_required_instances
,但我找不到用于检查instance_limit
的API。更糟糕的是,AWS支持声称没有客户可见的api:
https://forums.aws.amazon.com/message.jspa?messageID=296314
此外,我不想假设该限制是默认的,因为我们公司的某些AWS账户申请了更高限额。
是否有解决该问题的解决方法?
答案 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
选项的所有实例类型)