이번장에서는 간단한 시스템 구현을 통해
AWS에서 제공하는 서비스와 흐름에 대해 알아보려한다.
0) 비용정책 설정
AWS 요금에 대해 조금만 검색하다보면 요금폭탄으로 인한 고민글들이 많다.
계정생성후 제공되는 프리티어 사용 예정이라 큰 요금이 지출되지는 않겠지만
DDOS 공격이나, 미사용 인스턴스로 인한 지속적 트래픽, Key 유출로 인한 사례 등 위험에 노출되어있다.
따라서 가장먼저 비용정책 설정을 통해 사전감지 및 제한을 걸어두려한다.
ㅁ Billing Console에서 예산 설정
- 월 / 30$ : 학습용 시스템으로, 일 트랜잭션이 100회를 넘지않을 것이다.
- 알림 설정 : 25$에 알림 임계치를 걸어, 사전에 인지
추후 대량 트래픽 시스템이나, 부하테스트시에는 예산 및 알림설정 변경 예정
※ 악의적인 트래픽에 의한, 요금폭탄을 방지하기 위해 아래의 사항을 명심하자
ㅁ Key 발급 주의
- 상당수가 Key 유출로 인해, 요금폭탄을 맞는다.
Git에 소스를 올릴때 자기도 모르게 함께 올리거나 문의글, 블로그 작성중에 노출되기도 한다.
- 이를 방지하기 위해, Key 사용시에는 IAM을 통하여
Root , 사용자 키를 나눠서 사용해야하고 Key 관리에 신경써야할 것이다.
ㅁ AWS 콘솔 계정관리
1) 설계
EC2 생성에 앞서, 어떤 아키텍쳐로 구성할지 그려보자
- 리젼 : 해외에서 접속하는 트래픽도 없고, 학습용으로 만드는 시스템. 서울로 지정
- VPC 및 서브넷 : 가상의 클라우드망을 만든 후
유저가 접근할 수 있는 Public 서브넷에 웹서버를 두고 인터넷 게이트웨이를 연결한다.
WEB으로 온 리퀘스트는 Private 서브넷으로 전달하기 위해
Route Table 을 연결하고, WEB에서만 요청을 받기위해 보안그룹 설정을 해둔다.
2) VPC 생성
EC2 및 서브넷들이 포함될 가상의 클라우드 망을 만들어보자.
IP 대역대는 기본으로 추천해주는 10.0.0.0/24를 설정했으며
/24의 의미는 앞의 24비트, 즉 10.0.0 까지는 네트워크 주소로 나머지 비트는 호스트 주소로 사용한다는 뜻이다.
ex) 10.0.0.0 = 10.0.0 네트워크의 첫번째 호스트 주소
결국 10.0.0.0 ~ 10.0.0.255 범위의 호스트 총 256개를 사용한다는 의미이다.
3) 서브넷 생성
클라우드 망을 만들었으니, 유저에게 공개될 Public 서브넷과 Private 서브넷으로 나눈다.
서브넷(Subnet)은 말 그대로 분할된 작은 네트워크를 의미하며
기존의 네트워크에서 좀더 적절한 단위로 조절한 것이다.
우리는 10.0.0.0 ~ 10.0.0.255 를 사용할 수 있으므로 절반으로 서브넷을 나눌 것 이다.
Public : 10.0.0.0 ~ 10.0.0.127 Private : 10.0.0.128 ~ 10.0.0.255 |
절반이므로 기존 /24에서 1비트를 더 사용한 /25가 될 것이다.
Public : 10.0.0.0/25 Private : 10.0.0.128/25 |
/25인 이유
먼저 10.0.0.0을 비트로 표현해보자면
0000 1010 / 0000 0000 / 0000 0000 / 0000 0000 가 될것이다.
VPC 구성시 /24로 앞에 24비트까지는 네트워크 주소로 사용하기로 했으니
호스트 주소는 아래와 같이 사용할 수 있다.
0000 1010 / 0000 0000 / 0000 0000 / 0000 0000
~ 0000 1010 / 0000 0000 / 0000 0000 / 1111 1111
서브넷은 기존 /24에서 2개로 나누기로 했기 때문에, 그 구분자는 25번째 비트가 될 것이다.
[Ex]
Public : 0000 1010 / 0000 0000 / 0000 0000 / 0000 0000 ~ 0000 1010/ 0000 0000 / 0000 0000/ 0111 1111
- 25번째 비트가 0이면 Public 서브넷 ( 10.0.0.0 ~ 10.0.0.127 )
Private: 0000 1010 / 0000 0000 / 0000 0000 / 1000 0000 ~ 0000 1010/ 0000 0000 / 0000 0000/ 1111 1111
- 25번째 비트가 1이면 Private 서브넷 ( 10.0.0.128 ~ 10.0.0.255 )
즉 네트워크 구분자 24bit까지 + 서브넷 구분자 1bit를 통하여 /25가 되는것이다.
Public 서브넷에는 Public IP가 할당될수 있도록, 자동 IP 할당설정을 체크해준다.
위의 VPC에 할당된 서브넷 2개를 만들었다. 현재까지는 아래와 같다.
4) EC2 생성
이제 실제로 서비스가 구동될 EC2 인스턴스를 만들어보자.
우리는 3개의 인스턴스가 필요하다. 1) Nginx , 2) Python [Rest-Api] , 3) PostgreSQL
ㅁ 이미지 선택
인스턴스를 시작할때 기본으로 사용될 운영체제, 어플리케이션 등이 포함된 이미지를 선택해야한다.
도커 이미지처럼 남들이 만들어놓은 것을 사용하면 편하겠지만, 비용이 발생한다. 직접 만들자..
Ubuntu 20.04 LTS 버전을 사용하였다.
ㅁ 인스턴스 유형 선택
사용할 수 있는 CPU, 메모리, 스토리지 및 네트워킹 용량에 따라 다양한 유형으로 나뉜다.
사용 목적에 따라 그룹이 나뉘며 ( t2, c2, p2, r2 )
세대가 높을수록 최적화가 더 잘되어있다고 한다.
나는 프리티어여서 선택의 여지없이, t2.micro로 선택하였다.
ㅁ 인스턴스 세부정보 구성
해당 인스턴스의 정보를 설정한다.
여러 항목이 있지만 아래 내용만 확인하고 넘어갔다.
- 인스턴스 개수 1 ( Auto Scaling 은 다음장에서 진행 )
- 네트워크 ( 위의 VPC )
- 서브넷 ( 유저가 접속하는 Nignx 용도이므로, Public Subnet으로 할당 )
ㅁ 스토리지 추가
기본적으로 루트 디렉토리가 포함되어있어, 특별한 추가는 하지않았다.
스토리지에는 다양한 종류가 있는데
※ 이미지에 따라 EBS와 인스턴스 스토어를 지원하는데 인스턴스 스토어를 루트 디렉토리를 사용 시, 인스턴스 종료에 따라 초기화. |
- EBS ( Block Storage ) : 블록단위의 스토리지.
- 인스턴스 스토어 : 물리적 디스크로부터 임시로 스토리지를 할당받음.
인스턴스 종료시에 해당 스토리지가 회수되므로 데이터를 보존할 수 없다.
- EFS ( File Storage ) : EC2용 파일 스토리지. On-Promise 환경에서 Mount 된 NAS 디스크와 같다고 보면된다.
클라우드 환경답게, 사용한 만큼만 용량이 유지된다.
- S3 ( Simple Storage Service ) : 객체 저장 스토리지. 다양한 종류에 객체를 저장할 수 있고, 웹에서도 접근이 가능하다.
Buckets + Key + version 조합으로 접근한다.
ㅁ 태그 - Pass
ㅁ 보안그룹
방화벽 규칙을 어떻게 적용할지에 대한 내용이다. 기본적으로 모든 Inbound 방화벽은 막혀있으며, Out bound는 열려있다.
콘솔에서 OS로 원격접속할 SSH포트 (22) 및 유저가 웹을 통해 접근할수 있도록 HTTP포트 (80)을 열어주었다.
ㅁ 검토
모든 단계를 마치니, AWS에서 경고메세지를 주었다.
해당 인스턴스에 모든 호스트에서 접근가능하다는 내용이었다.
WEB서버는 인터넷망에 오픈이므로 냅두고, 인스턴스 원격접속만 내 IP로 지정해주었다.
ㅁ 키 생성
SSH 설정을 하였더니, 키를 생성하라는 문구가 나왔다.
기존의 Public-Private 키페어 방식이며
키 관리에 자신이 없어 비밀번호로 로그인 할 예정이다.
=> AMI 즉 이미지의 비밀번호를 알아야한다.. 그냥 키쓰자
생성된 키를 Putty Key Generator를 통해 불러오고, private key로 다시 저장한다.
해당 키를 사용하여 보안접속을 한다
'IT > AWS' 카테고리의 다른 글
(5) EC2 시스템간 연결 (0) | 2021.11.08 |
---|---|
(4) EC2 원격 접속 ( 작성중 ) (0) | 2021.11.07 |
(3) EC2 / WEB-WAS-DB 세팅 (0) | 2021.11.05 |
(2) 인터넷 게이트웨이 및 라우팅 테이블 설정 (0) | 2021.11.03 |
(0) AWS 학습 로드맵 (0) | 2021.10.22 |