카테고리 없음

[새싹 금천 5기] AWS AMI 생성, 로드밸런서 활용 (이노그리드_기업맟춤형 클라우드 인재 양성 캠프)

z00h 2025. 6. 8. 21:06

 

이번포스팅에서는 EC2 구성요소를 알아보고 AMI로 인스턴스 생성, 로드밸런서 활용 실습을 진행해보려고 한다.

 

EC2 구성요소

 

AMI(Amazon Machine Image)

  • 인스턴스를 시작하는 데 필요한 소프트웨어 구성(운영 체제, 애플리케이션 서버, 애플리케이션)이 포함된 템플릿
  • 사용자 커뮤니티 또는 AWS Marketplace에서 제공하는 AMI를 선택하거나, 자체 AMI를 선택할 수 있음

 

EBS(Elastic Block Store)

  • https://aws.amazon.com/ko/ebs/
  • EBS는 EC2를 위해 설계된 사용이 쉽고 확장 가능한 고성능 블록 스토리지 서비스
  • EBS 볼륨은 특정 가용 영역에 위치하며 여기에서 자동으로 복제되므로, 단일 구성 요소에 장애가 발생하더라도 안전하게 보호됨
  • 모든 EBS 볼륨 유형은 안정적인 스냅샷 기능을 제공하며 높은 가용성을 제공하도록 설계

 

EBS 스냅샷 (통으로 복사)

  • https://aws.amazon.com/ko/ebs/snapshots/
  • AWS EBS(Elastic Block Store) 볼륨의 백업본
  • AWS 클라우드 환경에서 데이터를 안전하게 백업하고, 필요 시 신속하게 복구할 수 있도록 지원하는 기능
  • 백업 관리, 데이터 복구, 리전 간 데이터 이동 등 여러 용도로 사용할 수 있어 데이터 보호와 효율적인 관리에 큰 장점을 제공

 

EIP(Elastic IP, 탄력적 IP)

  • 고정된 공인 IP 주소를 EC2 인스턴스와 같은 AWS 리소스에 할당할 수 있는 기능이다.
  • 일반적으로 IP 주소는 인스턴스를 중지하고 다시 시작할 때 변경되지만,

EIP를 사용하면 항상 동일한 IP 주소를 통해 인스턴스에 접근할 수 있어 안정적으로 서비스가 가능하다.

 

로드 밸런서

  • EC2 로드 밸런서는 여러 EC2 인스턴스에 트래픽을 분산시켜 가용성과 안정성을 높여준다.
  • 자동으로 상태가 좋은 인스턴스로만 트래픽을 전달해 장애 대응이 가능하다.

→ 사용자의 개별 접근을 막고 중간에서 부하 분산이 되도록 사용자를 통제

 

 

웹 서비스 환경 구성

실습을 진행하기 전 전체 과정은 아래와 같이 진행된다.

VPC, 서브넷 생성 → EC2 인스턴스 생성 → 가상화된 하드웨어 프로그램(AMI)로 저장 → 저장된 AMI로 같은 머신(EC2) 생성 → 타겟 그룹으로 묶어 로드밸런싱 (ELB를 통해)

 

 

 

VPC, 서브넷 생성

가용영역 2a, 2c에 public 서브넷 생성

  • 가용영역 2a - subnet-a / 10.0.10.0/24
  • 가용영역 2c - subnet-b / 10.0.30.0/24

 

 

 

 

가용영역 a,c 선택이유 : t2.micro 인스턴스 유형에 해당하는 사용가능한 가용영역이 다른데

해당 서브넷에 맞는 가용영역에 생성해야함

 

 

 

 

 

VPC 생성

  • VPC명 : my-vpc
  • Ipc4 CIDR : 10.0.0.0/16

사이더블록 설정 후 나머지 설정은 유지하고 VPC 생성

 

 

 

서브넷 생성

서브넷 2개를 한번에 생성

 

 

 

public-subnet-a (10.0.10.0/24)

 

 

 

public-subnet-c (10.0.30.0/24)

 

 

 

이제 인터넷 게이트웨이를 추가하고, 라우팅 테이블 설정한다.

 

 

 

인터넷 게이트웨이 생성(my-igw)

 

 

 

 

IGW를 VPC에 연결

 

 

 

 

라우팅 테이블을 생성하고 IGW에 라우팅 추가

라우팅 테이블명 : my-rt

 

 

 

 

IGW로의 라우팅 추가

  • 라우팅 1 : 10.0으로 시작하는 주소는 VPC(local)에서 찾아라
  • 라우팅 2: 그 이외의 모든 주소는 igw로 보내라

 

 

 

puclic-subnet-a, public-subnet-c 서브넷을

my-rt 라우팅 테이블과 연결함으로써 a,c 서브넷은 퍼블릭 서브넷으로 설정된다.

 

 

 

라우팅 테이블에 igw로의 라우팅이 있기때문에 해당 서브넷은 public 서브넷이 된다.

인스턴스에 적용할 보안그룹을 생성

→ SSH(22), HTTP(80) 포트로 접근을 허용

  • 그룹명 : my-sg
  • VPC : my-vpc
  • 인바운드 규칙 : SSH,HTTP

 

 

 

 

 

이제 서브넷-a 에 webserver-a(EC2)를 생성한다.

 

 

 

 

EC2 > 인스턴스 > 인스턴스시작

인스턴스명 : webserver-a

AMI : Amazon Linux 2023(프리티어)

 

 

 

인스턴스 유형 : t2.micro

키 페어 : MyTestKeyPair

네트워크 설정

  • vpc : my-vpc
  • 서브넷 : public-subnet-a
  • 퍼블릭 IP 자동할당 : 활성화

보안그룹 : my-sg

 

 

 

 

고급 세부정보 > 하단에 사용자 데이터 입력

처음 실행될때 사용되는 스크립트, 인스턴스를 초기화할때 사용

 

 

 

 

사용자 데이터

#!/bin/sh

sudo dnf install -y httpd php git

sudo systemctl start httpd

sudo systemctl enable httpd

git clone https://github.com/myanjini/ec2-php-app.git

sudo mv ec2-php-app/* /var/www/html/

cd /var/www/html

sudo mkdir vendor

cd vendor

sudo wget https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip

sudo unzip aws.zip

 

해당 쉘 스크립트는 Amazon EC2 인스턴스에 웹 서버(Apache)와 PHP 애플리케이션을 설치하고 설정하는 작업을 자동으로 수행한다.

C2 인스턴스를 PHP 웹 서버로 구성하고, GitHub에서 앱 소스를 받아 설치하며, AWS SDK까지 연동할 준비를 마치는 전체 작업을 자동화한다.

즉시 웹서버가 동작하고 PHP 앱을 실행할 수 있는 상태로 만들어주는 구성이다.

 

 

 

 

 

웹서버 동작 확인

인스턴스에 SSH 접속하기 위해 SSH Client인 bitvise를 이용하여 접속한다.

 

SSH Client 설치, 설정 (bitvise)

 

서버, 클라이언트 보안 통신 과정

→ 서버에서 key 생성, 키 중하나는 내가 가진 개인키이고, 서버는 공개키를 가지고있다.

→ 발급받은 개인키로 나를 증명하고 비밀키를 생성해서 통신을 한다.

  1. 키 등록

 

 

 

import 하여 발급받은 key를 가져와 등록

 

 

 

서버주소 : public ip 입력

포트번호 : 22

Username : ec2-user

 

 

 

로그인(인증완료)

 

 

 

좌측 메뉴 3번째 New terminal console 클릭

  • bitvise로 인스턴로 SSH 접속완료 (터미널 띄우기)

 

 

 

웹서버 동작 확인

systemctl status httpd

정상적으로 웹서버는 가동중인것을 확인 할 수 있다.

 

 

 

 

퍼블릭 ip로 웹브라우저에서 접속시 EC2에 대한 정보가 잘 나온다.

 

 

 

 

웹서버 설정이 모두 끝난 상태에서 webserver-a를 기반으로 AMI 생성

(public-subnet-c에 똑같은 EC2 복제)

 

 

 

이미지 생성

EC2 > 인스턴스 > 이미지 생성

이미지명 : my-ami

나머지 설정은 그대로하고 이미지 생성

 

 

 

 

생성한 이미지를 이용해서 2c 가용영역에 웹서버 인스턴스를 생성한다.

인스턴스명 : webserver-c

AMI : my-ami

 

 

 

 

인스턴스 유형은 t2.micro로 그대로 두고

키페어는 기존의 MyTestKeyPair로 설정

 

 

 

 

네트워크 설정

서브넷은 public-subnet-c로 변경

보안그룹 : my-sg

 

 

새롭게 추가한 인스턴스의 동작 확인

인스턴스의 퍼블릭 IP 주소를 확인

 

 

 

 

퍼블릭 IP로 접속시 첫번째 인스턴스와 동일한 동작을하는 가용영역 2c 인스턴스가 잘 실행이 된다.

 

 

 

로드밸런서 구성

현재 동일한 내용의 서비스를 제공하는 인스턴스 두 개가 실행되고 있음

개별 인스턴스의 주소로 접속하는 경우, 이용의 불편과 부하 집중의 문제가 발생할 수 있다.

→ 현재 webserver-a와 c가 같은 서비스를 제공하는 인스턴스이고 로드밸런서를 이용해서 서비스될 수 있도록 수정한다.

⇒ 부하 분산, 서비스 편의를 제공

 

 

 

 

로드 밸런서 생성

EC2 > 로드 밸런서

 

 

 

로드 밸런서 유형

Application Load Balancer

 

 

 

 

로드밸런서 명 : my-lb

체계 : 인터넷 경계

주소 유형 : Ipv4

 

 

 

 

VPC 및 서브넷 매핑

VPC : my-vpc 매핑

가용영역 : 2a, 2c 매핑

 

 

 

보안그룹 생성

로드밸런서에는 SSH(22번)포트가 접속될 필요가 없으므로 HTTP 접속만 가능한 로드밸런서 전용 보안그룹 생성한다.

HTTP 인바운드 규칙만 설정

 

 

 

 

생성한 보안 그룹을 설정하고 대상그룹을 생성한다.

  1. 새로고침 클릭
  2. my-lb-sg 선택
  3. 대상 그룹 생성

 

 

 

 

대상 그룹 : 80으로 들어온 트래픽을 대상 그룹으로 보낸다.

그룹 세부 설정

대상 유형 : 인스턴스

대상그룹명 : my-lg

 

 

 

 

프로토콜 설정

HTTP /80 포트

VPC : my-vpc

프로토콜 버전 : HTTP1

 

 

 

 

대상 등록

websever-a와 c 선택, 대상 그룹 생성

 

 

 

 

로드밸런서 설정 > 대상 그룹 선택

나머지 값은 디폴트값 유지하고 로드밸런서 생성

 

 

 

 

로드밸런서 생성 확인

 

 

 

 

로드밸런서 동작 확인

→ 웹 브라우저를 이용해서 로드밸런서의 DNS 이름으로 접근

첫번째 가용영역(2a)의 인스턴스가 보인다

 

 

 

F5(새로고침)을 하면 2c 인스턴스가 나오고 로드밸런스를 통해 번갈아 가면서 서비스가 실행된다.

 

 

현재 퍼블릭 ip로 접속해도 서비스가 실행이 되는데, 로드밸런서의 주소로만 접속이 되도록 수정한다.

→ 기존 인바운드 규칙에서 로드밸런스로 들어오는 트래픽만 처리하도록 수정

소스를 lb-sg인 로드밸런스 보안그룹으로 수정

 

 

 

 

현재 인스턴스에 적용된 보안그룹 수정

→ 인바운드 규칙의 80포트 소스를 로드밸런서의 보안그룹으로 지정

 

 

 

 

인바운드 규칙 편집 > 기존 80포트 규칙 삭제 후 규칙 추가 > 소스 보안그룹 변경하여 등록

 

 

 

 

보안그룹 소스를 수정하면서 이제는 퍼블릭 ip로 인스턴스로의 직접 접근을 할 수 없다.

 

 

 

지금까지 EC2 로드밸런스를 활용한 실습을 진행하였다.

로드밸런서로 인스턴스를 쉽게 핸들링 할 수 있고 트래픽을 분산시켜 부하를 막을 수 있는 유용한 기능이다.