【发布时间】: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
我正在开发 boto3 - 适用于 AWS 的 SDK python。
如何通过 boto3 库获取 AWS 服务限制,如下所示:
http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html
【问题讨论】:
标签: python amazon-web-services boto3
其中一些限制可以通过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。
【讨论】:
EC2.Client.describe_account_attributes() 到obtain the limits that are available through this API 并使用硬编码值作为其余限制。
为什么不使用awsLimitchecker? 我每天早上都用它来创建一份报告并将其发送到一个闲散小组,在那里我监控我们当前的限制。效果很好。
【讨论】:
有一个比 awsLimitChecker 更好的选择,因为并非所有 AWS 服务实例的配额都可以通过它检索,例如对于许多需要使用 TrustedAdvisor service 的 EC2 实例和许多 EC2 服务实例' 配额根本无法检索。最近 AWS 也将基于 EC2 实例的按需服务配额限制更改为基于 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"]}
结束注:如果您喜欢描述并且我的回答帮助您投票并将其标记为答案。谢谢
杰克
【讨论】: