공부/Python
[boto3/paginator] EC2 Name Tag를 포함한 엑셀 뽑기
haejang
2022. 5. 13. 17:39
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
끝
728x90
728x90