Как рассчитать общее количество ip подсети в AWS

size = 3
matrix_surprise = [[0] * size] * size
matrix = [[0]*size for i in range(size)]

Frames and Objects [/g1]

Live Python Tutor Визуализировать

-1
задан Sunil 24 March 2019 в 04:51
поделиться

1 ответ

Вызов awscli ec2 description-subnets фактически вернет вам количество неиспользованных частных адресов IPv4 в подсети. Адреса IPv4 для любых остановленных экземпляров считаются недоступными.

Например:

aws ec2 describe-subnets \
    --subnet-ids subnet-c0c1a23a \
    --query "Subnets[0].AvailableIpAddressCount"

Пример выходных данных:

249

Чтобы рассчитать общее количество используемых IP-адресов в подсети 10.0.0.0/24 или, в более общем случае, a / N:

10.0.0.0/24 => 2**(32-24) - 5
10.0.0.0/N  => 2**(32-N) - 5

Обратите внимание, что вы вычитаете 5, потому что первые четыре IP-адреса и последний IP-адрес в каждом блоке CIDR подсети зарезервированы AWS и не могут быть назначены экземпляру. [ 1111]

И, если быть точным, скрипт Python:

import boto3

ec2 = boto3.resource('ec2')

# Use this for specific subnets
# filters = [{'Name':'subnet-id', 'Values':['subnet-c0c1a23a']}]
# subnets = ec2.subnets.filter(Filters=filters)

# Use this for all subnets
subnets = ec2.subnets.all()

for subnet in list(subnets):
    free_ips = subnet.available_ip_address_count
    n = int(subnet.cidr_block.split('/')[1])
    cidr_ips = 2**(32-n)
    used_ips = cidr_ips - free_ips
    print('{:s}: cidr={:d}, aws used=5, you used={:d}, free={:d}'.\
        format(subnet.id, cidr_ips, used_ips - 5, free_ips))

Пример вывода:

subnet-1eb2e345: cidr=256, free=251, aws used=5, you used=0
subnet-c0c1a23a: cidr=256, free=249, aws used=5, you used=2
0
ответ дан jarmod 24 March 2019 в 04:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: