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
'공부 > Python' 카테고리의 다른 글
[Django] admin에 keycloak login 붙이기 (1) | 2024.03.30 |
---|---|
[Python] 파이썬 실행 & 메모리 관리 방식, mutable & immutable 객체, 깊은 복사 (deep copy) (0) | 2022.12.04 |
[Python] Python to Slack 2 : Slack Bot Message 보내기 + 쉽게 Formatting하기 (Block Kit Builder) (0) | 2022.01.22 |
[Python] Python to Slack 1 : Slack Bot 만들고 설정하기 (0) | 2022.01.22 |
[Python] CSV 파일 읽기/쓰기 (0) | 2021.04.30 |
댓글