시작 템플릿 생성
왼쪽 몰록에서 시작 템플릿 클릭
시작 템플릿 버튼 클릭
원하는 템플릿 이름 입력
템플릿버전 설명: v2.0 입력
Auto Scaling 체크박스 체크
AMI: Amazon Linux 2 AMI
인스턴스: t2.micro
키페어: 자신의 키페어 선택
키: Name, 값: WEB, 리소스 유형: 볼륨 추가
네트워크 인터페이스
퍼블릭 IP 자동할당: 비활성화 클릭 - 퍼블릭 IP를 할당받지 않게 하기 위해
고급세부정보 - 사용자 데이터 아래와 같이 추가
#!/bin/bash
yum -y install httpd
systemctl start httpd && systemctl enable httpd
echo 'WEB' > /var/www/html/
시작 템플릿 생성 클릭
시작 템플릿 보기 클릭
템플릿 생성 완료!!
생성한 템플릿을 이용하여 인스턴스 생성해보자.
왼쪽 메뉴에서 인스턴스 클릭
인스턴스 시작 드롭다운 - 템플릿으로 인스턴스 시작 클릭
원본 템플릿 버전: 2 선택
네트워크 설정
서브넷: 가용영역 2a
보안그룹: SG-FRONTEND 선택
리소스 태그
값: WEB01로 변경
고급 세부 정보
사용자 데이터
echo 'WEB' 을 ech 'WEB01'로 변경
템플릿으로 인스턴스 시작 클릭
위와 같은 방법으로 4개의 인스턴스를 추가로 만들어준다.
두번째: 가용영역 2c, 리소스 값: WEB02, 사용자 데이터: WEB02
세번째: 가용영역 2a, 리소스 값: WEB03, 사용자 데이터: WEB03
네번째: 가용영역 2c, 리소스 값: WEB04, 사용자 데이터: WEB04
다섯번째: 가용영역 2a, 리소스 값: WEB05, 사용자 데이터: WEB05
배스천 생성
배스천 보안그룹 생성
원하는 이름 및 설명 입력
인바운드 규칙: SSH, 내 IP - 보안을 강화하기 위해(외부에서 들어오지 못하도록)
보안 그룹 생성 클릭
보안 그룹에서 SG-FRONTEND 체크
SG-BASTION 대신 SG-FRONTEND를 선택한 이유는? 소스 수정하기 위해
아래부분 인바운드 규칙 수정 클릭
SSH - 하나 삭제
SSH 소스: 0.0.0.0/0 지우고 SG-BASTION 선택 - 내부 사용자들도 믿지 못해서 SG-BASTION 그룹 사람들만 들어올 수 있도록 해준다.
생성완료 클릭
원본 템플릿 버전: 1
서브넷: 가용영역 2c 선택
보안그룹: SG-BASTION으로 변경
리소스 태크
값: BASTION으로 변경
고급 세부 정보에서 사용자 데이터 정보 지워준다.
(배스천은 웹서버가 필요없기 때문에)
템플릿으로 인스턴스 시작 클릭
IP 선번장 / 대장 (IP를 따로 정리해 두는 것)
WEB01 172.31.11.200
WEB02 172.31.46.6
WEB03 172.31.8.92
WEB04 172.31.47.206
WEB05 172.31.10.152
BASTION 3.36.128.174
(BASTION을 제외하고 나머지 WEB0X는 프라이빗 아이피) - 생성할때 자동할당 비활성화 했기 때문에
BASTION의 퍼블릭 아이피 복사
MobaXterm을 열어 BASTION을 연결시켜준다.
OK 버튼을 눌러 연결을 시도한다.
연결 성공하면 아래와 같은 창이 뜬다.
curl 명령을 이용하여 WEB에 연결을 시도해본다.
아마 연결이 되지 않을것이다.
-> 아까 생성할때 보안을 강화시켜서 웹서버가 깔리지 않았다. 그래서 연결이 되지 않는다.
duplication을 이용해 탭을 총 5개로 만들어준다
SFTP를 이용해 키를 업로드 해준다.
왼쪽에 위로 화살표 방향 아이콘을 클릭해준다,
키를 선택하고 열기버튼을 눌러준다.
바로 업로드가 된다.
키의 권한을 낮춰준다.
권한을 낮춰주지 않으면 권한이 너무 높아서 연결 실패가 발생한다.
[ec2-user@ip-172-31-45-254 ~]$ chmod 400 20210104.pem
[ec2-user@ip-172-31-45-254 ~]$ ssh -i 2 20210104.pem ec2-user@아이피 주소(아까 정리해둔 WEB아이피)
// 총 4개 각각의 탭에 하나씩 입력 - WEB01, WEB02, WEB03, WEB04 아이피 복사 후 붙여넣기
MultiExec 클릭
$ sudo su - root // 각각의 탭에서 작성하기 번거로우니 한번에 입력
왼쪽 메뉴에서 탄력적 IP 클릭
탄력적 IP 주소 할당 클릭
변경 사항 없이 할당 클릭 - 총 5개 생성
탄력적 주소IP 하나 클릭
작업 - 탄력적 IP주소 연결 클릭
MobaXterm에서 MultiExec
[root@ip-172-31-46-6 ~]# sudo yum -y install httpd
[root@ip-172-31-46-6 ~]# systemctl start httpd && systemctl enable httpd
모두 연결 해제 클릭하고 릴리즈 클릭
curl 연결이 된다.
왼쪽 메뉴에서 로드 벨런서 클릭
로드 벨런서 생성 버튼 클릭
Application Load Balancer
1단계)
이름: ALB(원하는 이름 입력)
가용영역: 현재 프리티어 이므로 가용영역 2a와 2c만 클릭
2단계)
경고 무시후 다음 클릭
3단계)
새 보안 그룹 생성
4단계)
대상그룹 이름: TG-ALB(원하는 이름 입력)
포트: 80 - 웹서버 5개의 80포트
5단계)
BASTION 제외하고 모든 인스턴스(WEB) 대상 등록
6단계)
검토 후 아래 생성 버튼 클릭
왼쪽 메뉴에서 대상 그룹 클릭
TG-ALB 클릭
아래 대상 클릭
등록된 대상에서 상태가 healthy로 변경될때까지 기다린다.
왼쪽 메뉴에서 로드밸런서 클릭
아래 설명부분 클릭
DNS 이름 복사 후 새 창 열어서 붙여넣기
새로고침하면 WEB01,WEB02 등등으로 계속 바뀐다.
대상그룹 총 5개 생성
첫번째 대상그룹 생성
왼쪽 목록에 대상그룹 클릭
대상 그룹 생성 클릭
이름: TG-CHROME
다음 클릭
사용가능한 인스턴스에 WEB01 체크
아래에 보류 중인 것으로 포함 클릭
대상 그룹 생성 클릭
위와같이 나머지 4개 대상그룹 생성
2. 이름: TG-FIREFOX
사용가능한 인스턴스에 WEB01 체크
3. 이름: TG-IE
사용가능한 인스턴스에 WEB01 체크
4. 이름: TG-ANDROID
사용가능한 인스턴스에 WEB01 체크
5. 이름: TG-IPHONE
사용가능한 인스턴스에 WEB01 체크
로드밸런서 아래부분에 리스너 클릭
규칙 보기/편집 클릭
+ 버튼 클릭
규칙 추가 클릭
조건: HTTP 헤더
User-Agent
*Chrome*
작업: TG-CHROME
저장
이제 크롬에서 새로고침을 아무리 해도 계속 WEB01(CHROME)만 나온다.
크롬이 아닌 다른 웹브라우저에서는 새로고침할때마다 변경됨
각각 페이지에서 해당 페이지만 뜨도록 위 방법과 같이 추가
만약 안드로이드 핸드폰을 사용한다면 1번이 안드로이드 2번이 아이폰
아이폰을 사용한다면 1번이 아이폰 2번이 안드로이드
(순서가 중요하다)
안드로이드 핸드폰에서 크롬, 인터넷 익스플로어 등 어떤 웹사이트든간에 DNS이름을 입력하여 접속해보면, 다음과 같이 안드로이드 페이지만 뜬다.
새로고침을 아무리 해도 안드로이드 화면만 뜬다.
(1번이 안드로이드이기 때문)