ResourceGroupsTaggingAPI kullanarak TÜM bölgelerden kaynak alma

0

Soru

Tüm arn'leri boto3 ve ResourceGroupsTaggingAPI ile belirli etiketlerle indirmeye çalışıyorum. İki etiketi filtreliyorum ve 80'den fazla ARN almam gerektiğinde 8 farklı ARN alıyorum.

** Düzenleme: * * Bunun bir API sınırlaması nedeniyle olduğunu anladım. Belgelere göre API, şu anda kullanmakta olduğunuz bölgeden etiketler almanıza izin verir. TÜM bölgelerden etiket almanın bir yolu var mı?

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

En iyi cevabı

0

İlk aramada izleyen sayfa numaralı çağrı TagFilters vardı ve onları özledim çünkü

Sayfalandırılmış çağrılar, sonraki çağrılar için sayfalandırma belirteci de dahil olmak üzere aynı param kümesini içermelidir

İçermek TagFilters=[{'Key':'tag1'}] sayfalandırma belirteci ile döngü içinde get_resources çağrınızda

Her bölge üzerinde yineleme yapın ve tüm bölgeler için get_resources çağrısı yapın

# 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

response_deployment = restag kullandığımda hala aynı sorunlarla karşılaşıyorum.while döngüsünde get_resources(TagFilters=[{'Key':'tag1'}],ResourcesPerPage=100, PaginationToken=belirteç). Yukarıdaki kodu güncelledim.
Omega

Edit: çünkü API sadece döner kaynaklar, bölgede bu şu anda içinde kullanın. şimdi bu işe yaramaz...
Omega

tamam, neden bölgeler üzerinde yineleme yapmıyorsunuz ve get-resources çağrısını yinelemeli olarak yapmıyorsunuz? cevabı da güncelle
omuthu

Diğer dillerde

Bu sayfa diğer dillerde

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