2017-02-08 2 views
1

Ich habe einen Fehler beim Versuch, einen Wert aus Daten zu erhalten, die von boto3 zurückgegeben wurden. Ich bin in der Lage, die gesamte Antwort (siehe unten) zu drucken, kann aber nicht herausfinden, was ich tun muss, um die NetworkInterfaceId aus dem Takt zu bringen.Zugreifen auf Wert boto3-Wörterbuchantwort

Ich führe dies in Python 2.7.5, denn das ist, was die Instanzen, die es ausführen müssen, standardmäßig haben. Ich bin neu bei Python, also hoffe ich vermisse etwas Einfaches, danke für deine Hilfe!

Fehler

TypeError: list indices must be integers, not str 

-Code

#!/usr/bin/python 
import boto3 

ec2 = boto3.client('ec2') 
response = ec2.describe_route_tables(
       RouteTableIds=[ 
        "rtb-4a1efc23", 
       ], 
       Filters=[ 
        { 
         'Name': 'route.destination-cidr-block', 
         'Values': [ 
          "172.29.0.0/16", 
         ] 
        }, 
       ] 
     ) 

#print(response) 
print(response["RouteTables"][0]["Routes"]["NetworkInterfaceId"]) 

Antwort

{'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': 'a8e7ba60-7599-450a-a708-8d90e429d59e', 'HTTPHeaders': {'transfer-encoding': 'chunked', 'vary': 'Accept-Encoding', 'server': 'AmazonEC2', 'content-type': 'text/xml;charset=UTF-8', 'date': 'Wed, 08 Feb 2017 11:51:47 GMT'}}, u'RouteTables': [{u'Associations': [{u'SubnetId': 'subnet-d7040aaf', u'RouteTableAssociationId': 'rtbassoc-867a94ef', u'Main': False, u'RouteTableId': 'rtb-4a1efc23'}, {u'SubnetId': 'subnet-e0fcd3aa', u'RouteTableAssociationId': 'rtbassoc-9f7a94f6', u'Main': False, u'RouteTableId': 'rtb-4a1efc23'}], u'RouteTableId': 'rtb-4a1efc23', u'VpcId': 'vpc-0d00e264', u'PropagatingVgws': [{u'GatewayId': 'vgw-fcf479cc'}], u'Tags': [{u'Value': 'pub', u'Key': 'Name'}], u'Routes': [{u'GatewayId': 'local', u'DestinationCidrBlock': '172.28.0.0/16', u'State': 'active', u'Origin': 'CreateRouteTable'}, {u'Origin': 'CreateRoute', u'DestinationCidrBlock': '172.29.0.0/16', u'InstanceId': 'i-0b84e502d9dc49443', u'NetworkInterfaceId': 'eni-08f55373', u'State': 'active', u'InstanceOwnerId': '444456106883'}, {u'Origin': 'CreateRoute', u'DestinationCidrBlock': '172.31.0.0/16', u'InstanceId': 'i-0b84e502d9dc49443', u'NetworkInterfaceId': 'eni-08f55373', u'State': 'active', u'InstanceOwnerId': '444456106883'}, {u'GatewayId': 'igw-7b03e012', u'DestinationCidrBlock': '0.0.0.0/0', u'State': 'active', u'Origin': 'CreateRoute'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.114.112.192/27', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.114.210.160/27', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.138.172.32/27', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.138.172.96/27', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.114.105.128/26', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.115.80.0/26', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.115.131.0/26', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.138.17.128/26', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.138.83.64/26', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.138.180.128/26', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}, {u'GatewayId': 'vgw-fcf479cc', u'DestinationCidrBlock': '10.192.0.0/16', u'State': 'active', u'Origin': 'EnableVgwRoutePropagation'}]}]} 
+0

'Antwort [" RouteTables "] [0] ['Routen']' ist eine Liste. Wenn Sie 'NetworkInterfaceId' holen wollen, sollten Sie' response ["RouteTables"] [0] ['Routes'] [0] ['NetworkInterfaceId'] 'versuchen. – anupsabraham

Antwort

1

Vom documentation, Sie können feststellen, dass Routes eine Liste ist. Wenn Sie die NetworkInterfaceId abrufen möchten, sollten Sie Routes durchlaufen.

for route in response["RouteTables"][0]['Routes']: 
    if 'NetworkInterfaceId' in route: 
     print route['NetworkInterfaceId'] 

Beachten Sie, dass NetworkInterfaceId kann oder nicht in der Antwort vorhanden sein können. Das habe ich anhand der Antwort herausgefunden, die Sie hier eingefügt haben.

Verwandte Themen