AWS EC2를 이용한 웹서비스 하기

AWS 에는 프리 티어 정책이 있는데, 처음 가입한 계정에 일정 시간, 기간 등 무료로 사용할 수 있게 해주는 정책입니다. AWS 를 가입하고 프리 티어 정책을 이용하여, 웹서버를 올려보겠습니다.
AWS 프리 티어 이용 자격
AWS 프리 티어 제품 검색

1. AWS 가입하기

1.1 계정생성

AWS 사이트에 접속하여 [콘솔에 로그인] 을 클릭 합니다. 로그인 창에 보이는 AWS 계정은 Root user 와 IAM user 가 있는데, Root 계정은 AWS 에 모든 권한을 가지고 있습니다. (절대 공유하지 않습니다).

IAM 계정은 Identity and Access Management 의 약자로 Root 계정의 사용자가 User 를 생성하고 Group, Role 등의 권한을 부여하여 만든 계정입니다. 우리는 AWS 모든권한을 가지는 Root 계정을 만듭니다.

[Create a new AWS account] 를 눌러 계정을 생성합니다. 가입 시 결제 카드를 등록하지만, 가입비용은 없습니다.(서비스 사용 시 부과됨)
계정생성이 완료되면 Root 계정으로 로그인 합니다.

2. 네트워크 구성

2.1 VPC 생성하기

VPC 란 Amazon Virtual Private Cloud 약자로 AWS 클라우드에서 논리적으로 격리된 영역인 가상 네트워크를 구성할 수 있는 개념입니다.
자세한 내용은 Amazone VPC란 무엇인가? 를 참조하시기 바랍니다.

현재 AWS 정책은 기본적으로 VPC 내에 인스턴스를 구성하게 되어있습니다. 따라서 VPC 를 검색하고 Your VPCs 를 보시면 default VPC 가 존재하는것을 볼 수 있습니다. 그러나 우리는 기본 VPC 외에 개인 VPC 를 생성하고 해당 VPC 에 인스턴스를 구성하도록 하겠습니다.

검색창에 VPC 를 검색하여 선택한 후 [Launch VPC Wizard] 를 누릅니다.
image image

Step 1: Select a VPC Configuration 항목에 4개의 환경이 보여지는데, 그 중 첫번째 VPC with a Single Public Subnet 을 선택합니다. VPC name 을 작성하고 Availability Zone 중 첫번째를 선택합니다. (서울리전 기준이면 ap-northeast-2a 입니다).
[Create VPC] 를 눌러 VPC 생성을 완료합니다.

image

참고로, Availability Zone 은 말그대로 가용존인데, 서울리전 기준으로는 4개의 가용존이 존재합니다. 중요 서비스의 경우는 Availability Zone 이중화를 통해 장애를 대비하는 것이 좋겠습니다. 우리는 한개의 Availability Zone 에만 인스턴스를 구성하겠습니다.

2.2 Subnet 생성하기

눈치 빠르신 분들은 이미 알겠지만, VPC 를 생성할때 Subnet 을 구성하는 항목이 같이 존재하였습니다. 따라서, 왼쪽 [Subnets] 메뉴를 누르면 생성한 Public subnet 이름이 존재하는것을 확인할 수 있습니다.
만약 네트워크 대역 분리를 위해 추가 Subnet 을 구성하고 싶으시다면 [Create subnet] 을 이용하여 추가 할 수 있습니다.

image

참고로, Subnet 을 분리하는 이유는 외부 노출 대역과 그렇지 않은 대역을 구분하여 관리할 수 있습니다. 외부 노출이 필요한 대역을 정의하고, 해당 대역만 2.3 단계에서 Route Table 에 등록하기 때문입니다.

2.3 Route Table 연결하기

왼쪽에 [Route Tables] 를 클릭하면 VPC ID 에 우리가 만든 VPC 이름으로 된 Route Table ID 가 보입니다. Name 옆에 [] 체크박스에 체크를 하면 상세정보가 보입니다. 그 중 Routes 를 누르면 Target 에 igw-X 이름으로 된 인터넷 게이트웨이가 보입니다.
해당 인터넷 게이트웨이는 생성한 VPC 에 논리 할당된 것으로 생성한 Subnet 이 해당 인터넷 게이트웨이를 통해 외부와 통신할 수 있도록 설정된 것입니다.

image

참고로, 2.2 단계에서 Subnet 을 추가 생성하였다면, Subnet Associations 탭에서 Edit subnet associations 에서 추가로 노출하고 싶은 Subnet 을 체크해주면 됩니다. (외부 노출이 필요한 Subnet 만 등록)

2.4 Security Groups 등록하기

Security Group 은 AWS 네트워크 구성에서 방화벽과 유사한 개념으로 이해하시면 될 것 같습니다. 우리는 외부에서 HTTP, SSH 접근이 가능하도록 구성해 보겠습니다. 왼쪽에 [Security Groups] 를 클릭합니다. [create security group] 을 클릭합니다. Security group name Description VPC 를 선택해줍니다. VPC 는 우리가 생성한 VPC 를 선택합니다.

Inbound rules 항목에서 Add rule 를 클릭하고 Type 에 HTTP 를 선택, Source 에 Anywhere 을 선택합니다. 마찬가지로 SSH 도 동일하게 선택합니다. (보안을 향상시키고 싶으시다면 SSH Source 를 제한하는것도 좋습니다.)

img

아래 [create security group] 을 클릭하여 생성을 완료합니다.

3. 인스턴스 생성

3.1 VPC 생성하기

네트워크 준비가 다 되었으면, 이제 EC2 인스턴스를 생성해서 웹 서비스를 구동하고 인터넷과 연결하도록 설정해 보겠습니다.
EC2 를 검색하여 선택합니다. 왼쪽에 Instance 를 클릭합니다. 아직 인스턴스가 없으니 [LAUNCH INSTANCES] 를 눌러 인스턴스를 생성하겠습니다.

Amazon Linux 2 AMI (HVM), SSD Volume Type Select 합니다. 이제 프리 티어 인스턴스 타입을 선택해야합니다. Free tier eligible 이라고 표기되어있는 t2.micro 를 선택하고 [Next: Configure Instance Details] 를 클릭합니다. (반드시 프리 티어 인스턴스 타입을 선택해야 합니다. 과금에 주의하세요!).

img

Network 에 우리가 생성한 VPC 를 선택하고, Subnet 역시 우리가 생성한 Public subnet 을 선택합니다. Auto-assign Public IP 를 Enable 선택합니다. [Next: Add Storage]

img

EBS 디스크는 Size 8 GiB 를 사용으로 [Next: Add Tags] 하겠습니다.

[Add Tag] 를 누르고 Key 에 Name 을 적고, Value 에는 Web Server 1 을 적고 [Next: Configure Security Group] 을 하겠습니다.
Select an existing security group 을 선택하고, 우리가 생성한 Test Security Group 선택하고 [Review and Launch] 하겠습니다.

img

[Launch] 를 누르면 key pair 관련창이 발생합니다. 우리는 Key 가 없기 때문에 Create a new key pair 를 선택하고 이름을 지정하고 Download 합니다. 이 키는 EC2에 SSH 접근이 가능한 중요한 비밀키로 안전한 장소에 저장합니다. 키를 저장하였다면 [Launch Instances] 를 누르고 인스턴스를 생성합니다.

img

Status check 값이 passed 될때 까지 기다립니다. passed 되면 EC2 를 선택하고 Public IPv4 DNS 값을 복사합니다.

img

3.2 EC2 SSH 연결

EC2 에 SSH 접근하여 HTTP 서비스 올리는 작업을 수행하겠습니다. 터미널을 열고 아래 명령어를 수행합니다. (저는 맥북 환경이고 윈도우 환경이신 분들은 putty 등의 방법을 이용합니다.)

# 개인키 퍼미션 변경
$ sudo chmod 400 test_private_key.pem

# 비밀키를 이용하여 ec2-user 계정으로 EC2 서버 SSH 접근
$ sudo ssh -i test_private_key.pem ec2-user@ec2-3-34-142-226.ap-northeast-2.compute.amazonaws.com

img

3.3 웹 서비스 설치

$ sudo yum install -y httpd
$ sudo chkconfig httpd on
$ sudo service httpd start

참고로, httpd 서비스경로는 /var/www/html/ 입니다.

3.4 웹 서비스 확인

인터넷 브라우저 주소창에 Public IPv4 DNS 값을 붙여 넣고 우리가 설정한 네트워크를 통해 HTTP 서비스가 잘 접근 되는지 확인합니다 :D

img

4. 인스턴스 삭제하기

우리는 프리 티어 정책을 이용하여 인스턴스를 생성하였기에, 프리 티어 정책이 만료될 수 있음으로 반드시 불필요한 인스턴스들은 중지 또는 삭제합니다.

4.1 EC2 인스턴스 삭제하기

EC2 를 검색하고 왼쪽에 Instance 를 클릭합니다. 불필요한 인스턴스를 선택하고 Instance state 드랍 메뉴 중 Terminate 를 누릅니다. img

참고로, Terminate 는 인스턴스를 삭제하는 명령이고, Stop Instance 를 이용하여 인스턴스를 중지하여도 됩니다. Terminated 된 인스턴스는 몇 시간 후 UI 에서 사라집니다.