본문으로 바로가기

[AWS 실습] ALB를 이용하여 컨텐츠 관리하기

category AWS 2021. 1. 4. 22:54
반응형

[구성]

리전 : 서울 리전

EC2 인스턴스 : 퍼블릭 ip 할당 1대(Bastion 호스트 용), 퍼블릭 ip 미할당 5대(웹서버 용)

EC2 보안 그룹 : SG-WEB, SG-BASTION 

VPC : default VPC 이용

ELB : ALB

 

 

 

 

 

 

 

 

 

SG-WEB의 인바운드 규칙

 

SG-BASTION의 인바운드 규칙

SSH의 소스는 내 IP로 선택한다.

 

 

1. 시작 템플릿 만들기

 

EC2 인스턴스 수가 많으므로 시작 템플릿을 이용하여 편하고 빠르게 만들어보도록 한다.

 

EC2 서비스 메뉴 -> 시작 템플릿 -> 시작 템플릿 생성

 

 

시작 템플릿 이름 : MY-TEMP

Auto Scaling은 쓰지 않을 것이므로 지침은 체크하지 않는다.

 

 

AMI : Amazon Linux 2 

인스턴스 유형 : t2.micro 

키 페어가 아직 없으므로 키 페어를 생성한다.

 

 

키 페어 이름은 ALB-TEST로 하고 파일 형식은 pem을 선택한다.

putty를 쓸 땐 ppk 형식을 사용하지만

mobaxterm을 사용할 땐 pem 형식을 사용한다. (원래 기본 형식은 pem임)

 

 

이 부분은 변경할 게 없다.

보안 그룹은 밑에 네트워크 인터페이스 추가에서 출동 나므로 여기에선 선택하지 않는다.

 

 

Name : WEB (인스턴스, 볼륨 선택)

퍼블릭 IP 자동 할당 : 비활성화

시작 템플릿 생성 클릭

 

퍼블릭 IP(여기에선 유동 IP) 자동 할당을 비활성화했으므로 사용자 데이터에 아파치 웹서버를 설치하는 명령을

넣어줘도 인터넷 연결이 안 되기 때문에 설치가 되지 않는다. 

퍼블릭 IP는 나중에 EIP(고정 IP)를 줘서 임시로 인터넷이 되게 할 수 있다.

 

 

시작 템플릿이 만들어졌다. 

이걸 이용하여 EC2 인스턴스를 생성한다.

 

 

[EC2 인스턴스]

WEB01, 가용 영역 : 2a, 퍼블릭 IP 비활성화

WEB02, 가용영역 : 2c, 퍼블릭 IP 비활성화

WEB03, 가용영역 : 2a, 퍼블릭 IP 비활성화

WEB04, 가용영역 : 2c, 퍼블릭 IP 비활성화

WEB05, 가용영역 : 2a, 퍼블릭 IP 비활성화

BASTION, 가용영역 : 2c, 퍼블릭 IP 활성화

 

 

WEB01의 퍼블릭 IP주소가 할당되지 않은걸 볼 수 있다.

 

BASTION의 퍼블릭 IP주소가 할당된 것을 볼 수 있다.

(가용 영역 선택을 잘못하였지만 실습이므로 그냥 하도록 한다. 실제로는 가용성을 위해 여러 가용 영역을 선택해야 한다.)

 

 

 

2. SSH 접속

 

BASTION 인스턴스에 SSH로 접속하고 키 페어를 업로드 후 권한을 400으로 준다.

 

 

탭을 5개 열고 각 텝마다 WEB 인스턴스로 접속한다.

MultiExec를 클릭한다.

 

 

이렇게 동시에 작업할 수 있는 화면이 나오는데 ping google.com을 해본다.

당연히 WEB 인스턴스에는 퍼블릭 IP가 없으므로 ping이 되지 않는다.

 

 

인터넷이 돼야 아파치 웹서버를 설치할 수 있으므로 EIP를 할당해준다.

(원래 정상적인 방법이라면 퍼블릭 서브넷의 인터넷 게이트웨이에 NAT 게이트웨이를 설치하면 되지만 이번 실습에서는 다른 방법으로 해본다.)

 

 

[EIP 5개 할당]

 

WEB 인스턴스에 퍼블릭 IP를 주기 위해 EIP를 할당받았다.

(여기서 퍼블릭 IP는 고정 IP를 뜻함)

 

 

할당된 EIP를 각 WEB 인스턴스에 연결해준다.

 

 

EIP를 연결하였더니 인터넷 연결이 되었다. 

이제 아파치 웹서버를 설치하도록 한다.

 

sudo su - 

yum -y install httpd

systemctl start httpd

systemctl enable httpd

echo 'WEB01' > /var/www/html/index.html

 

정상적으로 설치가 되었다.

EIP는 바로 삭제해준다.

 

 

3. ALB 생성

 

EC2 서비스 메뉴 -> 로드밸런서 -> Load Balancer 생성 클릭

 

Application Load Balancer 생성 클릭

 

ALB 이름 : MY-ALB

체계 : 인터넷 경계 (불특정 다수가 접근하는 곳에 배치)

 

 

가용 영역 : 2a, 2c

 

 

HTTPS를 사용하라고 말하지만 무시하고 넘어간다.

 

 

보안 그룹 이름 : SG-ALB

HTTP의 소스 : 위치 무관 

 

 

대상 그룹 이름 : TG-ALB

대상 유형 : 인스턴스

 

 

밑에 인스턴스들을 선택하고 등록된 항목에 추가 클릭

 

 

생성된 ALB의 DNS주소를 새 탭에다 복사하여 접속한다.

 

 

WEB 인스턴스들이 정상적으로 로드 밸런싱 된 것을 볼 수 있다.

 

 

 

4. ALB를 이용하여 콘텐츠 스위칭하기

 

 

Chrome 웹 브라우저에서 ALB의 DNS를 검색하였다면 WEB01로 가도록 하고

Firefox 웹 브라우저에서는 WEB02

IE(Internet Explorer) 웹 브라우저에서는 WEB03

Android는 WEB04

MacOS는 WEB05

이렇게 접속할 수 있게 만들어본다.

 

 

먼저 WEB 인스턴스의 index.html 내용을 다음과 같이 변경한다.

WEB01 -> WEB01(Chrome)

WEB02 -> WEB02(Firefox)

WEB03 -> WEB03(IE)

WEB04 -> WEB04(Android)

WEB05 -> WEB05(MacOS)

 

내용을 변경하였으면 이제 대상 그룹을 생성해줘야 한다.

 

대상 그룹 생성 클릭

 

 

대상 그룹 이름 : TG-Chrome

 

WEB01을 선택 후 아래에 보류 중인 것으로 포함을 클릭하고 대상 그룹을 생성한다.

나머지 대상 그룹들도 마찬가지로 이런 식으로 생성한다.

 

대상 그룹이 생성되었다.

이제 ALB에 규칙을 추가한다.

 

리스너에서 체크 부분에 체크를 하고

TG-ALB 규칙 보기/편집을 클릭한다.

 

 

HTTP 헤더 부분에 User-Agent를 입력한다.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

 

User-Agent - HTTP | MDN

User-Agent: / Common format for web browsers: User-Agent: Mozilla/5.0 ( ) ( ) A product identifier — its name or development codename. Version number of the product. Zero or more comments containing more details; sub-product information, for example. For

developer.mozilla.org

User-Agent는 이 사이트에서 확인할 수 있다.

Chrome에 앞뒤에 입력할 것들이 있지만 이걸 다 외올 수 없으므로 * 앞뒤로 붙여준다. (*Chrome*)

나머지들도 이렇게 해 준다

Firefox -> *Firefox*

IE -> *Trident*

 

 

이렇게 규칙을 생성하였다.

이제 각 웹 브라우저에서 접속해본다.

 

 

 

WEB01은 Chrome에서만 나온다.

 

 

 

WEB02는 Firefox에서만 나온다.

 

WEB03은 IE에서만 나온다.

 

 

WEB04는 안드로이드에서 나온다.

안드로이드드는에 있는 웹브라우저(네이버, 삼성 인터넷, 구글 등)는 모두 Chrome로 나온다. 

따라서 Firefox를 설치하여 Firefox에서 접속하면 WEB04(Android)가 나온다.

 

(나는 MacOS를 가지고 있지 않으므로 MacOS 테스트는 못하였다. 하지만 잘 될 것이다.)

반응형