아마존 웹 서비스를 이용한 글로벌 서비스 인프라 설계 Chap2
목표
프로토타이핑을 위한 인프라를 구축한다. AWS의 인프라를 구축하는 방법을 익힌다.
AWS의 대표 서비스에 대한 실제 사용법을 익힌다.
글로벌 서비스로 확장할 수 있게 염두에 두고 인프라 구조를 설계한다.
프로토타이핑을 만들면 비교적 빠른 시간에 사용자가 평가할 수 있는 서비스를 만들 수 있다.
이를 이용해서 초반에 서비스의 가시성과 가능성을 확인하는 것은 빠르게 변하는 인터넷 서비스 환경에 적응하기 위한 중요한 개발 방식이다.
VPC 네트워크 구성
- VPX를 이용해서 도쿄 리전에 독립적인 네트워크를 구성. AWS는 기본 네트워크로 VPC를 권장
- ELB를 이용해서 웹 서버의 가용성과 확장성을 확보한다. 두개 이상의 웹 서버 인스턴스를 ELB 그룹에 배치하고 요청에 맞춰 웹 서버를 늘리거나 줄여서 확장성을 확보할 수 있다. 두 개 이상의 인스턴스로 구성되므로 하나의 인스턴스에 문제가 생겨도 다른 인스턴스로 웹 서비스를 계속할 수 있다.
VPC 생성
Create VPC를 실행하면 4개의 미리 준비된 VPC 설정을 보여준다. 이를 통해 간단하게 VPC 네트워크를 구성할 수 있다.
VPC with a Single Public Subnet
- 하나의 VPC에 하나의 서브넷으로 구성된 간단한 네트워크다. 몇 개의 인스턴스로 구성된 간단한 개인 웹 서비스나 프로토타이핑 용도로 사용할 수 있다. 모든 인스턴스가 하나의 서브넷에 위치하므로 트래픽을 관리하기가 쉽지 않고, 보안에 취약하다. 상업적인 서비스를 원한다면 이 구성은 피하자
VPC with a Public and Private Subnet
- 퍼블릭 서브넷과 프라이빗 서브넷으로 구성된 네트워크다. 중요한 점은 하나 이상의 프라이빗 서브넷을 포함해야 한다는 것이다.
두개의 퍼블릭 서브넷으로만 구성한다면 이는 VPC with a Single Public Subnet 구성의 확장이다.
프라이빗 서브넷은 인터넷 게이트웨이로 라우팅하는 규칙이 없는 서브넷이다. 따라서 여기에 배치된 인스턴스는 인터넷에서 직접 연결할 수 없다.
프라이빗 서브넷에 있는 인스턴스에 연결하려면, "퍼블릭 서브넷에 있는 인스턴스"를 거쳐야만 연결할 수 있다.
보통 프라이빗 서브넷에는 데이터베이스와 WAS(Web Application Server)와 같이 인터넷으로부터 격리해야 하는 인스턴스를 배치한다. APM(아파치, php, MySQL로 구성된)으로 웹 서비스를 구축한다면 아파치 웹 서버는 퍼블릭 서브넷에 두고 php(php-fpm을 사용할 거다)와 MySQL은 프라이빗 서브넷에 두는 식으로 구성할 수 있다.
이렇게 구성하면 침입자가 아파치 웹 서버에 침입했다고 하더라도, 데이터베이스와 같은 중요한 자원에 직접 접근할 수 없다.
물론 웹 서버를 거쳐서 데이터베이스에 침입할 수 있겠지만, 보안의 첫번째 원칙은 "침입자를 귀찮게 하는 데"있다.
VPC with Public and Private Subnets and VPN Access
- 이 구성은 보안성을 높일 수 있다는 장점이 있지만, 관리가 복잡하다는 단점이 있다
보안을 강화하면 침입자뿐만 아니라 관리자도 귀찮아지기 마련이다.
개발자도 프라이빗 서브넷에 있는 데이터베이스에 접근하려면 퍼블릭 서브넷에 있는 인스턴스를 거쳐야 한다.
이는 VPN(Virtual Private Netowrk)을 이용해 네트워크와 네트워크를 서로 연결해서 하나의 네트워크처럼 만들어 해결할 수 있다.
VPN으로 구성된 네트워크는 암호화되므로 외부로부터 안전하게 보호된다.
- 이 구성은 보안성을 높일 수 있다는 장점이 있지만, 관리가 복잡하다는 단점이 있다
VPC with a Private Subnet Only and VPN Access
- 퍼블릭 서브넷이 없다는 점만 제외하면 앞서 살펴본 구성과 같다.
퍼블릭 서브넷이 없으니 인터넷 서비스는 할 수 없다.
회사 내부에서만 사용할 데이터 센터를 AWS 상에 구축하는 거라고 보면 된다.
- 퍼블릭 서브넷이 없다는 점만 제외하면 앞서 살펴본 구성과 같다.
프라이빗 서브넷의 자원은 VPN으로 연결해서 이용할 수 있다. 회사 인트라넷을 구축할 때 적용할만한 구성이다.
우리는 1번째 방법인 VPC with a Single Public Subnet 방식으로 VPC를 구성해보자.
VPC 설정에 필요한 용어
- IP CIDR block : VPC 네트워크에서 사용할 IP 주소 대역을 지정한다. VPC에서 사용할 수 있는 주소 대역은 10.0.0.0/16 부터 10.255.0.0/16, 172.16.0.0/16 부터 172.31.0.0/16까지다. 이 네트워크 대역에서 적당한 주소를 선택하면 된다.
우리는 10.10.0.0/16을 사용하기로 했다. 이 VPC 네트워크는 서브넷으로 쪼개서 사용한다.
- 퍼블릭 서브넷과 프라이빗 서브넷으로 구성된 네트워크다. 중요한 점은 하나 이상의 프라이빗 서브넷을 포함해야 한다는 것이다.
VPC Name : VPC의 이름이다. prototype-vpc 라고 이름 지었다.
Public subnet : 서비스 인스턴스를 배치할 서브넷을 만든다.
10.10.0.0/24 부터 10.10.255.0/24 영역에서 선택하면 된다.
우리는 10.10.1.0/24를 선택했다. 이 퍼블릭 서브넷에서 만들어지는 인스턴스는 10.10.1.1부터 10.10.1.255 사이의 IP주소를 할당 받는다.Availability Zone : AWS 리전은 하나 이상의 가용성 존(Availability zone)으로 구성된다. 가용성 존은 물리적으로 완전히 분리된 AWS의 인프라 단위다.
물리적으로 분리돼 있으므로 하나의 가용성 존에 문제가 생기더라도 다른 가용성 존을 이용해서 서비스를 계속할 수 있다. 인프라의 가용성을 확보하기 위한 물리적인 구획이다.
가용성 존을 활용하려면 ?
- 두개 이상의 서브넷을 만든다.
- 각 서브넷이 서로 다른 가용성 존에 위치하게 설정한다.
실제 서비스라면 당연히 가용성 존을 구성해야 하지만 현재는 프로토타입의 서비스이므로 가용성 존을 구성하지 않는다
Subnet Name : 서브넷의 이름을 설정한다.
Enable DNS hostnames : VPC 네트워크를 위한 DNS 서비스를 이용할 수 있다. Yes로 설정하면 각 인스턴스에 도메인 이름이 할당된다.
만약 직접 DNS를 운용한다면 No로 설정하면 된다. 서비스가 글로벌로 전개되면서 규모가 커지면 자체 DNS를 구축해서 인스턴스를 관리해야 한다.Hardware tenancy : Hardware tenancy를 Default로 설정하면 일반적인 클라우드 개념 즉, 여러 유저가 물리적인 컴퓨터를 공유해서 사용하게 된다.
- Default 대신 dedicated로 설정하면 전용 하드웨어를 사용할 수 있다. 독립적인 하드웨어를 가지므로 컴퓨터 자원을 다른 유저의 인스턴스와 경쟁하지 않고 효율적으로 사용할 수 있지만, 더 비싸다.