Como obter recursos de TODAS as regiões usando ResourceGroupsTaggingAPI

0

Pergunta

Estou tentando baixar todos ARNs com tags específicas com boto3 e ResourceGroupsTaggingAPI. Eu sou a filtragem em duas marcas e obter 8 diferentes ARNs quando eu deveria ter mais de 80 ARNs.

**Editar:**eu descobri que é por causa de uma API de limitação. De acordo com a documentação, a API permite a obtenção de marcas da região em que você está usando no momento. Existe alguma maneira para buscar as etiquetas de TODAS as regiões?

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

Melhor resposta

0

Isso é porque você tinha TagFilters em primeira chamada e faltou-lhes subseqüentes paginado chamada

Paginado chamadas devem incluir o mesmo conjunto de parâmetros, incluindo a paginação token para as chamadas subsequentes

Incluem TagFilters=[{'Key':'tag1'}] em seu get_resources ligar em loop com a paginação token

Iterar sobre cada região e fazer get_resources de chamada para todas as regiões

# 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

Eu ainda enfrentam os mesmos problemas de quando eu uso response_deployment = restag.get_resources(TagFilters=[{'Chave':'tag1'}],ResourcesPerPage=100, PaginationToken=token) no loop while. Eu atualizei o código acima.
Omega

Edit: é porque a API retorna apenas os recursos da região e que está atualmente em uso. agora que é inútil...
Omega

ah, ok, por que não iterar sobre regiões e fazer o get-recursos de chamada recursivamente. atualização de resposta também
omuthu

Em outros idiomas

Esta página está em outros idiomas

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