아마도 AWS 의 EC2 를 사용중인 초보 개발자들이라면 그저 서버를 배포해주는 서비스! 정도로만 생각할지도 모르겠다. 그래도 뭔지는 알고 사용해야 할지 않을까?
AWS 는 아마존 닷컴의 클라우드 컴퓨팅 사업부이다. AWS 는 서버 컴퓨터를 일정 비용을 받고 제공해주는 서비스라고 생각해도 될 것 같다.
서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템을 말한다.
On-Premsie
: 자체적인 서버를 구축해 직접 서버를 운영하는 방식
Cloud
: 직접 서버를 구축하지 않고 서버를 임대해서 사용하는 방식
클라우드 서비스에 IaaS (Infrastructure as a Service) - PaaS (Platform as a Service) - SaaS (Software as a Service) 가 있는데 IaaS 에서 SaaS 로 갈수록 컴퓨터의 low level까지 제어하는 것에서부터 점점더 추상화된 서비스를 제공하는 것이다. 즉, IaaS 는 컴퓨터를 세세히 제어한다면 SaaS 는 애플리케이션을 다운받아 쓰는 것으로 이해했다.
서버를 임대해서 사용하는 것을 클라우드라고 했다.
그렇다보니 직접 용산전자상가에 가서 컴퓨터를 주문하고 배달을 받는 절차보다 버튼 몇번에 임대를 굉장히 빠르게 할 수 있어서 신속성이 좋고 확장과 축소에 용이해 유연성이 좋으며 서버를 사용한 시간만큼 과금되므로 경제성에도 좋다고 볼 수 있다.
이러한 클라우스 서비스로 AWS, GCP (Google Cloud Platform), Microsoft Azure, NCP (Naver Cloud Platform) 등이 있다.
Region
여기서 보는게 Region 인데 AWS 데이터 센터가 존재하는 물리적인 지역을 말한다. 정확하게는 AWS 의 물리적 서버가 있는 국가적 위치를 리전이라고 한다.
그래서 빠른 서비스를 이용하려면 물리적으로 가까운 Region 을 선택해야 유리하다. 또한 Region 이 여러개 있으니 물리적으로 한 데이터 센터가 사용 불가능한 상태가 되더라도 다른 리전에 백업을 구축할 수 있다.
Available Zone
한 Region 내에서 실제 데이터센터가 존재하는 영역을 나타낸다. 한 Region 내에 여러개의 Available Zone, AZ 이 존재할 수 있다.
리전 내의 물리적 서버를 지역 단위로 나눈 위치를 AZ 라고 한다.
프리티어
이 뿐만 아니라 더 다양한 AWS 의 서비스들을 무료로 사용할 수 있다.
참고로 EC2 와 RDS 가 750 시간인 이유는 24시간 * 31 = 744 이기에 넉넉히 매달 750 시간씩 사용할 수 있다는 의미다.
단! 제한된 사용량 내에서 AWS 의 서비스를 무료로 사용하니 한도를 초과하면 요금이 부과된다. 그래서 청구서나 결제 대시보드를 반드시!! 정기적으로 확인하자.
EC2 (Elastic Compute Cloud)
가상 컴퓨터를 구축할 수 있다. 쉽게 말하면 컴퓨터 하나를 임대하는 것과 같다. 이렇게 임대한 컴퓨터를 인스턴스라고 한다.
EC2 는 시간당 사용료을 지불하므로 Elastic (탄력적인) 이라는 용어를 사용한다.
EC2 인스턴스의 유형은 순식간에 t2.micro 를 선택하고 넘어갔었는데 이 유형과 뒤에 붙는 숫자는 어떤 기능에 최적화되고 있고 용량이 어떤지를 의미한다.
예를 들어 m 시리즈는 범용이고 r 시리즈는 메모리 최적화, 그리고 g 시리즈는 GPU 최적화처럼 각각의 시리즈별 최적화된 기능이 따로 존재한다. 그러나 프리티어의 경우 선택할 여지없이 t2.micro 를 선택해야 한다.
나는 솔직히 이게 좀 악랄하다고 느낀게 프리티어인데 다른 인스턴스 유형을 막아둬야 하지 않나? 선택이 가능해서 얼마든지 과금이 가능하다는게 주의가 필요하다.
EBS (Elastic Block Storage)
어제 EC2, RDS, S3 를 만드는 동안 어느샌가 왼쪽 하단에 Elastic Block Store 에 생성되어 있는 이 EBS 는 서버에 연결하는 하드디스크로 EC2 에 연결하는 Storage 이다. 즉, EC2 를 만들때 이와 관련해서 생성이 된 것으로 보인다.
그리고 사실 인스턴스 생성시 건드리지 않았던 이 스토리지 구성이 EBS 를 만드는 설정이었다. SSD 타입을 가장 범용적으로 사용하는 gp2 로 설정한 것이다.
보안그룹
보안 그룹은 네트워크의 인바운드, 아웃바운드 트래픽을 제어하는 방화벽을 설정할 수 있다.
수업중 인바운드 규칙에 MySQL/Aurora 를 추가했던 것도 EC2 외부인 로컬환경에서 EC2 내부에 접근하여 MySQL 을 사용하고자 추가했던 것 같다. 실습중엔 0.0.0.0/0 을 설정하여 누구나 다 접근할 수 있도록 했지만 보안상 허용할 IP 를 따로 설정하는 편이 좋다.
S3 (Simple Storage Service)
C 드라이브, D 드라이브처럼 하드 디스크만 임대하는 것이다. 즉, 스토리지를 구성할 수 있도록 도와주는 서비스를 말한다.
S3 는 웹 인터페이스를 통해 스토리지를 제공한다.
용도
정책 생성기를 통해 버킷 안의 모든 리소스들을 허용해주고 정적 웹 사이트 호스팅을 활성화하면 특정 index.html 을 통해 정적 웹사이트를 만들 수 있다.
RDS (Amazon Relational Database Service)
RDB 를 구축할 수 있도록 도와주는 서비스를 말한다.
RDS 는 AWS 가 서비스하는 분산 관계형 데이터베이스로 애플리케이션 내에서 관계형 데이터베이스의 설정, 운영, 스케일링을 단순하게 하도록 설계된 클라우드 내에서 동작하는 웹서비스이다.
DynamoDB
NoSQL DB 를 구축할 수 있도록 도와주는 서비스를 말한다.
NoSQL DB
: RDB 와 달리 스키마 없이 상대적으로 느슨한 구조를 이용해 데이터를 저장하는 데이터베이스
NoQL 장점
DynamoDB
는 키 - 값 및 문서 데이터 구조를 지원하는 완전 관리형 독점 NoSQL 데이터베이스 서비스이다. 즉, AWS 에서 사용할 수 있는 NoSQL 형태의 데이터베이스를 말한다.
참고로 DynamoDB 도 프리티어로 생성할 수 있다.
테이블 생성하기
항목 생성하기
항목 검색하기
DynamoDB 삭제하기
Elastic IP, 탄력적 IP
EC2 인스턴스는 한번 인스턴스를 중지하면 퍼블릭 IP 가 바뀐다. 정확하게는 중지하면 퍼블릭 IP 가 사라지고
다시 인스턴스를 시작하면 퍼블릭 IP 주소가 바뀐다.
탄력적 IP 를 만들어 인스턴스에 연결하면 인스턴스가 중지되든 말든 상관없이 항상 고정적인 IP 를 유지할 수 있다.
주의! 탄력적 IP 를 만들고 인스턴스에 연결하면 요금이 부과되지 않으나 인스턴스에 연결하지 않으면 요금이 부과된다.
AMI (Amazon Machine Image)
인스턴스의 현재 상태를 이미지 형태로 만들어주는 서비스이다.
EC2 인스턴스를 만들때 Ubuntu 를 선택했던 이것이 AMI 이다.
AMI 는 OS, 기타 프로그램, 파일 등이 설치된 상태의 EC2 인스턴스를 말한다. 위에서 Ubuntu 를 선택했으니 EC2 인스턴스에 Ubuntu 가 설치되어 있는 상태로 대여했다고 보면 된다.
AWS 사용자 및 그룹을 만들고 관리하며 AWS 리소스에 대한 액세스를 허용 및 거부할 수 있는 기능이다.
AWS 에 로그인시 AWS 사용자를 루트 사용자와 IAM 사용자로 선택하라는 문구를 기억할 것이다.
루트 사용자는 수퍼권한? 모든 권한을 갖고 이 계정을 사용하긴 하는데 할 수 있는 권한을 제한하고 그룹화시키고 싶을때 IAM 사용자를 만들어 각 사용자별 실행할 수 있는 범위와 정책을 설정할 수 있다.
기본적으로 자신의 계정을 사용할때는 루트 사용자로 로그인하기에 이 기능을 쓸 일이 없을수도 있는다. 그러나 협업시 같은 계정을 공유한다고 할때 루트 사용자로 로그인하도록 하면 무슨 일이 생겼을때 책임을 져야 할 수도 있으니 애초에 문제가 발생할 수 없도록 권한을 제한해두는 IAM 사용자 로그인 정보를 협업하는 동료들에게 제공할 수 있다.
CloudFront
손쉽게 CDN 을 구축할 수 있도록 도와주는 서비스이다.
AWS CloudFront는 동영상이나 데이터, API 등을 전 세계 고객에게 제공할때 안전하고 빠르게 전송하는 고속 콘텐츠 전송 네트워크 서비스 (CDN) 를 말한다.
CDN (Content delivery network / content distribution network)
- 콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템
- 높은 사용성과 효율로 사용자에게 컨텐츠를 제공하고자 한다.
CloudFront 는 S3 에서 생성한 버킷에 CloudFront 를 연결하여 CDN 을 구축할 수 있도록 해준다.
CloudWatch
모니터링을 도와주는 서비스이다.
CloudWatch 는 애플리케이션을 모니터링하고 시스템 전반의 성능 변경 사항에 대응하며 리소스 사용률을 최적화하고 운영 상태에 대한 통합된 보기를 확보하는데 필요한 데이터를 제공한다.
CloudWatch 는 인스턴스 - 작업 - 모니터링 및 문제해결 - CloudWatch 경보 관리를 통해 EC2 를 모니터링할 수 있게 해준다.
그냥 모니터링하는 것도 가능하지만 경보를 설정해서 CPU 사용량처럼 특정 분야에서 제한을 걸어둔 것을 초과할때 내가 지정해둔 이메일로 경고 메일을 전송하도록 할 수도 있다.
확실히 이런 것들을 알아두면 내 생각보다 더 많이 과금되는 상황을 방지할 수 있을 것 같다.
ELB (Elastic Load Balancing)
로드 밸런싱을 도와주는 서비스이다.
ELB 는 애플리케이션 트래픽을 EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수 등의 여러 대상에 자동으로 분산시킨다.
Scale UP
: 서버 1대의 성능을 증가시킨다.
Scale Out
: 서버의 개수를 여러 대의 노드로 늘려서 트래픽을 분산, 분배한다.
Load Balancing
: 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도 저하 등을 고려해 적절히 분산처리하여 해결해주는 서비스를 말한다.
ELB 는 Round-Robin 알고리즘을 사용하는데 이는 1~6 의 요청이 있으면 트래픽을 1번씩 돌아가면서 분배하는 방식의 알고리즘이다. 그래서 1은 EC2, 2 는 컨테이너, 3은 IP 주소, 4 는 Lambda 5는 다시 EC2 ... 이런 방식이다.
Auto Scaling
유동적인 서버 확장과 축소를 도와주는 서비스이다.
AWS Auto Scaling 은 애플리케이션을 모니터링하고 용량을 자동으로 조정하여 최대한 저렴한 비용으로 안정적이고 예측 가능한 성능을 유지할 수 있게 한다. 전체에서 여러 리소스에 대해 애플리케이션 규모 조정을 설정할 수 있다.
트래픽이 몰릴때 EC2 서버 개수를 자동으로 늘리고 트래픽이 적을때는 EC2 서버의 개수를 자동으로 줄인다.
Beanstalk
편리하게 어플리케이션을 배포할 수 있도록 도와주는 서비스이다.
AWS Elastic Beanstalk 을 사용하면 애플리케이션을 실행하는 인프라에 대해 자세히 알지 못해도 AWS 에서 애플리케이션을 빠르게 배포, 관리할 수 있다.
개발자가 모든 애플리케이션에서 이메일을 보낼 수 있는 경제적이고 유연하며 확장 가능한 이메일 서비스이다.
트랜잭션, 마케팅 혹은 대량 이메일 커뮤니케이션을 포함한 다수의 이메일 사용을 지원할 수 있다. SES 를 사용하면 대규모 이메일을 안전하게 전 세계로 보낼 수 있다.
cousre
Udemy - 실습으로 배우는 AWS 핵심 서비스