- 생성할 리소스 VPC만
- 이름 : TestVPC-020
- IPv4 CIDR : 10.0.0.0/16
VPC > 서브넷 > 서브넷 생성
VPC ID : 1번에서 생성한 TestVPC-020 선택
서브넷 설정
- 서브넷 이름 : public-subnet-a-041
- 가용 영역 : 리전에서 첫번째 영역 선택
- IPv4 VPC CIDR block : 10.0.0.0/16
- IPv4 subnet CIDR block : 10.0.10.0/24
- 서브넷 이름 : public-subnet-c-041
- 가용 영역 : 리전에서 세번째 영역 선택
- IPv4 VPC CIDR block : 10.0.0.0/16
- IPv4 subnet CIDR block : 10.0.30.0/24
- 이름 : TestIGW020
- 대상 : 0.0.0.0/0
- 대상 : 인터넷 게이트웨이 / igw-xxx..
변경 사항 저장
버튼 클릭[기본 세부 정보]
- 보안 그룹 이름 : WebServerSG-020
- 설명 : Web Server Security Group for 020 user
- VPC : TestVPC-020으로 변경
[인바운드 규칙]
- 규칙 2개 추가
- 유형 : HTTP
- 프로토콜 : TCP
- 포트범위 : 80
- 소스 : Anywhere-IPv4
- 설명-선택사항 : Web Server Port
- 유형 : SSH
- 프로토콜 : TCP
- 포트범위 : 22
- 소스 : Anywhere-IPv4
- 설명-선택사항 : Secure Telnet Port
보안그룹 생성
버튼 클릭[이름 및 태그]
- 이름 : webserver
[Application and OS Images (Amazon Machine Image)]
- Amazon Linux
- Amazon Machine Image(AMI) : Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
[인스턴스 유형]
- t2.micro
[키 페어(로그인)]
- 키 페어 이름 : MyKeyPair-020 ⇒ 전날 만들어둔 키페어
[네트워크 설정]
- VPC : TestVPC-020 선택
- 서브넷 : puvlic-subnet-a-020 선택
- 퍼블릭 IP 자동 할당 : 활성화
- 방화벽(보안그룹) : 기존 보안 그룹 선택
- 일반 보안 그룹 : WebServerSG-020 선택
[고급 세부정보]
#!/bin/sh
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
yum -y install httpd php-mbstring
# Start the web server
chkconfig httpd on
systemctl start httpd
# Install the web pages for our lab
if [ ! -f /var/www/html/immersion-day-app-php7.tar.gz ]; then
cd /var/www/html
wget https://aws-joozero.s3.ap-northeast-2.amazonaws.com/immersion-day-app-php7.tar.gz
tar xvfz immersion-day-app-php7.tar.gz
fi
#
cat <<EOF > /var/www/html/get-index-meta-data.php
<?php
\$hostname = gethostname();
\$results = explode(".", \$hostname);
echo "<table style='width:100%'>";
echo "<tr><th style='width:30%'>Meta-Data</th><th style='width:70%'>Value</th></tr>";
echo "<tr><td>Private IP DNS Name</td><td>".\$hostname."</td></tr>";
echo "<tr><td>Private IP</td><td>".getHostByName(\$hostname)."</td></tr>";
echo "<tr><td>Region</td><td>".\$results[1]."</td></tr>";
echo "</table>";
?>
EOF
# Install the AWS SDK for PHP
# PHP 용 SDK 설치
if [ ! -f /var/www/html/aws.zip ]; then
cd /var/www/html
mkdir vendor
cd vendor
wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip
unzip aws.zip
fi
# Update existing packages
yum -y update
2. 나머지 설정은 변경하지 않고 그대로 유지한 상태로 인스턴스 생성
EC2 > 인스턴스 > 생성한 인스턴스 확인
퍼블릭 IPv4주소는 SSH 접속 시 필요하므로 기억해두자.
cmd창
# 어제 다운로드 받은 pem 파일이 존재하는 디렉터리로 이동
C:\>cd C:\Users\USER\Desktop
# pem 파일
C:\Users\USER\Desktop>dir *.pem
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 7CA3-675B
C:\Users\USER\Desktop 디렉터리
2023-11-30 오후 04:56 1,678 MyKeyPair-020.pem
1개 파일 1,678 바이트
0개 디렉터리 82,107,662,336 바이트 남음
# 키 파일 업로드
C:\Users\USER\Desktop>ssh -i MyKeyPair-020.pem ec2-user@54.218.49.195
The authenticity of host '54.218.49.195 (54.218.49.195)' can't be established.
ECDSA key fingerprint is SHA256:MI0JrtfD6aVItptN4INL5IyrLgX8AJQY6FLS8isLco0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '54.218.49.195' (ECDSA) to the list of known hosts.
, #_
~\_ ####_ Amazon Linux 2
~~ \_#####\
~~ \###| AL2 End of Life is 2025-06-30.
~~ \#/ ___
~~ V~' '->
~~~ / A newer version of Amazon Linux is available!
~~._. _/
_/ _/ Amazon Linux 2023, GA and supported until 2028-03-15.
_/m/' https://aws.amazon.com/linux/amazon-linux-2023/
[ec2-user@ip-10-0-10-230 ~]$
인터넷 브라우저 주소창에 퍼블릭 IPv4 주소 입력
- 이미지 이름 : webserver-ami-020
- 이미지 설명-선택사항 : webserver image for 020
생성된 이미지는 EC2 > AMI 에서 확인 가능
⇒ 이미지 생성이 완료되면 상태가 "사용 가능으로" 변경된다.
⇒ 사용자 데이터 항목에 입력했던 스크립트(프로그램 설치 및 설정)의 실행 과정을 생략할 수 있음
[이름 및 태그]
- 이름 : webserver2
[인스턴스 유형]
- t2.micro
[키 페어(로그인)]
- 키 페어 이름 : MyKeyPair-020
[네트워크 설정]
- VPC : TestVPC-020
- 서브넷 : public-subnet-c-020
- 퍼블릭 IP 자동 할당 : 활성화
- 방화벽(보안 그룹) : 기존 보안 그룹 선택
- 일반 보안 그룹 : WebServerSG020 선택
동일한 내용의 서비스를 제공하는 인스턴스 두 개가 실행되고 있음
개별 인스턴스의 주소로 접속하는 경우, 이용의 불편과 부하 집중의 문제가 발생할 수 있음
⇒ 로그밸런서를 이용해서 서비스될 수 있도록 수정
⇒ 부하분산과 서비스 편의를 제공
[기본 구성]
- 로드 밸런서 이름 : weblb-020
- 체계 : 인터넷 경계
- IP 주소 유형 : IPv4
[네트워크 매핑]
- VPC : TestVPC-020
- us-west-2a (usw2-az1) 체크
- us-west-2c (usw2-az3) 체크
[보안 그룹]
1. 새 보안 그룹을 생성 클릭
2. 로드 밸런스용 보안 그룹 생성
[기본 세부 정보]
- 보안 그룹 이름 : lbSG-020
- 설명 : Load Balance Security Group for 020
- VPC : TestVPC-020 선택
[인바운드 규칙]
- 유형 : HTTP
- 프로토콜 : TCP
- 포트 범위 :80
- 소스 : Anywhere
2-2. 보안그룹 생성 클릭
3. 보안 그룹 lbSG-020 선택
[리스너 및 라우팅]
1. 대상 그룹 생성 클릭
[그룹 세부 정보 지정]
- 대상 유형 : 인스턴스
- 대상 그룹 이름 : webserver-TG-020
- 프로토콜:포트 : HTTP 80
- IP 주소 유형 : IPv4
- VPC : TestVPC-020
- 프로코톨 버전 : HTTP1
2. `다음` 클릭
[대상 등록]
1. webserver 와 webserver2 선택 > 아래에 보류 중인 것으로 포함 > 대상 그룹 생성
2. 대상 그룹으로 webserver-TG-020 선택
3. 로드 밸런서 생성
로드 밸런서: weblb-020
- 상태 : 활성
- DNS 이름 : weblb-020-1283113824.us-west-2.elb.amazonaws.com
10.0.10.x
또는 10.0.30.x
로 변경되는 것을 확인할 수 있다. ⇒ 두 개의 인스턴스가 번갈아가면서 응답하는 것을 확인작업 중단 시 EC2 인스턴스인 webserver와 webserver2 중단시키기.
👾 이슈
EC2 퍼블릭 주소로 접근했을 때 화면이 안 나오는 경우
웹 서버 인스턴스 생성 시 사용자 데이터 설정이 되어 있지 않은 경우 발생하는 이슈
EC2 퍼블릭 주소로는 접근되는데 로드밸런서로 접근은 되나 화면이 안 나오는 경우
대상 그룹이 설정되지 않은 경우 또는 대상 그룹에 인스턴스가 등록되지 않은 경우
퍼블릭 IP로 접근 시 정상적으로 화면이 나오면 재시작된 것이다.
로드밸런서의 DNS주소로 접근 시 IP가 번갈아가며 나오는 것을 확인할 수 있다.
현재는 클라이언트에서 로드밸런서를 이용하지 않고 개별 인스턴스로 직접 접근하는 것이 가능하다.
모든 요청을 로드밸런서를 통해서 처리하도록 제한하고 개별 인스턴스에 로드밸런서로부터 오는 HTTP(80) 요청만 허용하도록 수정한다.
보안그룹에서 인바운드 규칙 편집
기존 HTTP 삭제