일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- github
- json
- atlas
- openapi
- Algorithm
- frontend
- CRUD
- pymongo
- requests
- CSS
- mysql
- flaskframework
- fetch
- javascript
- NAS
- venv
- body
- portfolio
- beautifulsoup
- Project
- PYTHON
- Crawling
- OOP
- synology
- java
- flask
- POST
- get
- backend
- mongodb
- Today
- Total
wisePocket
[AWS EB 배포] AWS Elastic Beanstalk 03 프로젝트 완료 이후 실제 배포 과정 본문
[AWS EB 배포] AWS Elastic Beanstalk 03 프로젝트 완료 이후 실제 배포 과정
ohnyong 2023. 7. 19. 00:36이제 AWS 회원 가입 과정을 거치고 사용자 그룹과 권한을 가진 사용자를 추가하는 등 기본적인 계정 보안 세팅을 완료 한 뒤
IAM 사용자 ID 및 비밀번호,
액세스 키(Access Key or aws-access-id)와 비밀 액세스 키(aws-secret-key)까지 메모장에 기록해 두었다.
웹 프로젝트를 로컬 환경(Flask 내장 서버로 실행하던 것 localhost:5001/)에서 충분히 구현하고 동작, 기능의 문제가 없는지 검수하여 완료된 프로젝트는 배포 준비를 진행하게 된다.
본인은 배포 학습 직전 마지막 미니 프로젝트인 "Flask framework 미니프로젝트(project fan)"을 대상으로 배포 테스트를 진행하고자 한다. 정확히 순서대로 진행해야 실수를 만들지 않을 수 있다.
1. 터미널에서 완료된 프로젝트 배포할 폴더구조, 파일 준비하기
아래 cmd 명령어는 단순 복사 및 폴더 이동도 포함되어 있다. 하지만 GUI보다 CLI로 순서대로 입력해서 경로를 잘못 클릭하는 등 실수를 만들지 말자.
- (venv) 가상 환경 커맨드 창에서 아래 커맨드를 입력한다.
- root/deploy/ 폴더를 만든다. 프로젝트 본체가 모두 담기는 폴더이다.
mkdir deploy
- 로컬에서 작업했던 메인 파일인 app.py를 deploy/ 폴더로 "application.py"라는 이름으로 변경하면서 카피한다.
cp app.py deploy/application.py
- 로컬에서 작업했던 View 페이지(/template/index.html)가 담긴 /templates 폴더를 deploy/ 폴더로 하위 디렉토리까지 포함하여(-r) 카피한다.
- 로컬에서 작업했던 CSS(static/css/style.css), JS(static/js/script.js)가 담긴 /templates 폴더를 deploy/ 폴더로 하위 디렉토리까지 포함하여(-r) 카피한다.
- 그 외 참조되는, 기능에 구현된 폴더가 있다면 동일한 방법으로 카피해 준다.
cp -r templates deploy/templates
cp -r static deploy/static
- 로컬에서 작업했던 프로젝트에 설치된 패키지 목록 정보를 freeze를 통해서 deploy/ 폴더로 "requirements.txt"라는 이름으로 파일을 생성해 준다.
pip freeze > deploy/requirements.txt
- root/deploy/ 폴더로 이동(터미널에서 폴더를 이동한 것이다.)
cd deploy
위 커맨드를 터미널 창에 입력하면
root/deploy 폴더가 생성되어 있어야 하며 application.py가 메인 파일, view 및 static 등으로 참조되었던 폴더, 그 내부 스크립트 파일들도 모두 deploy 폴더 안에 들어가 있어야 한다. 또한 기능 구현 등을 위해 설치했던 프레임워크, 드라이버, 모듈 등 모든 라이브러리는 아래처럼 버전과 함께 requirements.txt에 기록되어 있어야 한다. 마지막 단계에서는 터미널에서 deploy 폴더로 이동하여 Elastic Beanstalk 패키지 설치를 대기해야 한다.

2. 메인 파일(app.py를 카피한) root/deploy/appication.py 파일 엔트리 포인트 세팅하기
1단계에서 처음 카피 했던 메인 파일 deploy/"appication.py"를 에디터로 열어서 엔트리 포인트 부분을 변경해 주어야 한다. 기존 코드는 localhost:5001/로 되어 있기 때문에 AWS의 컴퓨터가 돌릴 수 있도록 바꿔준다고 생각하면 된다.
- appication.py에서 바꿔야 하는 첫 부분(상단 위치)
application = app = Flask(__name__)
좌측은 app.py 원본이며, application.py도 단순 이름만 변경되고 카피된 상태기 때문에 동일한 코드일 것이다.
우측과 같이 변경해 준다.

- appication.py에서 바꿔야 하는 두 번째 부분(하단 위치)
if __name__ == '__main__':
app.run()
좌측은 app.py 원본이며, application.py도 단순 이름만 변경되고 카피된 상태기 때문에 동일한 코드일 것이다.
우측과 같이 변경해 준다. (if 조건절 내로 들어오도록 들여 쓰기를 신경 써야 한다.)

3. Elastic Beanstalk 패키지 설치하기
1단계 마지막 부분에서 터미널에서 deploy 폴더로 이동하여 Elastic Beanstalk 패키지 설치를 대기했다. 혹시나 다른 위치라면 "cd deploy"로 커맨드 창에서 해당 폴더에서 대기한다.

- AWS Elastic Beanstalk 패키지를 설치한다.
pip install awsebcli
다운로드 및 설치가 완료되면 "Successfully installed PyYAML-5.4.1 attrs-23.1.0 awsebcli-3.20.7 bcrypt-4.0.1... " 메시지가 출력된다.

* ERROR: Failed cleaning build dir for bcrypt... Building wheel for pynacl (PEP 517)... | ERROR: Operation cancelled by user
와 같은 오류가 발생하는 경우 pip(패키지 인스톨 매니저)의 버전이 낮은 경우일 수 있다.
이 경우 아래 커맨드로 pip을 업그레이드 완료하고 다시 awsebcli를 설치하면 정상적으로 AWS Elastic Beanstalk 패키지가 설치된다.
pip install --upgrade pip

4. Elastic Beanstalk 보안 자격증명
이제 Elastic Beanstalk 패키지를 설치했기 때문에 eb라는 명령어를 사용할 수 있다. 프로젝트 업로드 전 보안 자격증명(사용자 확인 등)을 진행하는데 이는 AWS가입한 사람이 맞는지, 키는 가지고 있는지 등을 검증하는 단계이다. 마치 컴퓨터를 렌털하는데 신분증을 검사하고 보관하는 것과 비슷하다 생각하자.
- 아래 커맨드 명령어로 보안 자격 증명을 시작한다. 해당 커맨드는 터미널의 위치가 deploy/ 인 것을 재확인하고, Elastic Beanstalk가 직전에 성공적으로 설치되어 있는지 확인하고 진행하자.
eb init
- 1. 첫 질문은 지역 선택이다. 10을 입력하고 엔터(10 = 아시아-서울)

- 2. 두 번째 질문은 액세스 키(Access Key or aws-access-id)와 비밀 액세스 키(aws-secret-key)를 물어본다. 메모장에 기록해 둔 키를 각각 입력한다.

- 3. 세 번째 질문은 애플리케이션의 이름이다. 지정 안 하고 엔터로 넘어가면 (기본값은 deploy)

- 4. 네 번째 질문은 메인 언어와 서버 컴퓨터 플랫폼을 결정하는 것이다. Python 프로젝트이므로 Y, 플랫폼은 기본 설정 1로 진행

- 5. 다섯 번째 질문은 데이터 전송 및 원격 등 보안적으로 안전하게 통신하기 위해 사용되는 네트워크 프로토콜 SSH를 세팅해 줄까라는 질문이다. Y로 설정

- 6. 여섯 번째 질문은 Private Key, Public Key 쌍의 키를 생성해야 하므로 키 이름, 암호를 물어본다. 엔터로 기본값들로 설정

이제 모든 설정이 완료되었다. deploy에 카피하여 대기 중인 프로젝트를 AWS에 업로드하자.
5. Elastic Beanstalk 초기 업로드 시 설정(AWS로 세팅된 실제 패키지 업로딩 부분)
- 아래 커맨드 명령어로 프로젝트 초기 업로드를 시작한다. 해당 커맨드는 터미널의 위치가 deploy/ 인 것을 재확인하고, Elastic Beanstalk가 직전에 성공적으로 설치되어 있는지 확인하고 진행하자.
eb create myweb
해당 커맨드를 입력하면 현재까지 세팅한 내용들에 따라 AWS에 root/deploy/ 에 담긴 프로젝트가 업로드된다. 약간의 시간이 소요된다.

6. 브라우저에서 AWS 콘솔로 확인
설정 시 Access Key에 접근할 수 있는 권한이 있는 AWS IAM 계정 또는 루트 계정으로 AWS 콘솔 페이지를 들어가 보면 업로드 중인 또는 업로드된 프로젝트를 확인 할 수 있다.

업로드된 애플리케이션(프로젝트)을 클릭하여 정보를 확인하면 활성 상태와 도메인 등 정보를 확인할 수 있다.

브라우저에서 해당 도메인으로 접속하면 프로젝트가 웹에 배포되어 서비스되고 있는 화면을 확인할 수 있다.

http://myweb.eba-6icts6dp.ap-northeast-2.elasticbeanstalk.com/
NEW JEANS 팬명록
NEW JEANS의 Spotify 순위정보! 응원 댓글을 등록 할 수 있는 페이지 입니다.
myweb.eba-6icts6dp.ap-northeast-2.elasticbeanstalk.com
7. 유지보수 (코드 수정 & 업데이트 방법)
- 전제) AWS EB로 배포 중인 프로젝트는 첫 업로드 때도 마찬가지지만 deploy 내 코드가 AWS로 업로드되고 배포되는 것이다.
- 이 말은 app.py, index.html 등 로컬에서 테스트한 파일을 변경해도 적용이 안된다는 것
- 실질적으로는 deploy/ 내 application.py, templates 등등이 변경되어야 한다.
- 또한 변경된 내용을 업데이트해주어야 한다.
- 따라서 app.py, index.html 등 로컬에서 테스트를 진행하고 변경이 확정되면
- 변경된 코드를 deploy/ 내 application.py, templates 등 폴더 및 코드에도 동일하게 코드 작성 또는 카피
- 이후 아래 업데이트 진행
- 초기 업로드 당시 "eb create myweb"로 생성 및 업로드했기 때문에 AWS 내 프로젝트 이름은 "Environment name"이 "myweb"으로 설정되어 있다.
- 아래 커맨드 명령어로 프로젝트 수정 및 업데이트 업로드를 시작한다. 해당 커맨드는 터미널의 위치가 deploy/ 인 것을 재확인하고, 수정된 코드가 deploy/ 에 적용된 지 체크한 후 진행한다.
eb deploy myweb
실수로 static폴더를 deploy/에 옮기지 않아서 css, js를 읽어오지 못했는데
deploy/폴더에 static 폴더를 하부 폴더까지 모두 포함시켜 카피하고, 위 업데이트 이후 확인해 보니 css, js가 정상적으로 작동되었다.
'Python&Flask Tutorials, AWS EB > 5th WEEK AWS, GET&POST' 카테고리의 다른 글
[AWS EB 배포] AWS Elastic Beanstalk 02 Access Key 생성 과정 (0) | 2023.07.14 |
---|---|
[AWS EB 배포] AWS Elastic Beanstalk 01 다중 인증(MFA) 설정 과정 (0) | 2023.07.14 |
[AWS EB 배포] AWS Elastic Beanstalk 00 웹 서비스 배포 간단 개념과 AWS 가입, 그룹 및 사용자(IAM) 추가 과정 (0) | 2023.07.14 |