Cómo conseguir recursos de TODAS las regiones mediante ResourceGroupsTaggingAPI

0

Pregunta

Estoy tratando de descargar todos los ARNs con etiquetas específicas con boto3 y ResourceGroupsTaggingAPI. Yo soy el filtrado en dos etiquetas 8 diferentes ARNs, cuando debería llegar a más de 80 ARNs.

**Edit:**me di cuenta de que es a causa de una API de limitación. Según la documentación, la API permite a usted para buscar las etiquetas de la región que está utilizando actualmente. Hay alguna forma de recuperar las etiquetas de TODAS las regiones?

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

Mejor respuesta

0

Eso es porque usted había TagFilters en primera convocatoria y a las perdidas en la posterior pagina llamada

Paginado de llamadas debe incluir mismo conjunto de parámetros, incluyendo la paginación token para las llamadas posteriores

Incluyen TagFilters=[{'Key':'tag1'}] en su get_resources llamada dentro de un bucle con la paginación de token

Iterar sobre cada región y hacer get_resources de llamada para todas las regiones

# 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

Yo aún enfrentan a los mismos problemas cuando uso response_deployment = restag.get_resources(TagFilters=[{'Clave':'tag1'}],ResourcesPerPage=100, PaginationToken=token) en el bucle while. He actualizado el código de arriba.
Omega

Edit: es porque la API sólo devuelve los recursos en la región que actualmente se encuentra en uso. ahora que es inútil...
Omega

ah ok, ¿por qué no iterar a través de las regiones y hacer las llamadas de recursos de forma recursiva. actualización de respuesta así
omuthu

En otros idiomas

Esta página está en otros idiomas

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