본문 바로가기
항해99/프로젝트

[AWS] 클라우드 서버에 배포하기

by junvely 2023. 2. 15.

🦄 클라우드 서버에 배포하기(AWS)

 

 

AWS는 아마존에서 제공하는 서비스로, 클라우드(인터넷)상에서 컴퓨터(서버)를 빌려주어 웹 서비스를 배포할 수 있도록 해주는 서비스다.

지난 향수 협업 프로젝트에서는 람다 서버를 이용했다고 들었다. 람다 서버는 요청이 들어올 때만 서버가 가동되는 시스템이었던 것으로 기억한다. 첫 요청 시 서버가 가동되는데 시간이 조금 더 걸리기 때문에 처음 로딩 시간이 비교적 길어지는 단점이 있었지만(프론트 입장에서 경험한 바로는 7s정도 소요..?), 사용자의 요청이 들어올 때에만 서버를 가동시키기 때문에 그 만큼 비용상으로 좀 더 절약될 수 있다는 장점이 있었던 걸로 기억한다. 각 서버의 종류마다 장단점이 있는 것 같다.

이번에는 쉽고 빠르게 배포가 가능한 AWS Elastic Beanstalk를 이용하여 배포하는 과정을 정리해 보려고 한다.


01 내 프로젝트 서버에 올리기

로컬 서버에서 => AWS 클라우드 서버에 웹 서비스 배포하기

- AWS : Amazon Web Service => 우리가 배포할 수 있도록 클라우드(인터넷) 상에서 컴퓨터(서버)를 빌려주는 곳

=> Amazon이 위 이미지와 같이 구축해놓은 데이터센터의 컴퓨터 한 개를 빌려서 배포하는 것을 말한다.

- AWS Elastic Beanstalk : AWS는 각종 다양한 배포에 관련 서비스를 제공한다. 굉장히 복잡한 과정(서버를 사고, 업로드하고, 실행 시키고 ...)을 거쳐야 하는데, Beanstalk을 이용하면 쉽고 빠르게 배포가 가능하다.

1) 로컬 서버 => 클라우드 서버로

2) 컴퓨터 구매

3) 업로드 => 내 프로젝트 업로드하고 실행해 놓으면 끝

 

 

02 AWS Elastic Beanstalk으로 배포하기

- AWS Elastic Beanstalk

https://ap-northeast-2.console.aws.amazon.com/elasticbeanstalk/home?region=ap-northeast-2#/welcome

 

 

1. 로그인 => 프로필 => 보안 자격 증명(ctrl+클릭하면 새창으로뜸)

2. 액세스 키 만들기 클릭 => 키 생성 => 액세스 키와 비밀 액세스 키 메모장에 적어놓기(루트사용자는..경고뜸)

3. 배포 명령어 모음

- 터미널 준비하기 - 
# 순서대로 입력
mkdir deploy
cp app.py deploy/application.py
cp -r templates deploy/templates
pip freeze > deploy/requirements.txt
cd deploy

# 파일 다 끄고 application.py 코드수정
- appication.py 세팅하기 - 
application = app = Flask(__name__)
app.run()

# 순서대로 설치
- 패키지 설치하기 - 
pip install awsebcli

- 보안 자격증명 - 
eb init

- 초기 설정 - 
eb create myweb

- 코드 수정 & 업데이트 - 
eb deploy myweb

*VScode - clear하고 시작

1. 폴더생성 

$ mkdir deploy

2. app.py파일을 deploy 밑에있는 application.py로 복사해라

$ cp app.py deploy/application.py

3. templates 폴더를 통째로 복사해라

$ cp -r templates deploy/templates

4. requirements.txt파일에 우리가 여태까지 설치한 라이브러리들 적어달라(환경 그대로 복사)

$ pip freeze > deploy/requirements.txt

5. deploy

$ cd deploy

- clear

 

6. 모든 파일 다 끄고, apllication.py 파일 코드 수정 

=> apllication.py 두번째 줄 수정

=> app.run 수정 마지막 줄 수정 

application = app = Flask(__name__)  #두번째 줄
app.run() #마지막 줄

=> deploy됨

- 지금까지 한 것 => 우리 프로젝트를 배포 폴더에 그대로 복사 한 것

=> requirments.txt는 venv같이 지금까지 설치한 라이브러리들을 복사해 놓음

 

7. awsebcli로 AWS Elastic Beanstalk 배포하기 

- awsebcli 패키지 설치하기

pip install awsebcli

 

 

```
Select a default region : 10 (seoul)

AWS Access Key ID [None]: 발급된 액세스 키 ID (복사 붙여넣기)
AWS Secret Access Key [None]: 발급된 비밀 액세스 키 (복사 붙여넣기)

Enter Application Name (default is "deploy") : enter
It appears you are using Python. Is this correct? : Y
Select a platform branch (default is 1) : enter

Do you want use Codecommit? : N
---
Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization
Do you want to set up SSH for your instances? : Y

Select a keypair : [Create new Keypair]

Type a keypair name : enter
Enter passphrase : enter
Enter same passphrase again : enter
```

 

=> 지금까지 한 것이 컴퓨터 한 대를 산 것, 이제부터 업로드하고 실행시킬 것

 

8. Eb create : 초기설정

eb create myweb

- 기다리는 동안 배포 환경 접속하기

환경 => 상태가 OK 되면 성공 => URL을 Ctrl+클릭하기 => 새창에서 열림

=> 배포성공!!

내가 만든 팬명록 🙌

 

9. 코드 수정 & 업데이트

- 수정 후에 배포에 반영시키는 방법 =>내 컴퓨터에서 돌려보고, 괜찮을 시 배포

1) venv 활성화 시키기

2) 내 app.py 서버 실행 => 코드 수정 후 괜찮으면

3) deploy 파일에서 복사된 파일에 => 코드가 변경된 부분 => 해당 부분 변경 또는 전체 복붙

4) 업로드 => deploy폴더로 이동 후 배포

cd deploy
eb deploy myweb

❗5) 주의!!!! 과금!! => 1년동안 과금 안됨, 1년 지나면 과금되니 => 삭제하기

- eb create를 할 때마다 서버를 구매한다! eb create를 자주 하면 안됨 => 여러개일 시 과금 됨

=> 확인방법 => 어플리케이션이 한 개만 있어야 한다.=> 만약 여러개 만들 경우 => 작업란에서 어플리케이션 삭제하여 한개로 유지해 줘야 한다.