Python boto3를 이용한 AWS 리소스 컨트롤 - s3현황 확인
2019-12-24
.
## s3에서 GLACIER 제외 파일 리스트를 출력
bucket_name = 'minman'
import boto3
s3_res = boto3.resource('s3')
each_bucket = s3_res.Bucket(bucket_name)
version = each_bucket.objects
for ver in version.all():
if (ver.storage_class) in 'GLACIER':
pass
else:
print(ver.key)
print('##########')
print(ver.storage_class)
버거킹 메뉴.txt
##########
STANDARD
## 버켓에 파일지우기
bucket_name = 'minman'
import boto3
each_bucket = s3_res.Bucket(bucket_name)
for ver in version.all():
if (ver.storage_class) in 'STANDARD':
print(ver.key)
print(ver.storage_class)
dir(ver.Version)
delete_std = ver.delete()
print(delete_std)
else:
pass
버거킹 메뉴.txt
STANDARD
{'ResponseMetadata': {'RequestId': '631B3ADCC25E982A', 'HostId': 'aF3hGT79Qb+LfPjqau9WxzLK5np7TwBvpt6P4dmajLEVeJud2XlGKsiCR14t+3Jz2o8r7m0BC7g=', 'HTTPStatusCode': 204, 'HTTPHeaders': {'x-amz-id-2': 'aF3hGT79Qb+LfPjqau9WxzLK5np7TwBvpt6P4dmajLEVeJud2XlGKsiCR14t+3Jz2o8r7m0BC7g=', 'x-amz-request-id': '631B3ADCC25E982A', 'date': 'Tue, 24 Dec 2019 02:59:24 GMT', 'x-amz-version-id': '.2EeXds9SChtkUF47vXhFeapKufiiJC7', 'x-amz-delete-marker': 'true', 'server': 'AmazonS3'}, 'RetryAttempts': 0}, 'DeleteMarker': True, 'VersionId': '.2EeXds9SChtkUF47vXhFeapKufiiJC7'}
## 딜리트마커파일 지우기
import boto3
default_session=boto3.session.Session(profile_name="default")
s3_re=default_session.resource(service_name="s3", region_name="ap-northeast-2")
bucket_name = 'minman'
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
version = bucket.object_versions
for ver in version.all():
if str(ver.size) in 'None':
delete_file = ver.delete()
print(delete_file)
else:
pass
## 버켓 사이즈 내부에 크기 조건에 따른 object 리스트 출력
bucket_name = 'minman'
import boto3
bucket = s3.Bucket(bucket_name)
version = bucket.object_versions
find_size = 100000
for ver in version.all():
try:
if ver.size < 1000:
print(ver.key)
else:
pass
except Exception as e:
pass
버거킹 메뉴.txt
버거킹 메뉴.txt
### 용량을 출력해주는 함수정의
def humanbyte(B):
B = float(B)
KiB = float(1024)
MiB = float(KiB**2)
GiB = float(KiB**3)
TiB = float(KiB**4)
if B < KiB:
return "{0} {1}".format(B, 'Bytes' if 0 == B > 1 else 'Byte')
elif KiB <= B < MiB:
return '{0:.2f} KiB'.format(B / KiB)
elif MiB <= B < GiB:
return '{0:.2f} MiB'.format(B / MiB)
elif GiB <= B < TiB:
return '{0:.2f} GiB'.format(B / GiB)
elif TiB <= B :
return '{0:.2f} TiB'.format(B / TiB)
print('{0} == {1}'.format(t,humanbyte(t)))
humanbyte(11000000000)
'10.24 GiB'
## 파이썬으로 docx 파일 만들기 예제
from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='Intense Quote')
document.add_paragraph(
'first item in unordered list', style='List Bullet'
)
document.add_paragraph(
'first item in ordered list', style='List Number'
)
document.add_picture('1.png', width=Inches(1.25))
records = (
(3, '101', 'Spam'),
(7, '422', 'Eggs'),
(4, '631', 'Spam, spam, eggs, and spam')
)
table = document.add_table(rows=1, cols=3, style='Table Grid')
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:
row_cells = table.add_row().cells
row_cells[0].text = str(qty)
row_cells[1].text = id
row_cells[2].text = desc
document.add_page_break()
document.save('minsu.docx')
## 시간출력 메서드
from datetime import datetime
ntime = datetime.now()
vYear = ntime.year
vDay = ntime.day
vHour = ntime.hour
vMinute = ntime.minute
print(ntime)
print(vYear)
2019-12-24 12:52:20.681030
2019
## S3 버켓리스트를 출력하고 각각의 용량을 계산해 워드문서로 출력해주는 프로그램
from docx import Document
from docx.shared import Inches
from datetime import datetime
import boto3
ntime = datetime.now()
vYear = ntime.year
vMonth = ntime.month
vDay = ntime.day
vHour = ntime.hour
vMinute = ntime.minute
document = Document()
vDivision = 'S3 list'
vName = 's3-list-python'
document.add_heading(vDivision,0)
document.add_heading(vName,1)
def humanbytes(B):
B = float(B)
KiB = float(1024)
MiB = float(KiB ** 2)
GiB = float(KiB ** 3)
TiB = float(KiB ** 4)
if B < KiB:
return '{0} {1}'.format(B, 'Bytes' if 0 == B > 1 else 'Byte')
elif KiB <= B < MiB:
return '{0:.2f} KiB'.format(B / KiB)
elif MiB <= B < GiB:
return '{0:.2f} MiB'.format(B / MiB)
elif GiB <= B < TiB:
return '{0:.2f} GiB'.format(B / GiB)
elif TiB <= B:
return '{0:.2f} KiB'.format(B / TiB)
# print('{0} == {1}'.format(t, humanbytes(t)))
# humanbytes(110000)
# humanbytes(11)
document.add_heading('s3현황',level =1)
tables3info = document.add_table(rows=1,cols=5)
tables3info.style = 'Table Grid'
hrd_cells = tables3info.rows[0].cells
hrd_cells[0].text = 'NUM'
hrd_cells[1].text = 'S3명'
hrd_cells[2].text = '생성일자'
hrd_cells[3].text = '파일개수'
hrd_cells[4].text = '전체크기(MiB)'
s3infoNum = 0
default_session= boto3.session.Session(profile_name='soyeon-cli')
s3_res=default_session.resource(service_name='s3', region_name='ap-northeast-2')
for each_bucket in s3_res.buckets.all():
try:
s3infoNum = s3infoNum + 1
bucket_name = each_bucket.name
bucket_created_date = each_bucket.creation_date
print(bucket_name)
print(bucket_created_date)
res = boto3.resource(service_name='s3')
bucket = res.Bucket(bucket_name)
bobjects = bucket.objects
keys = []
filesize = []
sum = 0
for ba in bobjects.all():
filesize.append(ba.size)
for s in range(0, len(filesize)):
# print(s)
sum = sum + filesize[s]
# sum = round(sum,2)
row_cells = tables3info.add_row().cells
row_cells[0].text = str(s3infoNum)
row_cells[1].text = bucket_name
row_cells[2].text = bucket_created_date.strftime("%y/%m/%d %H:%M:%S")
row_cells[3].text = str(s)
row_cells[4].text = str(humanbytes(sum))
print(humanbytes(sum))
except Exception as e:
print("Error")
document.add_page_break()
document.save(vDivision +'.docx')