개요
데브코스에서 24.05.13 ~ 24.05.17 (총 5일) 동안 데이터 웨어하우스(Snowflake)와 preset(=superset)을 사용하여 적재한 데이터를 바탕으로 대시보드를 구축하는 프로젝트를 진행한다. 그러나 3일 차인 어제(24.05.15) 대시보드까지 구성이 완료되었다. 마침 멘토님과 프로젝트 중간 리뷰 시간이 있어 조언을 받았는데, 데이터 적재 자동화 부분을 구성하지 않아 빨리 마무리된 것이라고 말씀하셨다. Airflow를 이용한 자동화는 차후 프로젝트에서 진행될 내용이며, 프로젝트 종료까지 시간이 남았기 때문에 팀원 분들과 협의하여 Airflow를 제외한 자동화 방법엔 무엇이 있는지 탐색하는 시간을 갖기로 하였다. 실제로 적용하는 것은 아니고 공부 차원에서 진행하는 것이다.
프로젝트 구성도
서울 열린 데이터 광장에서 csv 파일을 다운로드하여 S3에 적재 후 대시보드를 제작하는 방식이다. 자동화 부분은 구현되지 않은 형태이다.
데이터 적재 자동화
차후에 배우는 Airflow를 제외하고 다른 방식으로 해당 프로젝트에서 자동화를 적용할 수 있는 방법으로 멘토님이 두 가지를 알려주셨다. 두 가지 중에서 EC2 / crontab을 활용한 방법에 대해 알아보자!
- AWS EC2와 crontab 활용
- AWS EventBridge / Lambda 활용
AWS EC2와 crontab 활용
crontab
개념
crontab이란 리눅스용 작업 스케줄러로 특정 시각에 명령어를 반복 수행할 수 있도록 하는 프로그램이다. 데이터를 저장하는 코드만 구현한다면, crontab을 사용하여 주기적으로 저장할 수 있다.
설치
crontab은 리눅스용이기 때문에 윈도우에서는 사용할 수 없다. 따라서 아래의 링크에서 프로그램을 설치하여 진행한다.
사용
설치를 진행한 후 crontab이 올바르게 작동하는 것을 확인하였다. 그리고 아래처럼 간단한 예시를 통해서 csv 파일이 생성되나 확인해보려 했으나.. 로그를 확인해 보니 올바르게 실행은 된 것 같으나 csv 파일이 제대로 생성되지 않았다. 또한 pyinstaller 라이브러리를 사용해서 exe 파일로 변환 후 실행해도 결과는 같았다. exe 파일을 직접 실행해도 csv 파일은 생성되지 않았다.
14:26:00 18512 Start: "python 경로" C:\Users\ADMIN\Desktop\test.py
14:26:00 18512 Start result: 0
# 1분마다 test.py를 실행하는 crontab 코드
*/1 * * * * "python 경로" test.py
''' test.py
import pandas as pd
df = pd.DataFrame({'name':['a', 'b', 'c'],
'age':[20, 21, 22]}, columns=('name', 'age'))
df.to_csv('test.csv')
'''
to_csv를 print로 바꾸면 실행이 제대로 되는지 확인해 보았다. to_csv를 print로 변경하니 올바른 결과를 얻을 수 있었다.
# 1분마다 test.exe를 실행하는 crontab 코드
*/1 * * * * C:\Users\ADMIN\Desktop\test.exe
''' test.py
import pandas as pd
import time
df = pd.DataFrame({'name':['a', 'b', 'c'],
'age':[20, 21, 22]}, columns=('name', 'age'))
print(df)
time.sleep(10)
'''
결론
- to_csv 함수가 올바르게 작동하기 위한 방법을 찾아봐야 할 것 같다.
- python 경로가 잘못되어 .py가 올바르게 작동하지 않았을 가능성이 있다.
- exe 파일은 정상적으로 작동한다.
EC2
개념
EC2는 AWS에서 제공하는 클라우드 컴퓨팅 서비스이다. 쉽게 말하면 원격으로 제어할 수 있는 가상의 컴퓨터 한 대를 빌리는 것이다. crontab만 구현한다면 로컬 환경에서 밖에 실행을 할 수 없다. 즉, 컴퓨터를 종료하면 데이터 적재가 끊겨버린다. 이때, 클라우드 서버인 EC2를 사용하면, 본인의 컴퓨터 동작과 관계없이 crontab 코드를 지속적으로 실행할 수 있다.
실습 환경
ec2 인스턴스를 생성하고 서버에 접속하는 방법을 적어두었다.
- AWS ec2 대시보드 접속
- 키 페어 생성 : .ssh에 Key 파일 저장
- ec2 인스턴스 생성 : 생성한 키 페어로 설정
- 커맨드 실행 : 윈도우라서 git bash를 사용
- Key file 권한 변경 : chmod 400 "key.pem"
- 서버 접속 : ssh -i Key.pem ec2-user@public_DNS
사용
EC2 서버에서 crontab을 활용해 py 파일을 실행하는 것을 진행해 보자. 일단 위의 링크를 참고하여 EC2 인스턴스 생성 및 접속을 진행하였다.
- Python 설치
확인해 보니 Python이 설치되어 있었다. 설치가 되어있지 않다면, 설치를 진행한다.
# python이 설치되어 있는지 확인
sudo yum list | grep python
# python3 설치
sudo yum install python3
- pip 설치
pip는 바로 사용할 수 없기 때문에 아래의 코드를 실행하여 설치를 진행해 준다.
curl -O https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
- 사용할 라이브러리 설치
위의 crontab에서 실행했던 test.py를 실행시켜 보기 위해 pandas 라이브러리를 설치한다.
pip install pandas
- AWS configure
cron는 AWS 서비스 커맨드를 사용하여 실행할 수 있는데, 이를 사용하기 위해서는 AWS IAM의 사용자를 추가하여 EC2에 등록해야 한다.
- AWS IAM 접속 및 사용자 생성
- 사용자 > 보안 자격 증명 탭 > 액세스 키 만들기 > AWS 컴퓨팅 서비스에서 실행되는 애플리케이션
- EC2 접속된 콘솔에서 aws configure 입력
- 접속 키, 비밀 접속키는 생성했던 사용자의 액세스 키 입력
- Default region name : 사용하고 있는 AWS region 예) ap-northeast-2(서울 리전)
- Default output format은 엔터로 넘어가도 됨
- 입력한 정보는 aws configure list로 확인 가능
- crontab 설치
# cron 설치
sudo yum install cronie
# cron 서비스 실행
sudo service crond start
# 수정 가능한 crontab 열기
crontab -e
- 테스트
vim 명령어를 통해 이전에 작성했던 test.py를 홈 디렉터리에 만들었다. 사용할 경로는 다음과 같다.
# python3 경로
which python3
>> /usr/bin/python3
# 현재 경로
pwd
>> /home/ec2-user
경로를 참고하여 crontab을 다음과 같이 작성하였다. EC2 환경에서는 to_csv가 올바르게 작동하는 것을 확인하였다. 아무래도 환경 문제였던 것 같다.
*/1 * * * * /usr/bin/python3 /home/ec2-user/test.py
''' test.py
import pandas as pd
df = pd.DataFrame({'name':['a', 'b', 'c'],
'age':[20, 21, 22]}, columns=('name', 'age'))
df.to_csv('test.csv')
'''
결론
- to_csv가 작동하지 않았던 이유는 python 경로를 잘못 지정했거나 환경 문제가 있었을 것이다.
- EC2에서 crontab까지 확인하였으니 python을 활용해 s3로 데이터를 적재하면 된다.
- 적재 과정은 여기서 다루지는 않았지만, boto3 라이브러리를 사용하면 가능하다.
Reference
https://seethefuture.tistory.com/83
https://velog.io/@server30sopt/AWS-EC2-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC
https://rfriend.tistory.com/252
https://sulmasulma.github.io/data/2020/07/09/ec2-crontab.html
'Infra > AWS' 카테고리의 다른 글
[AWS] Amazon VPC (Virtual Private Cloud) 개념과 구성 요소 (0) | 2024.07.03 |
---|---|
[AWS] AWS 서비스 종료 후에도 VPC 비용 발생 문제 해결 (0) | 2024.05.21 |
[AWS] IAM 개념과 작동 방식 및 리소스 (0) | 2024.05.17 |
[AWS] Amazon Redshift 개념과 구조, 특징 (0) | 2024.05.16 |
[AWS] Amazon S3 개념과 관련 용어 및 실습 (0) | 2024.05.15 |