티스토리 뷰

Get FTP files on jupyter and save S3

특정 FTP서버의 매시 10분마다 생성되는 특정 파일들을 가져와서 임시 저장하고 S3에 저장하는 코드 일부분이다.

#-*- coding: utf-8 -*-
from ftplib import FTP
import sys
import logging
import platform
import os.path
import boto3
from datetime import datetime, timedelta


logger = logging.getLogger()
logger.setLevel(logging.INFO)

filename = "FILE_" + (datetime.now()- timedelta(minutes=10)).strftime("%Y%m%d%H")+".txt"
if platform.system() == "Linux":
paths = "SERVER PATH"
else:
paths = "LOCAL PATH"

if os.path.exists(paths+filename):
pass
else:
try:
ftp = FTP('FTP-IP',"name", "password")
ftp.cwd('FTP path')
locals = os.path.join(paths, filename+".txt")

try:
load_data = open(locals)

except IOError:
load_data = open(locals, "wb")

ftp.retrbinary('RETR %s' % filename, load_data.write)
logger.info("download FTP - %s" %(filename))
load_data.close()

except:
logger.error('FTP Error - %s' %(filename))
raise Exception("FTP - Server Some Error")


folder_dir = datetime.now().strftime("%Y%m%d")+"/"
s3 = boto3.resource('s3', 'ap-northeast-2')


# upload data
with open(paths+filename, 'rb') as data:
s3.Bucket('BUCKET-NAME').put_object(Key="AWS"+folder_dir+filename+".txt", Body=data)
logger.info("upload file S3 - %s" %(filename))

%time
#CPU times: user 3 µs, sys: 1e+03 ns, total: 4 µs
#Wall time: 6.91 µs

로컬에서는 빠른 속도로 나오는 걸 보니 서버에서 돌려도 괜찮은가 보다?! (사실 해봐야알지...)

로컬에서 테스트할 때 (Jupyter) 가장 귀찮은 점이 바로 Path 설정이다. 매번 서버와 로컬에서 비교할 때마다 Path 값을 바꿔줘야하는데,
(심하게 귀찮아서) 그냥 os적으로 platform 이름이 다른 두 경우로 Path를 설정해줬다. 이로써 로컬이나 서버나.... 알아서 처리되니까

if platform.system() == "Linux":
paths = "SERVER PATH"
else:
paths = "LOCAL PATH"

cron-job을 이용해서 매시 10분마다 코드를 돌려서 해당 데이터를 가져오도록 한다.
귀찮으니 로그는 매번 다찍어버리고,(원래는 로그찍기 안했....)

서버에 가져왔으면 이제 S3에 업로드하는 것을 보자.

    folder_dir = datetime.now().strftime("%Y%m%d")+"/"
s3 = boto3.resource('s3', 'ap-northeast-2')


# upload data
with open(paths+filename, 'rb') as data:
s3.Bucket('BUCKET-NAME').put_object(Key="AWS"+folder_dir+filename+".txt", Body=data)
logger.info("upload file S3 - %s" %(filename))

boto3 라이브러리 불러와서 S3와 연결하고 아까 불러온 파일을 S3 버켓에 넣는다. (자~알 들어간다~ 후루룩~)






댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함