본문 바로가기
공부/Python

[boto3/paginator] EC2 Name Tag를 포함한 엑셀 뽑기

by haejang 2022. 5. 13.
728x90
728x90

 

boto3 client는 한번에 뽑을 수 있는 양이 정해져 있기 때문에, 모든 값을 한꺼번에 뽑으려면 nextToken 인수를 이용해 반복을 돌려야 한다.

-> paginator를 사용하면 자동으로 반복이 돌려지며, 한 page씩 묶음으로 출력된다

따라서 paginator를 사용할 땐 page를 반복시키는 반복문이 필요하다

 

import boto3
from openpyxl import Workbook
from datetime import datetime

data_list = []

# profile name 지정
session = boto3.Session(profile_name='')
client = session.client('ec2')
paginator = client.get_paginator('describe_instances')
response_iterator = paginator.paginate()

# page별 반복
for page in response_iterator:
    # page 내의 Reservations 내의 Instances 반복하며 인스턴스 정보 출력
    for j in page['Reservations']:
        for i in j['Instances']:
            
            NameTag = ''
            # 인스턴스 정보 안에 Tags 정보가 있는 경우만
            if 'Tags' in i:
                # Tags 정보 중 Name Key를 찾아 Value값 반환해서 저장
                for tag in i['Tags']:
                    if tag['Key'] == 'Name':
                        NameTag = tag['Value']
            
            data_tuple = (
                # instance id
                i['InstanceId'],
                # instance platform (ex, linux/unix)
                i['PlatformDetails'],
                # instance type (ex, t3.medium)
                i['InstanceType'],
                # 생성 시간 > time형식 변경 필요
                i['LaunchTime'].strftime('%Y-%m-%d'),
                # Name Tag 값
                NameTag,
                # 현재 State (ex, running)
                i['State']['Name']
            )
            data_list.append(data_tuple)


# excel file로 저장
wb = Workbook()
ws = wb.active

header = ('InstanceId', 'Platform', 'InstanceType', 'LaunchTime', 'NameTag', 'State')
ws.append(header)
for data in data_list:
    ws.append(data)

# 현재 시간을 사용해 file 저장
excel_name = 'ec2_list_' + datetime.now().strftime('%Y%m%d%H%M') + '.xlsx'
wb.save(excel_name)

 

paginator > describe_instances

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Paginator.DescribeInstances

 

 

 

 

 

728x90
728x90

댓글