TypeError: string indices must be integers describe_vpc_endpoints boto3
TypeError: string indices must be integers describe_vpc_endpoints boto3
当我 运行 我的代码出现错误
TypeError: string indices must be integers
这是我的代码
import boto3
import csv
ec2 = boto3.client('ec2')
vpcendpoints = ec2.describe_vpc_endpoints(DryRun=False)['VpcEndpoints']
results = list(map(lambda endpoint:(endpoint['VpcEndpointType'],endpoint['ServiceName'],endpoint['VpcEndpointId'],endpoint['VpcId'],endpoint['DnsEntries'['DnsName']]),vpcendpoints))
for (vpcendpointtype,servicename,vpcendpointid,vpcid,dnsname) in results:
print (vpcendpointtype+','+ servicename+ ','+ vpcendpointid+ ','+ vpcid+ ','+ dnsname)
我认为问题出在 ['DnsEntries'['DnsName']] 部分,但如何解决?
非常感谢帮助!!!
打印出整个 vpc 端点(剪切和消隐)
{'VpcEndpointId': 'XXXXXXXXXXX', 'VpcEndpointType': 'Interface', 'VpcId': 'vpc-XXXXXXXXXXXXX', 'ServiceName': 'com.amazonaws.eu-central-1.logs',
'State': 'available', 'PolicyDocument': '{\n "Statement": [\n {\n "Action": "*", \n "Effect": "Allow", \n "Principal": "*", \n "Resource": "*"\n }\n ]\n}', 'RouteTableIds': [],
'SubnetIds': ['subnet-XXXXXXXXXX', 'subnet-XXXXXXXX', 'subnet-XXXXXXXXX'], 'Groups': [{'GroupId': 'sg-XXXXXXXXXX', 'GroupName': 'XXXXXXXXXX'}], 'PrivateDnsEnabled': True, 'RequesterManaged': False, 'NetworkInterfaceIds': ['eni-XXXXXXXXXX', 'eni-XXXXXXXXX', 'eni-XXXXXXXXXXXX'],
'DnsEntries': [{'DnsName': 'vpce-XXXXXXXXXXXXX.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXXXX-XXXXXXX-eu-central-1a.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXX-XXXXXXX-eu-central-1b.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXX-XXXXXX-eu-central-1c.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXXXX'}, {'DnsName': 'logs.eu-central-1.amazonaws.com', 'HostedZoneId': 'XXXXXXXXX'}],
'CreationTimestamp': datetime.datetime(2020, 2, 27, 13, 46, 4, tzinfo=tzutc()), 'Tags': [{'Key': 'Name', 'Value': 'XXXXXXXX'}],
'OwnerId': 'XXXXXXX'},
你错了:
endpoint['DnsEntries'['DnsName']]
DnsEntries
是一个 数组:
'DnsEntries': [
{
'DnsName': 'string',
'HostedZoneId': 'string'
},
]
因此你必须调用它,例如假设一个长度为 1 的数组:
endpoint['DnsEntries'][0]['DnsName']]
有效的简化代码:
for endpoint in vpcendpoints:
print('VPC', endpoint['VpcEndpointType'],
endpoint['ServiceName'],
endpoint['VpcEndpointId'],
endpoint['VpcId'])
for dns_entry in endpoint['DnsEntries']:
print(" - DnsName: " + dns_entry['DnsName'])
示例输出:
VPC Gateway com.amazonaws.us-east-1.dynamodb vpce-032a826a vpc-aabb1122
VPC Interface com.amazonaws.us-east-1.elasticloadbalancing vpce-0f89a33420c1931d7 vpc-1a2b3c4d
- DnsName: vpce-0f89a33420c1931d7-bluzidnv.elasticloadbalancing.us-east-1.vpce.amazonaws.com
- DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1b.elasticloadbalancing.us-east-1.vpce.amazonaws.com
- DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com
Dns 条目是一个列表。因此,您需要迭代 DNS 条目以获取 DnsName,而不是将其视为字典。
'DnsEntries': [
{
'DnsName': 'string',
'HostedZoneId': 'string'
}
]
当我 运行 我的代码出现错误
TypeError: string indices must be integers
这是我的代码
import boto3
import csv
ec2 = boto3.client('ec2')
vpcendpoints = ec2.describe_vpc_endpoints(DryRun=False)['VpcEndpoints']
results = list(map(lambda endpoint:(endpoint['VpcEndpointType'],endpoint['ServiceName'],endpoint['VpcEndpointId'],endpoint['VpcId'],endpoint['DnsEntries'['DnsName']]),vpcendpoints))
for (vpcendpointtype,servicename,vpcendpointid,vpcid,dnsname) in results:
print (vpcendpointtype+','+ servicename+ ','+ vpcendpointid+ ','+ vpcid+ ','+ dnsname)
我认为问题出在 ['DnsEntries'['DnsName']] 部分,但如何解决?
非常感谢帮助!!!
打印出整个 vpc 端点(剪切和消隐)
{'VpcEndpointId': 'XXXXXXXXXXX', 'VpcEndpointType': 'Interface', 'VpcId': 'vpc-XXXXXXXXXXXXX', 'ServiceName': 'com.amazonaws.eu-central-1.logs',
'State': 'available', 'PolicyDocument': '{\n "Statement": [\n {\n "Action": "*", \n "Effect": "Allow", \n "Principal": "*", \n "Resource": "*"\n }\n ]\n}', 'RouteTableIds': [],
'SubnetIds': ['subnet-XXXXXXXXXX', 'subnet-XXXXXXXX', 'subnet-XXXXXXXXX'], 'Groups': [{'GroupId': 'sg-XXXXXXXXXX', 'GroupName': 'XXXXXXXXXX'}], 'PrivateDnsEnabled': True, 'RequesterManaged': False, 'NetworkInterfaceIds': ['eni-XXXXXXXXXX', 'eni-XXXXXXXXX', 'eni-XXXXXXXXXXXX'],
'DnsEntries': [{'DnsName': 'vpce-XXXXXXXXXXXXX.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXXXX-XXXXXXX-eu-central-1a.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXX-XXXXXXX-eu-central-1b.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXXX'}, {'DnsName': 'vpce-XXXXXXXXX-XXXXXX-eu-central-1c.logs.eu-central-1.vpce.amazonaws.com', 'HostedZoneId': 'XXXXXXXXXX'}, {'DnsName': 'logs.eu-central-1.amazonaws.com', 'HostedZoneId': 'XXXXXXXXX'}],
'CreationTimestamp': datetime.datetime(2020, 2, 27, 13, 46, 4, tzinfo=tzutc()), 'Tags': [{'Key': 'Name', 'Value': 'XXXXXXXX'}],
'OwnerId': 'XXXXXXX'},
你错了:
endpoint['DnsEntries'['DnsName']]
DnsEntries
是一个 数组:
'DnsEntries': [
{
'DnsName': 'string',
'HostedZoneId': 'string'
},
]
因此你必须调用它,例如假设一个长度为 1 的数组:
endpoint['DnsEntries'][0]['DnsName']]
有效的简化代码:
for endpoint in vpcendpoints:
print('VPC', endpoint['VpcEndpointType'],
endpoint['ServiceName'],
endpoint['VpcEndpointId'],
endpoint['VpcId'])
for dns_entry in endpoint['DnsEntries']:
print(" - DnsName: " + dns_entry['DnsName'])
示例输出:
VPC Gateway com.amazonaws.us-east-1.dynamodb vpce-032a826a vpc-aabb1122
VPC Interface com.amazonaws.us-east-1.elasticloadbalancing vpce-0f89a33420c1931d7 vpc-1a2b3c4d
- DnsName: vpce-0f89a33420c1931d7-bluzidnv.elasticloadbalancing.us-east-1.vpce.amazonaws.com
- DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1b.elasticloadbalancing.us-east-1.vpce.amazonaws.com
- DnsName: vpce-0f89a33420c1931d7-bluzidnv-us-east-1a.elasticloadbalancing.us-east-1.vpce.amazonaws.com
Dns 条目是一个列表。因此,您需要迭代 DNS 条目以获取 DnsName,而不是将其视为字典。
'DnsEntries': [
{
'DnsName': 'string',
'HostedZoneId': 'string'
}
]