본문 바로가기

백앤드 개발/Infra

[AWS] VPC, EC2, EBS, S3, ASG 실습

1. 실습 순서

1) AWS VPC 생성

2) AWS EC2 생성

3) PPK 변환 및 서버 접속 확인

4) EC2 - EBS 연동

5) EC2 - S3 연동

6) ASG 생성 및 부하에 따른 테스트

7) Clear 작업

 

 

2. AWS VPC 생성

목표:

- 가상의 네트워크 VPC를 생성

- VPC 의 공간을 서브넷으로 영역 분리

- 인터넷 게이트웨이를 VPC 공간 내 서브넷과 연결

 

더보기

사용할 리전 선택

 

 

AWS vpc dashboard 에서 vpc 생성

 

 

리소스, 이름, CIDR 등을 설정

 

 

VPC 메뉴 중 서브넷 > 서브넷 생성 클릭

* 서브넷: 네트워크에서 주소 공간을 분할하는데 사용. 네트워크를 장치/시스템/접근권한 별로 구분

 

 

- 서브넷 이름 설정: test-subnet-01

- 가용 영역: 기본 설정없음 > us-east-2a (vpc 리전 오하이오인 상태)

- IPv4 CIDR 블록 : 10.0.1.0/24

 

 

가용영역이 다른 새 서브넷 추가 후 서브넷 생성

- 서브넷 이름 설정: test-subnet-02

- 가용 영역: 기본 설정없음 > us-east-2b

- IPv4 CIDR 블록 : 10.0.2.0/24

 

 

test-igw 이름의 인터넷 게이트웨이 생성

* 게이트웨이: vpc 내 리소스 연결에 사용

 

 

게이트 웨이 생성 후 vpc 연결 클릭

 

 

사용할 vpc 선택 후 인터넷 게이트 웨이 연결 클릭

 

 

라우팅 테이블에서 vpc 확인 후 해당하는 라우팅 테이블 ID 클릭

 

 

라우팅 편집 > 라우팅 추가 클릭 > 라우팅 편집 후 변경사항 저장

- 0.0.0.0/0 선택: 해당 VPC의 리소스가 모든 대상으로 트래픽을 전달

- 인터넷 게이트웨이 선택

- 생성한 igw 선택

 

 

서브넷 연결 클릭 > 우측 서브넷 연결 편집 > 이전에 만든 서브넷 2개를 선택 후 연결 저장 클릭

 

 

3. AWS EC2 생성

목표:

- EC2 생성

- 네트워크 설정 (인바운드 규칙, VPC 등) 을 통해 외부 액세스 제어

- 보안 그룹 설정을 통해 SSH는 내 IP로만 접근 가능하고, HTTP 는 모든 IP로  허용해 검색 가능하도록

 

더보기

 

인스턴스 시작 버튼 클릭

 

 

이름 설정: test-server

 

AMI Amazon Linux를 선택, 인스턴스 유형을 t2.micro 를 선택

*AMI (Amazon Machine Image): 인스턴스를 구성하는데 사용되며 운영체제와 소프트웨어를 구성하는 가상머신

 

 

인스턴스를 안전하게 연결하기 위한 키페어 생성

반드시 따로 저장해둘 것!

 

 

네트워크 설정 > 편집 > VPC 및 서브넷 정보 설정

- VPC : test-vpc 선택

- 서브넷: test-subnet-01 선택

- 퍼블릭 ip 자동 할당: 활성화

* 퍼블릭 ip: 활성화시 외부 인터넷과 통신 가능, 비활성화시 외부에서 액세스 불가

 

 

보안그룹 생성 선택 > 보안 그룹 관련 설정 변경

- 보안 그룹 이름: test-server-sg

- 설명: 2023.11.02 test server secret group

 

 

인바운드 보안 그룹 규칙 설정

- 보안 그룹 규칙 1 유형 : ssh Source : 내 IP

- 보안 그룹 규칙 2 유형 : ssh Source : 10.0.0.0/16

- 보안 그룹 규칙 3 유형 HTTP Source type : Anywhere

 

* 인바운드 보안 그룹 규칙: EC2로 진입하는 네트워크 트래픽 제어, 특정 IP 주소에서의 연결만을 허용

 

 

인스턴스 생성완료 화면

 

 

4. PPK 변환 및 서버 접속 확인

목표:

- putty 키타입인 .ppk 키파일 생성

- 앞서 만든 서브넷 환경의 서버 접속 확인

- 웹 서버 구현  

 

1) PPK 변환

더보기

1) puttygen을 검색하고 실행

2) Load 버튼을 클릭 후 우측 Putty Private key files 를 클릭하고 All Files 선택

3) 키 페어 파일 선택후 확인 클릭

4) Save Private key 클릭 후 이름을 test-server-key.ppk 로 입력 후 저장

 

참조: https://calvinjmkim.tistory.com/20

 

2) 서버 접속 확인

더보기

putty 실행 후 Putty Hostname 란 입력

-  Putty Hostname: ec2-user@[인스턴스 IP]

- Hostname 은 선택한 AMI 에 따라 다르며 ubuntu 환경에선 ec2-user 대신 ubuntu 입력

 

 

좌측 SSH 선택 > Auth 클릭 > Browe > 이전에 저장된 test-server-key.ppk 파일 선택 (실행마다 확인)

 

 

$ sudo yum update -y : 시스템 패키지 업데이트
$ sudo yum install httpd -y : Apache HTTP 서버 소프트웨어를 설치, 웹 어플리케이션 설치
$ sudo service httpd start : Apache HTTP 서버를 시작
$ sudo -i : 슈퍼 유저 또는 root 사용자로 로그인, 모든 명령어 사용 가능
$ echo Web Server 1 > /var/www/html/index.html : 텍스트 "Web Server 1"을 /var/www/html/index.html 파일에 쓰는 명령어

웹 서버 구현 명령어

 

 

퍼블릭 IPv4 주소를 검색하면 "Web Server 1" 텍스트가 표기된 모습

 

 

실습 결과

 

 

5. EC2 - EBS 연동

목표:

- 앞서 만든 서브넷 환경의 서버 접속 확인

- 웹 서버 구현  

 

더보기

EC2 좌측 메뉴 중 EBS 볼륨 클릭 후 볼륨 생성 클릭

연결할 서브넷과  가용영역 선택

 

 

리소스를 구분할 수 있도록 키에는 Name 값에는 test-ebs 을 입력

 

 

볼륨 선택 > 우측 작업 클릭 > 볼륨 연결 클릭

 

 

인스턴스 선택 후 볼륨 연결 클릭

 

 

$ sudo -i : 슈퍼 유저 또는 root 사용자 권한 로그인
$ lsblk : 사용 가능한 블록 장치 표시
$ mkfs -t xfs /dev/xvdf: /dev/xvdf 장치 XFS 파일 시스템 생성
$ mkdir /data : data 디렉토리 생성
$ mount /dev/xvdf /data : EBS 볼륨이 /data 디렉토리에 연결, /dev/xvdf 장치 /data 디렉토리에 마운트. 완료 후 EBS 볼륨의 내용이 /data 디렉토리에 나타남
$ df -h : 디스크 정보 및 사용량 표시

인스턴스 접속 후 명령어를 통해 EBS 설정

 

 

실습 결과 

 

 

6. EC2 - S3 연동

목표:

- 앞서 만든 서브넷 환경의 서버 접속 확인

- 웹 서버 구현  

 

더보기

서비스 검색창에서 S3 검색 > 버킷 만들기 클릭

버킷이름, AWS 리전 설정

 

 

객체 소유권 설정 수정

ACL 활성화됨 / 버킷 소유자 선호 선택

* ACL: ACL 을 통해 S3 버킷 내 객체에 대한 권한을 정의, 객체에 대한 액세슥 권한 (CRUD 수행권한) 결정

 

 

모든 퍼블릭 엑세스 차단 선택 후 버킷 만들기 선택

우리가 테스트할 버킷은 퍼블릭한 자료를 업로드할 테스트 용으로 외부 엑세스 허용

보안이 필요한 자료의 경우 엑세스 차단을 해지해선 안됨!!!

 

 

생성한 버킷 이름 클릭 > 파일추가 후 사진 업로드 > 우측 하단 업로드 클릭

 

 

 사진 클릭 > 객체 작업 > ACL 로 퍼블릭으로 설정

 

 

객체 URL 을 통해 사진 접근 성공 

 

sudo -i
echo "<html>" > /var/www/html/index.html
echo "<body>" >> /var/www/html/index.html
echo "<img src=\"[객체URL]">" >> /var/www/html/index.html
echo "</body>" >> /var/www/html/index.html
echo "</html>" >> /var/www/html/index.html

EC2 인스턴스로 접속한 뒤 명령어로 웹서버 설정

 

 

웹 서버 출력 완료

 

 

7. ASG 생성 및 부하에 따른 테스트

목표:

- ASG 에 적용될 시작템플릿 생성

- EC2의 가용성을 자동으로 관리하는 ASG 생성

- ELB 적용해 트래픽 증가시 서버를 증설하도록 설정

- 과한 트래픽을 가하고 서버가 증설되는지 테스트

 

더보기

EC2 > 시작 템플릿 > 시작 템플릿 생성 > 다음과 같이 설정

시작 템플릿 이름 설정: test-tem

템플릿 버전 설명: test-tem

Auto Scaling: 체크

 

 

더 많은 AMI 찾아보기 클릭 > 기본 Amazon 리눅스 선택

 

 

인스턴스 유형에 프리티어 유형 선택 > 이전에 사용한 키페어 선택

 

 

아래와 같이 네트워크 설정

- 시작 템플릿: 포함되지 않음

- 보안그룹: 보안그룹 생성 > 보안 그룹 이름 "test-asg-sg" 입력

- 설명: ssh

- vpc: 기존에 생성한 vpc 선택 (test-vpc)

 

 

인바운드 보안 그룹 규칙 ssh 선택, Source type 에 Anywhere 선택

 

 

하단 고급 네트워크 구성 클릭 > 네트워크 인터페이스 추가 클릭> 디바이스 인덱스 0 입력 후 생성 클릭

 

 

EC2 > Auto Scaling > Auto Scaling 그룹 생성

- ASG 그룹 이름: test-asg

- 시작 템플릿: 앞서 생성한 템플릿 (test-tem)

 

 

기존에 생성한 VPC 와 subnet 선택 후 다음 클릭

 

 

새 로드 밸런스 연결 > ALB 선택 > Internet-facing 선택

 

 

리스터 및 라우팅 설정 > 대상 그룹 생성

새 대상 그룹 / Name 태그: test-asg-lb-tg 입력 후 다음 버튼 클릭

 

 

그룹 크기 지정 (최대 용량 5) 

 

 

대상 추적 크기 조정 정책 클릭, 평균 CPU 사용률, 대상값 50 확인 후 하단 다음 클릭

 

 

태그 추가에서 키 : Name, 값: test-asg 입력 후 Auto Scaling 그룹 생성

 

 

인스턴스 목록 중, 본인이 생성한 ASG가 배포한 인스턴스의 ID를 복사 후 메모장에 저장

 

 

탄력적 IP 클릭 > 탄력적 IP 주소 할당 클릭> 태그 키: Name: test-EIP 입력> 할당 클릭

 

 

EIP 선택 후 우측 상단 작업 클릭, 탄력적 IP 주소 연결 클릭

 

 

 이전에 생성한 test-asg 선택 후 연결 클릭

 

 

# 1. 슈퍼 유저 로그인
$ sudo -i

# 2. # Amazon Linux Extras로 EPEL 저장소를 설치
$ amazon-linux-extras install -y epel
# 2-1. 위 명령어 안되면 명령어
$ yum install epel-release

# 3. stress 패키지를 설치 / CPU나 메모리 부하 줄 때 사용
$ yum install -y stress 

# 4. 2개의 cpu 코어에 600 초간 부하 생성
$ stress –c 2 –t 600
# 4-1. 안되면
$ sudo stress --cpu 2 --timeout 600s

putty 로 EIP 접속 후 부하 발생

 

 

인스턴스가 증가함을 확인

 

 

8. Clear 작업

목표:

- 테스트에 사용한 이제는 불필요한 자원 제거

 

더보기

1. 오토스케일링 그룹 삭제

2. 로드밸런서 삭제

3. 시작 템플릿 삭제

4. 인스턴스 삭제

5. 키페어 삭제

6. 볼륨 삭제

7. VPC 삭제