如何获得的资源来自所有区域使用ResourceGroupsTaggingAPI

0

的问题

我想下载所有Arn的具体标签与boto3和ResourceGroupsTaggingAPI. 我过滤上两种标签,并得到8个不同的Arn的时候我应该获得超过80Arn的.

**编辑:**我想通了,这是因为一个API限制。 根据该文件,API允许你取标记的地区目前使用。 是否有任何方式获取标签来自所有区域的?

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

最好的答案

0

那是因为你有TagFilters在第一个电话和错过了他们在随后的分页的通话

分页的通话必须包括同一组参数,包括页码标以用于随后的通话

包括 TagFilters=[{'Key':'tag1'}] 在你get_resources呼内的循环分页的令牌

迭代,每个区域,并使get_resources呼吁所有区域

# 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.get_resources(TagFilters=[{'关键':'tag1'}],ResourcesPerPage=100,PaginationToken=令牌)在同时循环。 我已经更新了代码之上。
Omega

编辑:这是因为API只有返回的资源在该地区,目前正在使用当中。 现在这就是没用的...
Omega

啊好吧,为什么不迭代地区,并使获得资源的呼吁。 更新的答复,以及
omuthu

其他语言

此页面有其他语言版本

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