Comment obtenir des ressources provenant de TOUTES les régions à l'aide de ResourceGroupsTaggingAPI

0

La question

Je suis en train de télécharger tous les ARNs avec des balises spécifiques avec boto3 et ResourceGroupsTaggingAPI. Je suis de filtrage sur les deux balises et obtenir 8 différents ARNs quand j'aurai plus de 80 ARNs.

**Edit:**j'ai compris que c'est parce que de API limitation. Selon la documentation, l'API vous permet de chercher les balises de la région que vous utilisez actuellement. Est-il un moyen de récupérer les tags de TOUTES les régions?

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

La meilleure réponse

0

C'est parce que vous avez eu TagFilters dans le premier appel et ont manqué dans la suite paginé appel

Paginé appels doivent inclure même jeu de paramètres, y compris la pagination de jeton pour les appels suivants

Inclure TagFilters=[{'Key':'tag1'}] dans votre get_resources appel à l'intérieur de la boucle avec la pagination jeton

Itérer sur chaque région et de faire get_resources appel pour toutes les régions

# 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

J'ai toujours confrontés aux mêmes problèmes lorsque j'utilise response_deployment = restag.get_resources(TagFilters=[{"Key":'tag1'}],ResourcesPerPage=100, PaginationToken=token) dans la boucle while. J'ai mis à jour le code ci-dessus.
Omega

Edit: c'est parce que l'API retourne uniquement des ressources dans la région qui est actuellement en cours d'utilisation. maintenant que c'est inutile...
Omega

ah ok, pourquoi ne pas parcourir des régions et de faire le d'obtenir des ressources d'appel de manière récursive. mise à jour de répondre ainsi
omuthu

Dans d'autres langues

Cette page est dans d'autres langues

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