如何通过boto3获得AWS EC2的配额?

时间:2016-09-28 09:18:50

标签: python amazon-web-services boto3

我正在研究boto3 - 适用于AWS的SDK python。

如何通过boto3库获取AWS服务限制,如下图:

http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html

3 个答案:

答案 0 :(得分:3)

可以通过EC2.Client.describe_account_attributes()

查询其中一些限制
  

describe_account_attributes(**kwargs)

     

描述你的属性   AWS账户。以下是支持的帐户属性:

     

...

     
      
  • max-instances:您可以使用的最大按需实例数   运行

  •   
  • vpc-max-security-groups-per-interface:最大数量   您可以分配给网络接口的安全组。

  •   
  • max-elastic-ips:您的最大弹性IP地址数   可以分配用于EC2-Classic。

  •   
  • vpc-max-elastic-ips:The   您可以分配使用的最大弹性IP地址数   使用EC2-VPC。

  •   

答案 1 :(得分:0)

为什么不使用awsLimitchecker? 我每天早上用它来创建一个报告并将其发送给一个松散的小组,在那里我监控我们当前的限制。工作得很好。

答案 2 :(得分:0)

有一个比 awsLimitChecker 更好的选项,因为并非可以通过它检索所有AWS服务实例的配额,例如,对于许多EC2实例,您需要使用TrustedAdvisor service和许多EC2根本无法检索服务实例的配额。同样,AWS最近也将基于按需服务配额EC2实例的限制更改为基于vCPU的限制,分类如下:

  • 运行按需标准(A,C,D,H,I,M,R,T,Z)实例-> 1152个vCPU
  • 运行按需F实例-> 128个vCPU
  • 运行按需G实例-> 128个vCPU
  • 运行按需P实例-> 128个vCPU
  • 运行按需X实例-> 128个vCPU

检索服务配额的另一种方法是使用boto3's Service Quota client。您可以使用list_service_quotas之类的API来检索aws服务( ec2 )的服务配额支持的完整列表。或者对于特定的服务配额,您可以使用get_service_quota。另外,要使用上述API,请确保将service quotas actions(策略)添加到IAM用户/组中。

以下是源代码段。

import boto3

map_quota_codes = {}
client = ''

def get_service_quota(self, quota_name):
    """
    Retrieves requested AWS service quota.
    :param str quota_name: Full name of Quota e.g. Running On-Demand Standard (A, C, D, H, I, M, R, T, Z) instances
    """
    if not map_quota_codes or quota_name not in map_quota_codes:
        return {}

    quota_code = map_quota_codes[quota_name]["QuotaCode"]
    res = client.get_service_quota(ServiceCode = 'ec2', QuotaCode = quota_code)

    return res["Quota"]

if __name__ == "main":

    # AWS account login should be done here.
    client = boto3.client('service-quotas')
    service_quota_resp = self.client.list_service_quotas(ServiceCode = 'ec2')

    # this is required to map get correct quota code for respective ec2 service quota.
    for quota in service_quota_resp['Quotas']:
        map_quota_codes[quota["QuotaName"]] = {'QuotaCode': quota["QuotaCode"]}

    while "NextToken" in service_quota_resp:
        service_quota_resp = client.list_service_quotas(ServiceCode = 'ec2', NextToken = service_quota_resp["NextToken"])

        for quota in service_quota_resp['Quotas']:
            map_quota_codes[quota["QuotaName"]] = {'QuotaCode': quota["QuotaCode"]}

末尾注意:如果您喜欢此说明,而我的回答则可以帮助您对其进行投票并将其标记为答案。谢谢

jack