Come ottenere risorse da TUTTE le regioni utilizzando ResourceGroupsTaggingAPI

0

Domanda

Sto cercando di scaricare tutti ARNs con tag specifici con boto3 e ResourceGroupsTaggingAPI. Sto filtro su due tag e ottenere 8 diversi ARNs quando mi dovrebbe arrivare in più di 80 ARNs.

**Edit:**ho capito che è a causa di un API di limitazione. Secondo la documentazione, l'API consente di recuperare i tag dalla regione sono attualmente in uso. C'è un modo per recuperare etichette da TUTTE le regioni?

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

Migliore risposta

0

Che è perché hai avuto TagFilters in prima convocazione e per la loro mancanza in successive impaginato chiamata

Impaginato chiamate deve includere stesso set di parametri tra cui la paginazione token per le chiamate successive

Includono TagFilters=[{'Key':'tag1'}] nel get_resources chiamata all'interno di un ciclo con la paginazione token

Ripetere per ogni regione e per fare get_resources di chiamata per tutte le regioni

# 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

Ho ancora affrontare gli stessi problemi quando uso response_deployment = restag.get_resources(TagFilters=[{'Key':'tag1'}],ResourcesPerPage=100, PaginationToken=token) nel ciclo while. Ho aggiornato il codice di cui sopra.
Omega

Edit: è perché l'API restituisce solo le risorse della regione attualmente in uso. ora che è inutile...
Omega

ah ok, perché non iterare regioni e fare il get-risorse chiamata ricorsivamente. aggiorna risposta
omuthu

In altre lingue

Questa pagina è in altre lingue

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