【问题标题】:How to get quotas of AWS EC2 via boto3?如何通过 boto3 获取 AWS EC2 的配额?
【发布时间】:2019-11-01 02:34:48
【问题描述】:

我正在开发 boto3 - 适用于 AWS 的 SDK python。

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

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

【问题讨论】:

    标签: python amazon-web-services boto3


    【解决方案1】:

    其中一些限制可以通过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: 您可以分配使用的最大弹性 IP 地址数 使用 EC2-VPC。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 太棒了!让我试试看。谢谢。
    • 当然,它也是开源的,因此您可以从代码中了解所有内部工作原理。
    • 如果您发现我建议的工具适合您的用例,请检查我的回答是否正确。
    • 好的,我还没有测试。
    • 我认为上面的文档真的很糟糕
    【解决方案3】:

    有一个比 awsLimitChecker 更好的选择,因为并非所有 AWS 服务实例的配额都可以通过它检索,例如对于许多需要使用 TrustedAdvisor service 的 EC2 实例和许多 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 用户/组中。

    以下是源代码sn-p。

    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"]}
    

    结束注:如果您喜欢描述并且我的回答帮助您投票并将其标记为答案。谢谢

    杰克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多