Jak se dostat zdrojů ze VŠECH regionů pomocí ResourceGroupsTaggingAPI

0

Otázka

Snažím se stáhnout všechny Arny s konkrétními značkami s boto3 a ResourceGroupsTaggingAPI. Jsem filtrování na dvě kategorie, a získat 8 různých Arny, když jsem by měl dostat více než 80 Hodin.

**Edit:**zjistil jsem, že je to z důvodu omezení API. Podle dokumentace, API umožňuje načíst tagy z oblasti, kterou jsou v současné době používáte. Existuje nějaký způsob, jak načíst tagy ze VŠECH regionů?

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

Nejlepší odpověď

0

To je proto, že jste měli TagFilters v první hovor a chyběl jim v následné očíslovanými volání

Očíslovanými volání musí obsahovat stejnou sadu parametrů včetně stránkování token pro následné volání

Patří TagFilters=[{'Key':'tag1'}] ve vašem get_resources volání ve smyčce s stránkování token

Iteraci každý region a aby get_resources volání pro všechny regiony

# 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

Jsem stále čelí stejné problémy, když jsem použít response_deployment = restag.get_resources(TagFilters=[{'Key':'tag1'}],ResourcesPerPage=100, PaginationToken=token) v while. Mám aktualizovaný kód výše.
Omega

Edit: je to proto, že API vrací pouze zdroje v regionu, který je v současné době v provozu. teď to je k ničemu...
Omega

ah ok, proč ne iteraci přes regiony a aby se-zdrojů volat rekurzivně. aktualizace odpovědět stejně
omuthu

V jiných jazycích

Tato stránka je v jiných jazycích

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