from flask import Flask from flask_restx import Api, Resource
app = Flask(__name__) api = Api(app)
@api.route('/api/users') # /api/user 에 클래스 매핑 class HelloWorld(Resource): def get(self): return {"id": 123, "name": "kim"}
if __name__ == "__main__": app.run(debug=True, host='0.0.0.0', port=82)
- 에러 발생
restx 모듈을 못찾았다.
해당 모듈 설치 후 재실행
sudo pip3 install flask_restx
- 구동완료
3) DB용 인스턴스 구성
ㅁ PostgreSQL 설치
sudo apt-get update sudo apt install postgresql
ㅁ DB 접근제어 허용
PostgreSQL는 기본적으로 접근허용이 막혀있다.
Listen Address에 *를 넣어 접근가능하게 변경해주자 ( 재시작 필요 )
sudo vi /etc/postgresql/12/main/postgresql.conf
sudo vi /etc/postgresql/12/main/pg_hba.conf
ㅁ 데이터 베이스 생성
- DBMS 접속
sudo su postgres psql CREATE DATABASE "USER"; // USER 데이터베이스 생성
- USER 생성 및 권한부여
CREATE USER test WITH PASSWORD 'a123456789'; ALTER USER test WITH SUPERUSER; ALTER USER test WITH LOGIN;
- 해당 유저로 접속 및 Sample 데이터 생성
psql -U test -d USER // test유저로 USER 데이터베이스 접근 CREATE table user_info( id int NOT NULL, name char(20) DEFAULT NULL, PRIMARY KEY (id) ); INSERT INTO user_info VALUES(1234,'kim'); INSERT INTO user_info VALUES(123,'Lee'); commit;
※ psql: error: FATAL: Peer authentication failed for user "test" 에러 발생
리전 내에 위치하나, 가용영역 (AZ) 기준으로 구분하여 여러개의 VPC를 가질 수 있다.
※ 가용영역 : 리전내에 물리적으로 격리되어 있는 데이터센터
ㅁ EC2
AWS에서 제공하는 독립된 클라우드 컴퓨터 서비스.
아마존 머신 이미지 (AMI) 기반으로 인스턴스를 쉽게 생성할 수 있으며,
CPU, 메모리, 스토리지, 네트워크 등의 리소스 사용 목적에 따라 최적화된 인스턴스를 제공한다.
인스턴스 스토어위에서 올라가기 때문에, 종료시 데이터가 사라진다.
저장이 필요한 파일은 EBS에 두고, S3 버킷에 정적 컨텐츠나 로그를 두는 것이 일반적이다.
ㅁ IAM
리소스를 제어할 수 있는 엑세스 권한을 중앙에서 관리하는 서비스
AWS 시스템을 이해하기 위해, 아래와 같은 시나리오로 공부하려한다.
시나리오 1. WEB - WAS - DB 3티어 시스템 구성해보기
기존에 도커를 공부하며 구성해두었던, API 서버 아키텍쳐를 그대로 사용하려한다.
( WEB - 리퀘스트를 WAS 서버로 포트포워딩 / WAS - API 서버 / DB - 업무 데이터 저장 )
예상되는 작업 순서는 아래와 같고, 4/5/6 단계는 시나리오 2에서 진행하려 한다.
1. 리전을 선택하고 2. VPC 생성 3. 퍼블릭 / 프라이빗 서브넷 결정 + 퍼블릭 : 주로 웹서버로 인터넷에 연결 필요 + 프라이빗 : 백단 소스, DB 등. 보안그룹 설정필요 4. ELB를 통해 로드밸런싱 5. Auto Scaling 설정 ( Scale up / Sacle out ) + Scale Up은 지원 안하는가? 6. Route 53을 통해 도메인 서비스 제공가능. 7. 비용처리 정책 8. 로깅 정책 -> S3로 저장 9. 백업 정책 -> EBS ( 부팅 및 데이터 볼륨 ) , 스냅샷은 S3에 저장
※ WEB은 Public Subnet, WAS/DB 는 Private Subnet에 두고
사용자 및 각 인스턴스 간 커넥션을 어떻게 연결할 것인지 생각해보며 진행할 것
시나리오 2. 고가용성 설정 및 부하 테스트, 로그 확인
시나리오 1에서 구성한 시스템에 고가용성 및 서비스를 위한 설정들을 추가할 예정이다.
- ELB : 트래픽 분산 - Auto Scaling : 시스템 부하 시, 서버를 추가하여 서비스 안정화 - Route 53 : DNS 등록
설정 추가 후, 부하테스트를 통해 작동여부를 확인하고 AWS Cloud Watch 를 사용해보고자 한다.
시나리오 3. Iac ( Infrastructure As Code ) 적용
Iac : 코드를 통해 인프라 환경 구성 및 관리 자동화를 수행
환경 구성 간편화 및 개발/운영간 환경의 일관성이 유지된다.
대표적인 툴로는 AWS CloudFormation, Terraform, Ansible 등이 존재하는데