ยังไงเพื่อให้ทรัพยากรจากทุกดินแดนใช้ ResourceGroupsTaggingAPI

0

คำถาม

ฉันพยายามที่จะดาวน์โหลดทั้ง ARNs กับเจาะจงป้ายกำกับต่างๆกับ boto3 และ ResourceGroupsTaggingAPI. ฉันกำลังกรอบสองป้ายกำกับและตอน 8 แตกต่าง ARNs ตอนที่ฉันควรจะได้มากกว่า 80 ARNs.

**แก้ไข:**ฉันคิดออกว่ามันเป็นเพราะรูปแบบ api limitation. ตามเอกสารคู่มือน,รูปแบบ 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 อยู่ในแรกโทรและคิดถึงพวกเขาอยู่ในบับต่อๆมา paginated โทรหา

Paginated เรียนต้องรวมเดียวกันตั้งค่าของ params รวมถึง pagination สำหรับตั๋วเข้าใช้งานต่อมาเรีย

รวม TagFilters=[{'Key':'tag1'}] ในของคุณ get_resources โทรหาในวงกับ pagination ตั๋วเข้าใช้งาน

Iterate บแต่ละเขตพื้นที่และทำให้ 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

อ่าโอเคทำไมจะไม่ได้ iterate นือดินแดนและทำให้ทางเดียวที่จะช่วยฉันทรัพยากรโทรหา recursively. ปรับปรุงคำตอบเช่นกัน
omuthu

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่