AWS-EC2
AWS 개요
클라우드란 온프레미스와 반대되는 개념으로 우리가 사용하는 전기, 수도, 아파트를 생각하면 쉽다.
우리는 직접 전기를 만들어서 사용하지 않는다. 수도, 아파트 관리 등도 마찬가지다. 아파트에선 승강기, 단지 내 시설등을 제공하고 우리는 그 비용을 지불한다.
이런 것을 클라우드 서비스라고 한다.
규모의 경제라고 생각해도 무방하다.
온프레미스는 직접 집을 설계하고 배관과 같은 시스템을 직접 알아보고 의뢰해야하는 상황과 비슷하다.
많은 시간과 노력이 필요하다.
작은 서비스를 제공하는데도 직접 물리적 서버를 구축하고 관리한다. 이렇게 되면 사용자가 많든 적든 일정 비용을 지불해야한다.
이것이 온프레미스의 단점이다.
클라우드는 구축하려는 서비스에 필요한 리소스를 사용하고 사용한 양만큼 비용을 지불하는 구조다.
여러가지 클라우드 컴퓨팅 서비스가 있지만 그 중 대표적인 것이 바로 AWS다.
또한 AWS는 마치 레고 블록을 조립하듯이 여러 서비스들을 요구사항에 맞게 조립하여 사용할 수 있다.
우선 EC2부터 살펴보자.
AWS EC2
EC2는 Elastic Compute Cloud의 약자로 AWS 클라우드 가상 서버를 제공하는 서비스다.
EC2를 이용하면 지금까지 내 로컬 환경에서 서버를 열었을 때 네트워크 테스트용 ip라서 다른 사람이 접속할 수 없는 127.0.0.1
이 아닌 누구나 접속할 수 있는 주소로 우리의 웹 프로젝트를 배포할 수 있다.
왼쪽 상단에 AWS 로고가 있고 그 옆을 보면 검색창이 보인다 여기서 ec2를 검색하고 들어간 뒤 우측 상단을 보면 리전을 선택할 수 있다.
AWS에서는 도시별로 클라우드 센터를 지어 해당 센터에서 구축된 가상 머신을 사용할 수 있는데 이걸 선택해주는 것이다.
여기엔 리전, 가용 영역이라는 개념이 있다.
리전이란 아시아와 같은 넓은 개념이고 가용 영역은 독립적인 데이터 센터 군집을 말한다.
만약 우리의 서비스가 있는 하나의 데이터센터의 장애로 인해 중단되면 안되기 때문에 하나의 리전 안에는 최소 3개의 독립적인 데이터센터가 존재해야한다.
현재 총 33개의 리전과 105개의 가용 영역(Available Zone)이 있다.
또한 AWS에서 제공하는 서비스가 모든 리전에 제공되는건 아니기 때문에 리전을 선택할 때 이런 점도 고려 대상이다.
가용 영역은 지리적 영역 내에서 격리되고 물리적으로 분리된 최소 3개의 AZ로 구성된다.
모든 가용 영역은 AWS 리전의 중복 전력, 네트워크 및 연결이 제공되는 하나 이상의 개별 데이터 센터로 구성된다. 이들은 모두 100km 이내의 거리에 위치한다.
만약 하나의 가용 영역에 문제가 생기거나 이벤트가 생기면 다른 가용 영역으로 서비스를 이전하여 서비스를 제공할 수 있다.
현재 서울 리전이 사용가능해서 특별한 이유가 없다면 서울을 선택하는 편이 좋다. 물리적 거리가 멀면 그 만큼 네트워크 속도가 느려지기 때문이다.
그 다음으로 알아야할 것은 AMI(Amazon Machine Image)로
EC2를 사용하면 실제 물리적 서버를 여러 개의 가상 인스턴스로 나누어서 하나의 인스턴스를 사용하게 된다. 한 리전 내에 있는 수천대의 서버 위에 하이퍼바이저를 설치하고 그 위에 게스트를 한 대씩 격리시켜 고객에게 제공한다.
각각의 인스턴스를 시작하려면 소프트웨어 템플릿이 필요하다. 예를 들어 운영체제나 설정, 애플리케이션 등이 있다.
AMI는 AWS에서 제공하는 템플릿을 이용할 수도 있고 직접 필요한 설정을 한 뒤 AMI로 저장하여 같은 조건으로 여러 개의 EC2 인스턴스를 생성할 수도 있다. 또는 마켓플레이스에서 검색하여 사용하는 것도 가능하다.
화면 중앙을 보면 인스턴스 시작 버튼이 보인다. 누르면 가상 서버를 만들 수 있다.
- 태그 : 태그는 쉽게 말해 가상 서버를 구분하는 이름이다. 데이터베이스를 만들 때 이름을 지어주듯이 똑같은 개념이다.
- 그 후 인스턴스 유형을 선택하는데 프리티어에서 사용 가능한
t2.micro
를 선택한다/프리티어란 월별 750시간을 무료로 사용할 수 있는 요금제, 혹은 스펙이라고 보면 된다. - 키페어는 SSH접속을 위해 필수로 생성해주어야한다. 옆의 새 키 페어 생성을 눌러준 뒤 기본 설정으로 생성해준다. 이렇게 하면 파일 형태로 키를 발급해주는데 다시 다운받을 수 없기 때문에 안전한 곳에 저장해준다.
인스턴스 유형은 t2.micro
와 같이 표현되는데 예를 들어 c7gn.xlarge라면 c는 인스턴스 패밀리, 예를 들어 c는 컴퓨팅 최적화를 의미한다. 그 다음 7은 인스턴스 세대를 의미하고 그 다음 gn은 특정 목적의 추가기능을 말하는데 없는 경우도 있다. 예를 들어 gn이란 AWS에서 개발한 arm기반의 프로세스를 의미한다.
마침표 다음의 영단어는 크기를 의미한다. micro, large, xlarge와 같이 표현된다.
또한 여러개의 인스턴스가 있다고 했을때 Elastic Load Balancing 서비스를 통해 네트워크 트래픽 분산을 통해 애플리케이션의 가용성, 확장성 및 안정성을 개선할 수 있다.
위에서 설명했듯이 AWS는 수요에 맞춘, 관리형 클라우드 서비스를 제공한다. 만약 특정 시간에 사용자가 많아진다던가 한다면 Amazon Ec2 Auto Scaling서비스를 통해 수요에 맞게 자동으로 확장하여 사용할 수도 있고 비정상적인 인스턴스가 발견된다면 이를 제거하는 식의 동작도 가능하다.
이런 게 가능하려면 시작 환경을 정해주어야하는데 이를 시작 템플릿이라고 부른다.
위에서 보았듯이 AMI나 인스턴스 타입과 같은 정보를 템플릿화 한 뒤 사용하는 것이다.
AWS VPC
AWS에서 리소스를 어디에 위치시켜야할지를 먼저 정의해야한다.
VPC란 Virtual Private Cloud의 약자로 사용자가 정의한 논리적으로 격리된 가상의 네트워크를 말한다.
VPC는 리전 레벨의 서비스로 같은 리전에 적용되는 개념이다.
이 내부에서 퍼블릭 서브넷 개념을 정의하며 리소스를 그룹화하고 분리시킬 수 있다.
일단 ip 주소 범위를 설정해주어야한다.
CIDR 이란 Classless Inter-Domain Routing으로 IP 대역의 사작 주소와 크기를 정의한다.
RFC 1918에 따르면 사설 IP 대역 사용을 권고하고 있다.
예를 들어 172.31.0.0/16의 경우 앞에서부터 16비트까지는 고정된 범위이고 그 뒤의 주소는 변경 가능한 호스트 주소가 된다.
넷마스크의 크기는 16부터 28로 제한되어있다.
서브넷이란 IP범위를 잘게 잘라서 작게 나눈 것을 말한다.
서브넷을 나누는 이유는 용도에 따라 네트워크를 분리하거나 여러 가용영역을 확보하는 용도이다.
이렇게 내부적으로 구성한 뒤 인터넷과의 통신을 위해 인터넷과 VPC사이의 출입문에 해당하는 인터넷 게이트웨이를 설정해주어야한다.
그 다음으론 고정 IP를 설정해주어야한다.
인스턴스는 하나의 서버로 IP가 존재한다. 인스턴스 생성시 항상 새로운 IP를 할당해준다. 이미 만들어둔 EC2 인스턴스를 재시작하더라도 다시 IP를 할당받는다. 따라서 매번 아이피를 확인하고 접속해야한다. 이런 번거로움을 줄이기 위해 고정 IP(탄력적 ip)를 할당받아 사용할 수 있다.
주의해야할 점은 탄력적 IP도 하나의 고유한 AWS의 자원으로 EC2를 종료하거나 삭제하더라도 탄력적 IP를 해제하지 않으면 계속 비용이 나간다. 만약 EC2인스턴스를 운영하지 않을 계획이라고 하면 인스턴스 삭제와 함께 해제해주는 것이 좋다. 잠깐 운영을 중단하는 경우에도 해제시킨 뒤 재할당 받으면 된다.
이렇게 만들어진 EC2에 접속하는 방법은 여러가지가 있지만 인스턴스 정보에서 연결 버튼을 눌러 콘솔에 접속할 수 있다.
EC2 실습
우선 IAM에 대해 알아보자. IAM은 말하자면 우리가 어떤 호텔을 방문하면 내가 묵을 방에서 사용할 수 있는 카드를 준다. 이 카드는 내 방의 문을 열수도 있고 내 방의 불을 키고 전기를 사용하는등에 사용된다.
만약 호텔에서 마스터키를 준다면 어떨까 정말 큰일이다. 아무 방이나 들어갈 수 있고 혹여나 분실한 뒤 이 카드를 외부인이 습득한다면 대참사다.
AWS도 마찬가지다. AWS에는 루트 계정이 IAM 계정이 있다. 루트 계정은 마스터 키에 해당하고 IAM 계정은 손님에게 제공되는 객실 키에 해당한다.
AWS에는 굉장히 많은 서비스들이 있는데 만약 기업에서 AWS를 사용하며 루트 계정을 모두에게 알려준다면 보안 문제가 생기는 것은 시간문제다. 따라서 제한된 엑세스를 가진 별도의 계정을 생성하여 일을 맡긴다.
아마 눈썰미가 있는 분이라면 로그인 화면에서 IAM 로그인과 root 로그인이 분리되어있음을 눈치챘을 것이다.
한번 만들어보자.
일단 루트 사용자로 IAM 콘솔에 로그인한다.
IAM 콘솔
화면의 왼쪽에 사용자라는 메뉴가 있다. 클릭한 뒤 오른쪽 주황색 버튼으로 사용자 생성 버튼을 클릭한다.
사용할 유저 이름을 입력한 뒤 밑의 AWS Management Console에 대한 사용자 액세스 권한 제공 – 선택 사항
체크박스를 체크해준다. 그 다음 IAM 사용자를 생성하고 싶음
에 체크
그런 다음 암호는 설명을 읽고 원하는 옵션을 선택하면 된다.
다음 버튼을 누르면 권한을 설정하는 부분이 나온다. 여기서 직접 정책 연결
을 클릭한 뒤 권한을 검색한다. AdministratorAccess
를 선택해주자.
그런 다음 사용자 생성 버튼을 누르면 생성이 완료된다.
VPC 설정
VPC 콘솔에 로그인한 뒤 VPC 마법사 시작을 클릭한다.
AZ는 인스턴스를 생성할 영역과 같게 한다.
만약 여러 대의 인스턴스를 만들어 운영할 계획이라면 위에서 생성한 서브넷 외에 추가 서브넷을 만들어야한다. 왼쪽 메뉴에서 서브넷을 클릭하여 서브넷을 생성한다.
VPC ID에는 좀전에 생성한 VPC를 선택한다. 그런 다음 CIDR블록을 설정하면 지금까지 두 영역의 서브넷이 생성되는 것이다.
이렇게 여러 대의 인스턴스를 배치하여 서버의 가용성을 높였다. 그럼 이제 라우팅 테이블을 편집해야한다. 서브넷 메뉴에서 작업 버튼을 클릭한다. 여기서 라우팅 테이블 연결 편집을 선택한다.
여기서 좀전에 만든 서브넷을 선택하면 이제 새로운 서브넷도 외부 인터넷과 연결할 수 있게 된다.
보안 그룹도 설정해주자.
보안 그룹은 쉽게말하면 방화벽 역할을 하는 규칙이다.
인바운드는 그 말 그대로 외부에서 내부로 들어오는 접근을 제어하고 아웃바운드는 내부에서 외부로 나가는 접근을 제어한다.
보안 그룹 메뉴를 클릭한 뒤 보안 그룹 생성 버튼을 클릭한다.
그런 다음 위에서 생성한 VPC를 선택한다. 자세한 규칙 설정은 아마 구글링을 해보면 쉽게 알 수 있을 것이다.