Какой правильный атрибут для обработки 'NatGatewayID'? - PullRequest
0 голосов
/ 01 октября 2019

У меня проблемы с получением метаданных моих ресурсов AWS NATGateway. Кажется, я не могу найти подходящий атрибут для получения идентификатора.

Пробовал все виды атрибутов, таких как NAT.id, и я все еще проверяю документацию здесь [1] [2] [3], чтобы, надеюсь,устранить проблему.

[1] https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migration.html

[2] https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.describe_nat_gateways

[3] https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

import boto3

# Region your instances are in, e.g. 'us-east-1'
region = 'ap-southeast-1'

#instantiate
client = boto3.client('ec2',region)
ids = []

def lambda_handler(event, context):

#lists all the metadata of NAT resources having a TagKey:Schedule     
#Value:OfficeHours

    NATs = client.describe_nat_gateways(
        Filter=[
            {
                'Name': 'tag:Schedule',
                'Values': [
                    'OfficeHours',
                ],
            },
        ],
   )

    for NAT in NATs:
        print('deleted NAT gateways: ' + NAT.NatGatewayId)
#       ids.append(NAT.NatGatewayId)
#       client.delete_nat_gateway(NatGatewayId=ids)

Один разЯ получаю метаданные: NatGatewayID, я должен быть в состоянии удалить эти ресурсы через лямбду.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019
        After a bit of tweaking, I was able to fix the issue. Here's the code:

        import boto3

        # Region your instances are in, e.g. 'us-east-1'
        region = 'ap-southeast-1'

        #instantiate
        client = boto3.client('ec2',region)
        ids = []

        def lambda_handler(event, context):

            NATs = client.describe_nat_gateways(
                Filter=[
                    {
                        'Name': 'tag:Schedule',
                        'Values': [
                            'OfficeHours',
                        ],
                    },
                ],
            )
            for NAT in NATs['NatGateways']:
                print('deleted NAT gateways: ' + NAT['NatGatewayId'])
        #       ids.append(NAT['NatGatewayId'])
        #       client.delete_nat_gateway(NatGatewayId=ids)
0 голосов
/ 01 октября 2019

Из документации на вопрос в вопросе:

Response Syntax

{
    'NatGateways': [
        {
            'CreateTime': datetime(2015, 1, 1),
            'DeleteTime': datetime(2015, 1, 1),
            'FailureCode': 'string',
            'FailureMessage': 'string',
            'NatGatewayAddresses': [
                {
                    'AllocationId': 'string',
                    'NetworkInterfaceId': 'string',
                    'PrivateIp': 'string',
                    'PublicIp': 'string'
                },
            ],
            'NatGatewayId': 'string',
            'ProvisionedBandwidth': {
                'ProvisionTime': datetime(2015, 1, 1),
                'Provisioned': 'string',
                'RequestTime': datetime(2015, 1, 1),
                'Requested': 'string',
                'Status': 'string'
            },
            'State': 'pending'|'failed'|'available'|'deleting'|'deleted',
            'SubnetId': 'string',
            'VpcId': 'string',
            'Tags': [
                {
                    'Key': 'string',
                    'Value': 'string'
                },
            ]
        },
    ],
    'NextToken': 'string'
}

Ответ dict, содержащий список NatGateways. Поскольку ответом является dict, свойства ответа не доступны с использованием нотации object.property;скорее это object['property'].

Этот цикл должен работать:

for NAT in NATs['NatGateways']:
   print('deleted NAT gateways: ' + NAT['NatGatewayId'])
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...