Перечислите подсети в AWS по VP C ID - PullRequest
1 голос
/ 16 января 2020

Мне нужно перечислить подсети в определенном c VP C в AWS.

Я получаю эту ошибку, когда я делаю:

Traceback (most recent call last):
  File ".\aws_create_ec2.py", line 253, in <module>
    main()
  File ".\aws_create_ec2.py", line 249, in main
    create_instances()
  File ".\aws_create_ec2.py", line 146, in create_instances
    subnet_list = ec2_client.describe_subnets(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\botocore\client.py", line 272, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\botocore\client.py", line 548, in _make_api_call
    request_dict = self._convert_to_request_dict(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\botocore\client.py", line 596, in _convert_to_request_dict
    request_dict = self._serializer.serialize_to_request(
  File "C:\Users\User\AppData\Local\Programs\Python\Python38-32\lib\site-packages\botocore\validate.py", line 297, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Unknown parameter in input: "VpcIds", must be one of: Filters, SubnetIds, DryRun, NextToken, MaxResults

I ' используя эти команды:

 vpc_id = input("Enter the vpc id: ")
 subnet_list = ec2_client.describe_subnets(
     VpcIds=[
         vpc_id,
       ]
    )

Как я могу фильтровать по VP C Я хочу правильно с этой командой?

Также, как я могу проверить ввод пользователя с помощью регулярного выражения, чтобы он соответствовал нужному формату? Например, чтобы пользовательский ввод соответствовал чему-то похожему: vpc-68b1ff12

1 Ответ

3 голосов
/ 16 января 2020

Довольно сложно определить, какой код выполнялся, но который не удался, но я думаю, что это можно сделать в два этапа ... сначала перечислите все VPC с, затем перечислите все subnets в каждом VPC

Примерно так:

import boto3

session = boto3.Session(region_name='us-east-1')
ec2_resource = session.resource("ec2")
ec2_client = session.client("ec2")
subnet_ids = []
for vpc in ec2_resource.vpcs.all():
    # here you can choose which subnet based on the id
    if vpc.id == 'vpc-abcd1234':
        for subnet in vpc.subnets.all():
            subnet_ids.append(subnet.id)
# the result of this call has the data you're looking for
print(ec2_client.describe_subnets(SubnetIds=subnet_ids))

Для проверки ввода вы можете использовать регулярное выражение, например:

import re
pattern = re.compile('vpc-\w{8}$')
print(pattern.match('vpc-abcd1'))
print(pattern.match('vpc-abcd1234'))
print(pattern.match('vpc-abcd1-34'))
print(pattern.match('vpc-abcd134567890'))
print(pattern.match('apc-1a2b3c4d'))
print(pattern.match('vpc-1a2b3c4d'))

Будет напечатано:

None
<re.Match object; span=(0, 12), match='vpc-abcd1234'>
None
None
None
<re.Match object; span=(0, 12), match='vpc-1a2b3c4d'>

чтобы убедиться, что ваш ввод верен, вызовите проверку в al oop, например:

import re

pattern = re.compile('vpc-\w{8}$')

def get_input():
    found = input("vpc id:")
    match = pattern.match(found)
    while not match:
        found = input('vpc id:')
        match = pattern.match(found)

    return found
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...