-
Python: 무료 Cloud Flask 서버 만들기 (AWS EC2 + S3)컴퓨터/파이썬 2020. 12. 26. 17:44728x90반응형
AWS
1. 소개
AWS는 클라우드 서버를 제공해 주어서 ssh로 접속하면 가상 환경으로 서버에 접속할 수 있다.
카카오 챗봇 스킬 서버를 구름 IDE 무료 버전으로 이용하고 있으나, 인터넷 창을 닫으면 꺼진다.
터미널은 열어두기 편하고, AWS을 이용해 보고 싶어서 아래와 같은 상황을 만들 것이다.
- AWS S3 온라인 클라우드 만들기 (ES2 서버에서 로컬 컴퓨터 파일 sync)
- AWS EC2 우분투 서버 만들고 실행하기
- python 가상 환경 만든 후 flask 서버 실행
2. AWS EC2 서버 만들기
AWS 계정이 없으면 일단 하나 만든다. @계정 만들기
계정을 무료 플랜으로 만든 후 콘솔에서 EC2를 클릭
인스턴스 시작 클릭
Free tier 원하는 OS 선택
이 글에선, Ubuntu 20.04 버전으로 설명됐다.
이후, 검토 및 시작 - 시작을 눌러 키 페어를 생성
자신의 이름이나 랜덤 문자를 적어준다.
인스턴스 시작 후 연결
인스턴스를 시작했으면
인스턴스 ID 클릭 후 맨 오른쪽 연결 클릭
ECS 인스턴스 연결에서 바로 하거나, 윈도우 파워셀에서 하기 위해
SSH 클라이언트를 이용한다.
CHMOD 400 .pem
윈도에서 400 상태를 만들어 주기 위해 아래와 같이 설정한다.
pem 파일 우클릭 - 보안
고급에서 상속 사용 안 함
Admin, SYSTEM 이외 나머지 계정 전부 제거
SSH 연결
ssh 클라이언트 연결 메뉴에서 명령어 복사 후 서버 ubuntu에 접속한다.
파이썬 설치
sudo apt update sudo apt install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa
ppa 추가하면 원하는 파이썬 버전을 다운로드할 수 있다.
(@버전 목록)
python을 했을 때 알아서 python3을 불러오도록 설정
(python3.8 + pip 설치)
sudo apt install python3.8 alias python=python3 sudo apt-get install python3-pip alias pip=pip3
(옵션) 파이썬 가상 환경
pip install virtualenv
server란 가상 환경으로 만들었다.
virtualenv ~/server
source ~/server/bin/activate
패키치 설치
pip install flask
Flask 포트 설정
EC2 인스턴스 메뉴에서 보안 그룹을 클릭
launch-wizard~ 클릭 후 인바운드 규칙 편집
규칙 추가 - 사용자 지정 TCP - 포트 범위 8000 - 소스 0.0.0.0/0 설정
8000 포트로 접속할 수 있게 만든다.
3. AWS S3 클라우드
내 컴퓨터 개발 폴더 전체를 s3를 주기적으로 sync 후,
EC2 가상 환경에서 nano로 py를 편집하지 않는 방식으로 할 것이다. (s3 클라우드에서 py 다운로드)
콘솔에서 S3 클릭
버킷 만들기
버킷 설정
퍼블릭 설정을 위해 "모든 퍼블릭 액세스 차단" 해제 후 원하는 옵션을 클릭한다.
자신의 버킷 - 권한으로 이동
JSON 복사
내 버킷 이름을 자신의 버킷으로 변경한다.
퍼블릭으로 만들기 위한 설정이다.
{ "Version": "2012-10-17", "Id": "Policy1608967205105", "Statement": [ { "Sid": "Stmt1608967202197", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::내 버킷 이름/*" } ] }
수정하면 퍼블릭 액세스 가능이라고 뜰 것이다.
이제, S3 클라우드 설정은 끝났다.
원하는 파일 업로드 후 접속이 잘되는지 확인한다.
테스트 파일
AWS CLI 설치
알맞은 운영체제에 맞게 설치한다.
(윈도우는 설치 파일, linux/ubuntu는 pip)
IAM 키 만들기
AWS CLI를 사용하기 위해 액세스 키를 만들어준다.
(맨 우측 자신의 계정 클릭 - 내 보안 자격 증명)
터미널에서 aws configure 실행
위에서 만든 자신의 키를 복사하고, region은 서울 기준 (ap-northeast-2)
모르겠으면, 자신의 ec2 인스턴스로 이동해서 브라우저 url, region을 확인한다.
내 폴더 sync
스케쥴러로 10분마다 sync 하게 할 수도 있다.
aws s3 sync 윈도우복사할경로 s3://버킷 이름
EC2 서버에서 S3 클라우드 다운로드
awscli pip 설치
pip install awscli
--recursive 옵션으로 내 버킷에 있는 파일/폴더 전부를 pykf 폴더로 복사한다.
(혹은 s3 클라우드를 내 폴더와 sync)
aws s3 cp s3://내버킷/ ~/pykf --recursive aws s3 sync s3://내버킷/ ~/pykf
설정한 포트로 서버.py를 실행
python app.py 8000
자신의 퍼블릭 IPv4 DNS 주소:8000으로 접속해본다.
오류 상황
만약 서버 실행 중에 Connectiond reset by ~ ssh port 22라고 뜨면,
EC2 인스턴스 터미널에서
sudo nano /etc/ssh/sshd_config
후, ClientAliveInterval 을 주석 해제 후, 0~240 값으로 바꾼다.
Windows 쪽에선
~/user/.ssh에서 config 파일을 만든 후, 아래를 입력한다.
Host * ServerAliveInterval 200
재시작
728x90'컴퓨터 > 파이썬' 카테고리의 다른 글
Python smtplib: 원하는 다나와 제품 가격 매일 알림 만들어보기 (0) 2021.01.09 Python: Popen 백그라운드 실행 및 로그 읽기 (linux) (0) 2020.12.22 Python: Kafka + 대학교 공지 Parser + Slack API + MySQL (0) 2020.12.15