클라우드/AWS 개념 정리
EP 2
AWS란? + 실습 환경 구축하기
AWS가 무엇인지 배우고, 간단한 EC2 인스턴스를 생성하여 실습 환경을 구축해보자.
AWS 그게 뭔데 씹덕아
아마존에서 제공하는 클라우드 서비스. AWS = Amazon Web Services
아마 전세계에서 가장 많이쓰는 클라우드임. 그럼 왜 쓰냐..
- 확장성 굳 (오토스케일링 등)
- 보안성 굳 (VPC, IAM 등)
- 지원하는 기능 많음.
- 컴퓨팅 ⇒ EC2 등등
- 스토리지(저장소) ⇒ EBS, S3 등등
- DB ⇒ 다양함
- VPC, IAM 등등등 배울거 개많음.
그리고 중요한거, 사용한 리소스만큼 비용을 지불함. 단점이 있는데 복잡하고 배울게 많다는거
일단 EC2 인스턴스 만들고보기
일단 실습부터 해보고 EC2에 대해 알아보도록 하고, 사실상 우리가 AWS에서 할건 EC2니 EC2를 중점으로 알아보겠음…
추후 EC2에 대해 자세히 설명할 예정.
먼저 AWS 계정을 만들어야함. 카드 등록 후 1년 프리티어 기간을 가지는데, 꼼수를 좀 활용하여 구글 메일 +{숫자} 를 통해 하나의 구글 메일에 여러 AWS 계정을 만들 수 있긴 함.
1. 먼저 계정을 만들어보자.
AWS 계정 생성 클릭
메일, 사용자 이름 입력 후
Verify email address
클릭
비밀번호 입력 후
Continue
목적 -
개인
, 주소 입력, 동의 후 다음
카드 등록을 해야되는데, 해외 결제가 되는 VISA, 마스터카드같은 해외결제가 가능한 카드여야함. 1년 이상 계속 쓰면 요금이 결제되므로 주의.
전화번호 인증 후
기본 지원 - 무료
선택.
가입 끝. 이제
콘솔에 로그인
으로 콘솔로 이동하자.
2. 이제 진짜 EC2 인스턴스 생성하기.
일단 리전(Region), 즉 지역을 선택해야함. AWS엔 세계 곳곳에 데이터센터를 분사하여 운영하는데, 이러한 독립된 위치를 리전이라 함.
가용 영역(AZ, Availability Zone)
리전이 데이터센터들의 집합체라면, 가용 영역(AZ)은 그 리전에서의 하나의 데이터센터를 의미함.
각 AZ는 각자 별개의 시스템을 갖추고 있어서 보통 같은 AZ로 통일하게 됨. 예시로 EC2와 EBS는 같은 AZ에서만 연결이 가능함.
즉 AWS의 지역인거. 일단 서울로 선택하고 시작하자.
검색하거나 모든
서비스 > 컴퓨팅 > EC2
로 이동하여인스턴스 시작
을 누르자.
이제 인스턴스 이름과 AMI(Amazon Machine Image)를 설정해줘야함. 제일 평범한 우분투로 선택.
AMI(Amazon Machine Image)?
정말 쉽게 말해서 EC2를 구축하기 위한 기본 세팅들의 모음임.
여기엔 아키텍쳐, OS, 스토리지 등등이 포함됨. 위 처럼 특정 운영체제만 포함된 AMI를 선택할 수 도 있고, 다른 사용자가 만들어둔 AMI를 사용하여 여러 조합으로도 사용 가능함.
예시로 AMI가 없다면? ⇒ nodejs 하나하나 설치하고 세팅하고,, 아이고 귀찮어
인스턴스 유형(타입)은
t2.micro
(어차피 프리티어라 이거밖에 선택 못함, 나중에 따로 설명)
그리고 AWS에선 키 페어라는 암호가 필요함. PEM 키(윈도우 PuTTY에선 .ppk), RSA 암호화로 만들어주는데 나중에 SSH 접속이나 리소스에 접근할 때 필요하므로 반드시 저장해둬야함.
프라이빗 키를 만드는거라 절대 유출되면 안됨..
그럼
.PEM
파일이 저장됨.
네트워크 설정은 처음 만든다면 그냥 냅두면 됨. 만약 같은 IP 내에서만 SSH에 접근하려고 하면
다음에서 SSH 트래픽 허용
에서내 IP
로 선택해두면 됨.
프리티어 계정에서의 스토리지는 30GB가 최대인데 여기선 그냥 8GB로 냅둠.
최종적으로 확인하고
인스턴스 시작
클릭.
3. 보안 그룹 설정하기.
굳, 이제 보안 그룹을 설정해야되는데, AWS에서 제공하는 가상 방화벽임. 윈도우 방화벽처럼 인바운드/아웃바운드 설정을 할 수 있고, 어떤 트래픽을 들어올지 내보낼지 등등 설정 가능함.
(사실 만들때 같이 만들어진 보안 그룹에 설정해도 되는데, 예제를 위해 따로 만듬.)
보안 그룹 들어가서
보안 그룹 생성
으로 새로 만들어보자.
그리고 첫번째로 인바운드 규칙을 만들어줘야함. 어떤 트래픽을 허용하거나 거부할 지 제어하고, IP주소나 IP 범위 등으로 설정 가능함.
우선 위와 같이 SSH 접속을 위한 SSH(22포트), 웹 접속을 위한 HTTP(80), HTTPS(443), ping 테스트를 위한 ICMP 프로토콜을 허용해줌.
아웃바운드는 인스턴스가 특정 목적지로 트래픽이 나갈 수 있게 하는 것. 대부분 모두 허용함.
잘 만들어짐. 이제 인스턴스 목록으로 돌아가 보안 그룹을 바꿔주면 됨.
굳. 이제 드디어 SSH 접속을 해보자!!
(웹에서도 접속이 가능한데 주변 친구들을 보면 잘 안되는 부분이 있는듯. 그냥 SSH 접속이 편하니 SSH 접속으로 해보겠슴..)
4. 드디어 SSH로 인스턴스에 접속해보기
먼저 아까 저정해뒀던
.PEM
키가 필요함. 이걸로 SSH 접속을 하니 꼭 저장을 잘 해둬야함.
연결
버튼 누르고 SSH 메뉴 들어가보면 아주 친절하게 알려줌. 그대로 따라하면 됨.
아주 나이스하다. 맥이라 ssh 명령어로 접속했는데, 윈도우면 파워셸로 설치해서 쓰던가 putty 같은 ssh 프로그램 쓰면 됨.
5. 웹 서버 만들고 배포해보기.
근데 아직 해야될게 있음. EC2엔 가상의 랜카드(ENI, Elastic Network Interface)가 있는데, 얘넨 재부팅이나 시간이 지나면 IP 주소(Public IP)가 바뀜.
AWS 같은 동적인 클라우드에선 이렇게 IP가 바뀌는데, 그럼 DNS 설정을 따로 안해주면 들어가기가 어려우니 고정적인 IP 주소를 할당해줘야하는데, AWS에선 탄력적 IP(EIP, Elastic IP Address)를 할당해줌.
다시 콘솔로 가보자.
이대로 냅두고 할당함.
나이스. 이제 아까 만들어둔 인스턴스와 연결하면 됨.
연결되는데 시간이 좀 걸릴 수 있음.
5-1. nginx로 간단하게 서버 열어보기.
nginx란? ⇒ 웹 서버임
일단 웹 서버(Web Server)가 뭔지부터 알고가야함.
웹 서버는 HTTP 프로토콜로 클라이언트와 통신하는데, HTML/CSS/JS 같은 웹 페이지를 제공하는 서버임.
그런데 기존 웹 서버는 정적인 페이지만 제공을 하는데, 웹 서버에서 발전한 WAS(Web Application Server)가 로그인 기능 등의 동적인 로직을 처리함. (물론 웹 서버나 WAS나 같은 개념으로 보기도 함..)
아무튼 순서가 Client → Web Server → WAS → DB 순으로 간다는 것. (응답 시 반대로)
웹 서버나 WAS가 혼자 모든걸 처리하면 버거우니 그렇게 나눈건데, 웹 서버는 정적인 페이지를 제공하는 것 말고도 SSL/TLS, 웹 방화벽 등의 보안을 담당하기도 함.
그리고 요즘 나오는 웹 서버들은 비동기/멀티스레드 등의 병렬 처리를 잘해둬서 성능도 좋고 보안 기능도 좋음.
자세한건 아래의 글에서 잘 설명되어 있는 듯.
다시 SSH로 돌아가서 apt 업데이트 해주고 설치해보자.
그리고 nginx 서비스를 실행해주고..
AWS 콘솔에 나와있는 Public IPv4나 Public IPv4 DNS로 접속해보면?
나이스.
5-2. Node.js : express.js로 서버 열어보기
Node.js의 프레임워크인 express.js로 여는것도 해보겠음.
일단 인스턴스에 nvm이던 뭐던간에 Node.js를 깔자.
일단 nvm으로 최신 LTS 버전으로 설치함.
npx 딸깍으로
express.js
를 설치했음. 이제 패키지 설치하고 start 해보면..
안됨. 왜냐? 아직 3000번 포트를 안열었음. 다시 인바운드 규칙으로 가서 TCP 포트 3000번을 열어주자.
이제 다시 들어가보면?
나이스. 로그도 잘 뜬다.
엥? SSH를 끄니깐 애새끼가 뒤졌어요!!! (feat. pm2)
SSH를 종료하면 그 세션의 프로세스도 종료되니깐 pm2 같은걸로 무중단 배포를 해야함. 다만 아까 nginx 처럼 서비스에 박아버리는 경우엔 이런 작업은 따로 필요 없음.
express.js같은 node.js로 만들어진 프로그램을 관리해주는 친구인데, npm으로 설치 가능함.
이렇게 pm2로 백그라운드로 올려주면 SSH 터미널을 꺼도 유지가 됨.
그리고 pm2로 monit
명령어를 쓰면 아주 깔끔하게 모니터링이 가능함.