FIX: added pagination looping support to get all resources for aws-inventory-from-awsconfig.py

This commit is contained in:
xpk 2024-04-23 23:13:06 +08:00
parent 051b5267de
commit 5342f3c595
Signed by: xpk
GPG Key ID: CD4FF6793F09AB86

View File

@ -1,5 +1,9 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""
TODO:
get_discovered_resource_counts has a limit of 100 resources. need to use nextToken
to get count of all resources
"""
import boto3 import boto3
import pandas as pd import pandas as pd
@ -7,17 +11,28 @@ import csv
client = boto3.client('config') client = boto3.client('config')
resp = client.get_discovered_resource_counts() resp = client.get_discovered_resource_counts()
# print('totalDiscoveredResources', resp['totalDiscoveredResources'], sep=": ")
results = [] results = []
# print("ResourceType, ResourceId")
for item in resp['resourceCounts']: for item in resp['resourceCounts']:
if item['resourceType'] == "AWS::Config::ResourceCompliance":
continue
reslist = client.list_discovered_resources(resourceType=item['resourceType']) reslist = client.list_discovered_resources(resourceType=item['resourceType'])
nextToken = reslist.get('nextToken')
while True:
for res in reslist['resourceIdentifiers']: for res in reslist['resourceIdentifiers']:
# print(item['resourceType'], res['resourceId'], sep=', ') if item['resourceType'] in [
"AWS::Config::ResourceCompliance",
"AWS::Backup::RecoveryPoint",
"AWS::RDS::DBSnapshot",
"AWS::SSM::ManagedInstanceInventory",
"AWS::SSM::AssociationCompliance",
"AWS::IAM::Policy"
]:
continue
results += [[item['resourceType'], res['resourceId']]] results += [[item['resourceType'], res['resourceId']]]
if nextToken is None:
break
reslist = client.list_discovered_resources(resourceType=item['resourceType'], nextToken=nextToken)
nextToken = reslist.get('nextToken')
df = pd.DataFrame(results, columns=['ResourceType', 'ResourceId']) df = pd.DataFrame(results, columns=['ResourceType', 'ResourceId'])
print(df.to_csv(index=False,quoting=csv.QUOTE_NONNUMERIC)) # print(df)
# print(results) print(df.to_csv(index=False, quoting=csv.QUOTE_NONNUMERIC))