AWS Lamda with boto3.client - 从 dict 读取输出



希望你能帮到我从 AWS Lambda 获得响应 200 OK 后,我想搜索路由中的所有目的地 CidrBlock但是当打印它时,我只得到第一个

u'Routes': [{u'Origin': 'CreateRoute', u'DestinationCidrBlock': '1.1.1.1/32', u'NetworkInterfaceId': 'eni-08b854f5bc83cefe4', u'State': 'blackhole'}, {u'Origin': 'CreateRoute', u'DestinationCidrBlock': '2.2.2.2/32', u'NetworkInterfaceId': 'eni-08b854f5bc83cefe4', u'State': 'blackhole'}, {u'GatewayId': 'local', u'DestinationCidrBlock': '172.31.0.0/16', u'State': 'active', u'Origin': 'CreateRouteTable'}, {u'GatewayId': 'igw-cec16ba6', u'DestinationCidrBlock': '0.0.0.0/0', u'State': 'active', u'Origin': 'CreateRoute'}]}]}

如果我以这种方式制作,我会得到值,但不会得到 2.2.2.2/32:

print response["RouteTables"][0]['Routes'][0]['DestinationCidrBlock']
print response["RouteTables"][0]['RouteTableId']

1.1.1.1/32

RTB-08C31263

但是,如果在那里制作一个 for 循环,我会得到这种格式的数字

for x in response["RouteTables"][0]['Routes'][0]['DestinationCidrBlock']:
print x

1

.

1

.

1

.

1

/

3

阿拉伯数字

所以我的问题,我希望你能帮助我,如何获取所有的IP地址并以某种方式存储将 IP 和路由表 ID 关联到某种字典或列表中,以 WELL 格式获取所有数据

["RouteTables"][0]保存结果返回的第一个路由表,如果您只有一个路由表,则可以这样做,但是如果您有更多路由表并且需要考虑每个路由表,那么您还需要遍历["RouteTables"]的内容。

我假设您只有一个路由表。

您已经从 获取了路由表 ID

["RouteTables"][0]["RouteTableId"]

如果要提取每个目标 cidr 块,则需要遍历

["RouteTables"][0]["Routes"]

在循环时,提取那些 CIDR 块,即

cirdBlocks = [route["DestinationCidrBlock"] for route in response["RouteTables"][0]["Routes"]]

要创建键为路由表 ID 且值为上述 cidr 块的字典,您只需执行以下操作

即可
routeTableId = response["RouteTables"][0]["RouteTableId"]
cirdBlocks = [route["DestinationCidrBlock"] for route in response["RouteTables"][0]["Routes"]]
routeTableCidrAssoc = { routeTableId: cirdBlocks }

最新更新