AWS EC2
수동으로 EC2 및 fastapi 세팅
- aws 로그인 → IAM에서 발급한 계정 활용
콘솔 로그인

- 로그인 후 → 프로필 → 결제 및 비용관리 (과다 비용 청구 확인 → 이상탐지용, 현재는 권한 x)
- 콘솔 홈 → 전체 서비스 현황 확인 가능 ( 현재는 미체크 )
- 검색 → EC2 → 즐겨찾기 추가 ( 별모양 클릭 )
- EC2 클릭 ( 즐겨찾기 바 추가됨 ) → EC2 대시보드로 이동

- EC2 대시보드 내에서 인스턴스 생성
- 인스턴스 생성
- 인스턴스 시작 클릭

이름 및 태그 입력 → 인스턴스 구분용 → 언제든지 편집 가능함

- 애플리케이선 및 os 이미지 → Ubuntu → 24.XX.XX 프리티어 Machine Image
- OS 선택 → OS 버전 → 하드웨어 사양(인스턴스 유형 ) 선택
- 프리티어 기반 설정 ( 연습용, 저사양, 무료 지향, 향수 서비스 시 유료 신규 구성 )

하드웨어 사양 선택 → t3.micro 프리티어 인스턴스 유형

- 키 페어
- 외부에서 EC2에서 생성한 특정 인스턴스 접속할 시 사용자 인증하는 키
- 외부에 공개되는 Github등 사이트에 업로드 절대 금지 ( 키 관리 )
- 신규 생성( 최초, 필요 시 (인스턴스별로 별도 관리 하겠다. ) )
- 중복되지 않는 고유한 이름 부여 → 키 페어 생성 클릭( 다운로드 필수 ) → 파일 확인 필수 (로컬PC)
- 신규 생성( 최초, 필요 시 (인스턴스별로 별도 관리 하겠다. ) )
- 외부에 공개되는 Github등 사이트에 업로드 절대 금지 ( 키 관리 )
- 외부에서 EC2에서 생성한 특정 인스턴스 접속할 시 사용자 인증하는 키

사전에 만든 키가 존재하면 선택 가능함

- EC2 대시보드 → 메뉴 → 네트워크 및 보안 → 키페어
- 키 관리 가능함 → (삭제 등 처리 가능)

키 페어 삭제

- 네트워크 설정
- AWS라는 클라우드 환경에서 나만의 가상 네트워크를 구성
- VPC(Virtual Private Cloud)
- 클라우드 내에는 수십억개(추정)의 VPC가 존재
- VPC(공각기동대처럼 왔다갔다 게이트웨이(고속도로)통해서
- 해당 리전 내에 기본 VPC가 구성되어있고, 리전별로 데이터센터 수 만큼 (A, B, C) 서브넷이 존재 → 라우터 테이블 → 인터넷 게이트웨이(IGW) → 외부망 연결
- EC2 인스턴스는 서브넷 중 하나와 연결되어 VPC에 연결되고, 외부망과 통신할 수 있음
- AWS라는 클라우드 환경에서 나만의 가상 네트워크를 구성

- 네트워크 편집
- VPC, 서브넷, 퍼블릭IP 할당 등 선택적 진행
- 기본 VPC 선택, 가용영역 …-2a 선택, 퍼블릭IP 활성화
- VPC, 서브넷, 퍼블릭IP 할당 등 선택적 진행

자동값(기본값 -> 편집 X )

- 보안그룹
- EC2 인스턴스 서버에 요청, 응답에 대한 포트 관리 → 방화벽 관리
- 인바운드 : 외부에서 서버로 요청할 때
-
- SSH → 0.0.0.0/0 → 22번
- 전세계 어디서든 접근 가능하다는 뜻(보안에 취약)
- 필요 시 언제든지 중복적으로 IP 추가 가능함 → 내 IP 체크
- HTTP → 80
- HTTPS → 432
- 서버 세팅시 S를 발급받으려면 SSL인증서 필요함
- cloudfare 무료 사용 가능
- MySQL → 3306
- 인바운드 향후 추가 편집프로토콜별로 설정, IP별로 추가 설정
- 💡
- 인스턴스 생성 후 → 인스턴스 선택 → 하단 보안 탭 → 보안 그룹 클릭 → 인바운드 편집 가능
- SSH → 0.0.0.0/0 → 22번
-
- 아웃바운드 : 서버에서 외부로 응답할 때 (통상변경X)
- 인바운드 : 외부에서 서버로 요청할 때
- EC2 인스턴스 서버에 요청, 응답에 대한 포트 관리 → 방화벽 관리
- 신규 생성

기존 보안 그룹 선택

- 스토리지
- 볼륨 → EC2 인스턴스가 물리적으로 저장될 저장소 → 별도 비용이 청구됨
- 1 GiB → 1기가의 +7%정도의 크기

- 고급 세부 기능
-
- 생략
-
- 인스턴스 시작 버튼 클릭
- 생성 완료
- 인스턴스 연결
- 연결버튼 클릭 → 4 가지 연결법 확인가능

- 진입 화면 (별도창)
- pem파일(키페어)와 ssh명령을 이용하여 접속
- 윈도우 : openssh가 설치된 ps(powershell) or 외부 툴 (MobaXterm/)
- 맥 : 터미널 진행
- https://mobaxterm.mobatek.net/
- pem파일(키페어)와 ssh명령을 이용하여 접속
MobaXterm free Xserver and tabbed SSH client for Windows
The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!
mobaxterm.mobatek.net

- 로컬 PC 접속
- 윈도우 기준
- MobaXterm 포터블 버전 실행
- Session 클릭
- MobaXterm 포터블 버전 실행
- 윈도우 기준

- 퍼블릭 IP 확인

- 세션 클릭 → 세팅 화면 →
- Remote host : 인스턴스 퍼블릭ip (ip지워야됨)
- username : ubuntu (바뀔수도 있음) 운영체계별로 상이함
- web.pem 키 업로드
- 팝업창 뜸 → Accept 클릭

- 최종 접속된 화면

EC2에 접속하여 FASTAPI 서비스 세팅
# 시스템 패키지 목록 업데이트 및 업그레이드
# 향후 설치할 수 있는 패키지의 URL 주소 등 최신으로 설정
sudo apt update && sudo apt upgrade -y
# Python 3 pip와 venv 설치
sudo apt install python3-pip python3-venv -y
# 프로젝트 폴더 생성 및 이동 (예: myproject)
mkdir projects
cd projects
# 'venv'라는 이름의 가상 환경 생성
python3 -m venv web
# 가상 환경 활성화
source web/bin/activate
# pip를 최신 버전으로 업그레이드
pip install --upgrade pip
# FastAPI와 Uvicorn 설치
pip install fastapi uvicorn[standard]
# nano 편집기로 main.py 파일 생성
nano main.py
# 아래 코드 복사 붙여넣기[우클릭]
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"Hello": "World fastapi"}
# 편집모드 빠져나가기
ctrl + x
y
"enter키"
uvicorn main:app --host 0.0.0.0 --port 8000
- 접속
- 브라우저 → http://퍼블릭ip:8000
- 만약 접속 안되면 ec2 인스턴스 → 보안 → 보안그룹 → 인바운편집 → 추가 → 사용자tcp선택 → 8000 → 0.0.0.0/0(any where…) → 저장
- 브라우저 새로고침

- 수업 종료, 당일 업무 종료 후 AWS상에 리소스는 모두 중단
- 지속적 서비스가(회사) 필요한 경우, 기타 필요시에는 유지
- EC2 인스턴스는 중단시 IP를 반환 → 매번 접속시 수정 필요함
- 탄력적 IP 할당 → 인스턴스에 연결 후 사용
- 중지 후 가동
- IP 변경됨 → MobaXterm 세션 우클릭 edit세션 → ip변경 → 저장 → 세션 새로 접속 → 새 창 → 접속 완료
- 브라우저에서 접속 ⇒ 접속 오류 ⇒ 리눅스를 (인스턴스)를 재가동 (중지 후 가동) 기존 수동 작동시킨 서비스는 모두 중단된 채임 ⇒ 가동 X → OS 가동되면 자동으로 서비스 가동되게 설정 필요!
- 실행 명령
-
# systemd 서비스 파일 생성 sudo nano /etc/systemd/system/hello.service - 서비스 내용
[Unit]
Description=FastAPI WAS (Web Application Service)
After=network.target
[Service]
User=ubuntu
Group=www-data
# 앱 디렉토리 설정
WorkingDirectory=/home/ubuntu/projects
# .env 파일(환경설정, 각종 키)을 읽어들여 환경변수로 사용
# 임시로 파일 생성 .env (빈 내용 -> 차후 CI / CD에서 세팅됨)
EnvironmentFile=/home/ubuntu/projects/.env
# uvicorn 실행 명령어 (가상환경 내부의 uvicorn 사용)
ExecStart=/home/ubuntu/projects/web/bin/uvicorn main:app --host 0.0.0.0 --port 8000
# 서버 혹은 OS 재가동시 항상 재가동
Restart=always
[Install]
WantedBy=multi-user.target
- 서비스 활성화
-
# systemd 에 서비스 파일 로드 sudo systemctl daemon-reload # 서비스 상태 확인 sudo systemctl status hello.service # 서비스 시작(start), 중단(stop), 재가동(restart) sudo systemctl () hello.service # 부팅시 자동 시작 되도록 활성화 sudo systemctl enable hello.service
- 서비스 가동 후 → 터미널 종료 → 브라우저 접속 테스트 → 화면 보이면 → 백그라운드에서 잘 가동중임을 확인.
fastapi was 개발(dev)
지속적 통합(Continuous Integration)과 지속적 제공(Continuous Delivery) 또는 지속적 배포(Continuous Deployment)를 의미하며, 소프트웨어 개발 과정에서 코드 통합, 테스트, 배포 단계를 자동화하여 더 빠르고 효율적으로 애플리케이션을 출시하는 개발 방법론
참고주요 CI/CD 툴
- 젠킨스 (Jenkins): 가장 널리 사용되는 오픈 소스 CI/CD 툴로, 다양한 플러그인으로 커스터마이징이 용이합니다.
- GitLab CI/CD: GitLab 플랫폼 자체에 통합되어 있어 사용하기 편리하며, 올인원 솔루션을 제공합니다.
- CircleCI: 속도와 유연성에 중점을 둔 툴로, 클라우드 환경에서 작동합니다.
- GitHub Actions: GitHub 플랫폼 내에서 CI/CD 파이프라인을 구축할 수 있는 기능으로, 많은 사용자들이 이용하고 있습니다.
- Azure DevOps: Microsoft에서 제공하는 포괄적인 DevOps 서비스로, 다양한 기능들을 포함하고 있습니다.
- Argo CD: GitOps(Git을 단일 소스 of 진실로 사용하는 배포 방식)에 특화된 도구입니다.
- Travis CI: 단순하고 사용하기 쉬운 CI/CD 툴 중 하나입니다.
CI/CD 툴의 역할
- 자동화: 빌드, 테스트, 배포 등 반복적이고 수동적인 작업을 자동화합니다.
- 협업 강화: 여러 개발자의 코드 변경사항을 자동으로 통합하고 테스트하여 충돌을 줄입니다.
- 품질 향상: 코드 오류를 조기에 발견하고 수정하여 소프트웨어 품질을 높입니다.
- 배포 가속화: 소프트웨어 릴리스 주기를 단축하여 고객에게 더 빠르게 새로운 기능을 제공합니다.
- 프로젝트 루트 폴더에 다음 내용 추가
# 아래 경로 및 파일 생성 ( 파일명은 상이해도 됨 )
# yml (야물|얌# 아래 경로 및 파일 생성 ( 파일명은 상이해도 됨 )# yml (야물|얌 파일) ->
docker, cicd, 쿠버네티스, ...
.github/workflows/deploy.yml

git action

CI / CD 테스트를 위해서 간단한 홈페이지를 만들어준다.

이 파일을 만들어주고 github로 가본다면

git에 저장한 commit 이름으로 action이 생긴다.

이런식으로 웹 상에서 쿼리의 느낌으로 검증이 돌아가는 작용을 만들어준다, 나머지 설명은 다음날 진도 나가면서 할 예정이다.
아 큰일났다. 이제 캡쳐하고 그럴거 많아서 노션으로 한다는데 노션으로 쓴게 티스토리로 옮기기 너무힘들다
바로 넘어갈줄 알았는데 하...
도대체 왜 한번에 잡고 복사가 안되는거냐 호환이 이렇게 안되는거냐 노션 개발자들아 티스토리랑 얘기해보고 만들었어야지
근데 노션 진짜 편하다 코랩 쓸 때랑 작동방식이 비슷해서 목록별 리스트별 이런식으로 정리하기 엄청 편한 것 같다.
근데 개발 내용이 많아서 그런가 super.so로 만들어도 바로 복사가 안되더라...
복붙하는데만 30분이 걸렸다 힝
그래서 첫 세팅, ubuntu 부분에는 설명이 조금 부족하다, 내가 하나하나 쓰고 캡쳐하고 하면서 작성한게 아니라 수업 내용 그대로라서 하나하나 설명을 쓸 수가 없다, 세팅부분이 내용은 많지만 나중에 실제 업무나 혼자서 할 때에는 10분정도 걸리는 내용이라서 하나하나 설명하느라 그렇다, 자세한 설명이 필요하다면 다른 블로그를 보거나 댓글을 달아주시면 감사하겠다.
그리고 이제 학원계정과 연계가 되다보니까 마스킹을 해야 할 내용들이 생기고 있다.
그래서 마스킹에도 주의하면서 블로그를 작성해야 할 것 같다, 허락은 받았다 마스킹만 잘 하면 된다.
그래도 아직 기초파트이니 나중에 다른 진도가 나갈때면 세세하게 설명을 쓸 수 있도록 노력하겠다.
그리고 잘 따라가다가 막판에 깃에 sync할때 문제가 생겨서 잠깐 놓쳤는데 그새에 갑자기 후루룩 나가버려서
action 부분에 설명을 놓쳐버렸다.
근데 진짜 조금 놓치니까 아예 진행이 안되더라
내가 만든 폴더가 깃이 꼬여서 리포지터리에서 삭제하고 다시 깃에 올려야 하는 상황이었는데 아무리 해도 다시 안되고 오류창만 뜨는거다. 그래서 챗지피티에도 물어보고 혼자서 지우고 다시 fork 해오는 순간에 액션 파트가 끝나버렸다
그래서 사실 action 설명이 부족하고 나도 이해를 못해버렸다
오늘은 다른 분들도 좀 많이 중간에 꼬이고 헤메서 정신이 더 없었던 것 같다.
진짜 살짝만 놓쳐도 다음 단계를 아예 실습이나 수업을 진행할 수 없다 보니까 애로사항이 많은 것 같다.
내 화면이 강사님과 아주 조금이라도 달라도 넘어가지 말고 꼭 물어보고 함께 진도를 나가는 것이 중요하다고 오늘따라 더욱 더더욱 생각하게 되었다.
정신 차리
내일도 열심히 해보자
'ASAC-SK플래닛 T아카데미 데이터 엔지니어' 카테고리의 다른 글
| 25.11.17 28일차 [Docker 개념, Docker CLI, Dockerfile] (0) | 2025.11.17 |
|---|---|
| 25.11.14 27일차 [git action을 이용한 EC2 배포 자동화하기] (0) | 2025.11.14 |
| 25.11.12 25일차 [fastapi_html 로그인페이지 상세 구성, 회원가입 추가, 응답코드 획득, 로그인 성공및 실패에 대한 상세 후처리, 화면 새로고침 | aws 초기 세팅] (0) | 2025.11.12 |
| 25.11.11 24일차 [fastapi_html에 메모 게시판 데이터베이스 생성,삭제,수정 적용_로그인 고객인증,암호화,로그아웃 ] (0) | 2025.11.11 |
| 25.11.10 23일차 [fastapi_데이터베이스 생성, orm 문법] (0) | 2025.11.10 |