Cum de a obține resurse din TOATE regiunile folosind ResourceGroupsTaggingAPI

0

Problema

Am încercat pentru a descărca toate Arne cu tag-uri specifice cu boto3 și ResourceGroupsTaggingAPI. Sunt filtrare pe două tag-uri și de a lua diferite 8 Ore, atunci când ar trebui să ia mai mult de 80 de Ore.

**Edit:**mi-am dat seama că e din cauza o limitare API. Potrivit documentației, API vă permite să aducă categorie de regiune îl utilizați în prezent. Există vreo modalitate de a aduce tag-uri din TOATE regiunile?

import boto3
import csv


class TagEditor:
    
    def writeToCsv(self,writer, tag_list):
        for resource in tag_list:
            for tag in resource['Tags']:
                row = dict(
                    ResourceArn=resource['ResourceARN'], TagKey=tag['Key'], TagValue=tag['Value'])
                writer.writerow(row)
            
    
    def main(self):
        
        field_names = ['ResourceArn', 'TagKey', 'TagValue']
        s3 = boto3.client('s3')
        restag = boto3.client('resourcegroupstaggingapi')
        
        
        with open('/tmp/tags.csv', 'w') as csvfile:
            writer = csv.DictWriter(csvfile, quoting=csv.QUOTE_ALL,
                                    delimiter=',', dialect='excel', fieldnames=field_names)
            writer.writeheader()
            
            # Filter for tag1
            response_deployment = restag.get_resources(TagFilters=[{'Key':'tag1'}],ResourcesPerPage=100)
            self.writeToCsv(writer, response_deployment['ResourceTagMappingList'])
            
            while 'PaginationToken' in response_deployment and response_deployment['PaginationToken']:
                token = response_deployment['PaginationToken']
                response_deployment = restag.get_resources(TagFilters=[{'Key':'tag1'}], ResourcesPerPage=100, PaginationToken=token)
                self.writeToCsv(writer, response_deployment['ResourceTagMappingList'])
    
            # Filter for tag2
            response_deployment = restag.get_resources(TagFilters=[{'Key':'tag2'}],ResourcesPerPage=100)
            self.writeToCsv(writer, response_deployment['ResourceTagMappingList'])
            
            while 'PaginationToken' in response_deployment and response_deployment['PaginationToken']:
                token = response_deployment['PaginationToken']
                response_deployment = restag.get_resources(TagFilters=[{'Key':'tag2'}], ResourcesPerPage=100, PaginationToken=token)
                self.writeToCsv(writer, response_deployment['ResourceTagMappingList'])
        
        s3.upload_file('/tmp/tags.csv', Bucket = 'my-bucket', Key = 'tags.csv')
1

Cel mai bun răspuns

0

Asta este pentru că ai avut TagFilters în primul apel și le-a ratat în anii paginat apel

Paginat apeluri trebuie să includă același set de params inclusiv paginare token pentru apelurile ulterioare

Include TagFilters=[{'Key':'tag1'}] în get_resources apel în termen de buclă cu paginare token

Repeta peste fiecare regiune și de a face get_resources apel pentru toate regiunile

# List all regions
ec2_client = boto3.client('ec2')
regions = [region['RegionName'] for region in ec2_client.describe_regions()['Regions']]
2021-11-23 18:47:12

Am încă se confruntă cu aceleași probleme atunci când folosesc response_deployment = restag.get_resources(TagFilters=[{"Cheie":'tag1'}],ResourcesPerPage=100, PaginationToken=semn), în timp ce buclă. Am actualizat codul de mai sus.
Omega

Edit: e din cauza API returnează numai resurse în regiune, care este în prezent în uz. acum, că e inutil...
Omega

ah ok, de ce nu repeta peste regiuni și pentru a face rost de resurse apel recursiv. update răspundă cât mai bine
omuthu

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................