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')