Why Not SW CAMP 5기/수업 기록

[4월 2주차-4/9][AWS 실습] WordPress + RDS + Auto Scaling + ELB로 고가용성 아키텍처 구축하기

rubii 2025. 4. 9. 16:41

이번 포스팅에서는 AWS를 활용해 고가용성 웹 아키텍처를 직접 구성해본 실습 경험을 공유합니다.
Bitnami WordPress 이미지로 EC2 인스턴스를 띄우고, RDS(MySQL)로 DB를 분리한 뒤, ELB와 Auto Scaling을 통해 확장성과 안정성을 확보해봤습니다.


✅ 1. AMI 생성

먼저 EC2 인스턴스를 기반으로 커스터마이징된 AMI를 생성했습니다.

  • EC2 인스턴스 선택
  • 상단 메뉴 > 작업 > 이미지 및 템플릿 > 이미지 생성
  • 이름 입력, 인스턴스 재부팅 체크 해제 → 이미지 생성

✅ 2. Auto Scaling Group 생성

Auto Scaling 그룹을 통해 CPU 부하 시 자동 확장되는 구조를 설정했습니다.

  1. EC2 > Auto Scaling 그룹 > Auto Scaling 그룹 생성
  2. 이름: myautoscallinggroup
  3. 시작 템플릿 생성:
    • 이름: mytemplate
    • 이미지: 내 AMI
    • 인스턴스 유형: t2.micro
    • 키페어, 보안그룹 설정 → 템플릿 생성
  4. 템플릿 선택 → 다음
  5. 네트워크/서브넷: ELB 대상 그룹과 동일하게 a, c 선택
  6. 로드밸런싱: 기존 ELB 대상 그룹 연결
  7. 상태 확인: ✅ Elastic Load Balancer 상태 확인 체크
  8. 용량 설정:
    • 원하는 용량: 1
    • 최소: 1 / 최대: 2
  9. 크기 조정 정책: 대상 추적 정책
    • 목표 CPU: 80%
    • 축소 비활성화 체크
  10. 알림 설정 및 생성 완료

✅ 3. Auto Scaling 작동 테스트

  • 이름 없는 인스턴스가 자동으로 생성됨
  • 인스턴스 퍼블릭 IP로 접속 (PuTTY)
  • 사용자명: bitnami
  • Stress 테스트로 CPU 부하 발생:
  • sudo apt-get install stress stress --cpu 4
  • CloudWatch에서 모니터링 탭 → CPU 사용률 확인
  • 정책이 누락된 경우: Auto Scaling > 정책 추가 후 재확인
  • 정상적으로 인스턴스 추가되는 것 확인 ✅

✅ 4. WordPress 접속 및 글 작성

  1. ELB DNS 주소로 접속 → 워드프레스 초기화
  2. PuTTY에서 비밀번호 확인: cat bitnami_credentials
  3. 로그인 후 게시글 작성
  4. ELB 주소 새로고침 시 글이 나왔다 안 나왔다 → Auto Scaling 인스턴스마다 DB가 달라서 생기는 문제임

✅ 5. RDS 생성

이제 EC2 내부 DB가 아닌, **RDS(MySQL)**를 생성하여 워드프레스의 DB를 외부로 분리합니다.

  • RDS 콘솔 > 데이터베이스 생성
    • 엔진: MySQL
    • 템플릿: 프리 티어
    • 인스턴스 ID: mydatabase
    • 비밀번호: qwerty2580
    • 인스턴스 타입: db.t3.micro
    • 퍼블릭 액세스: 예
    • 보안 그룹: 새로 생성 (RDSmydatabase)
  • 엔드포인트 확인:
  • mydatabase.c70wggaeiels.ap-northeast-2.rds.amazonaws.com

✅ 6. RDS 고가용성 구성

  1. RDS 인스턴스 > 작업 > 다중 AZ 배포로 변환
  2. 즉시 적용 체크
  3. 변환 완료 후 → 구성 탭에서 다중 AZ: 예 확인
  4. 장애조치 테스트: 재부팅 > 장애 조치 체크

✅ 7. 읽기 전용 복제본 생성 (다른 리전)

  1. RDS > 작업 > 읽기 전용 복제본 생성
  2. 식별자: mydatabasereadreplica
  3. 리전: us-east-1 (N. Virginia)
  4. 퍼블릭 액세스: 예
  5. 읽기 전용 복제본 생성

구성 결과:

  • 리전 내: 마스터 + 스탠바이 (다중AZ)
  • 다른 리전: Read Replica
  • 마스터의 데이터는 복제본에 비동기 복제됨

✅ 8. MySQL Workbench 연결 및 테이블 생성

  1. Workbench 설치 후 커넥션 추가
    • 이름: mydbconnection
    • 호스트: RDS 엔드포인트
    • 비밀번호: qwerty2580
  2. GitHub SQL 파일에서 쿼리 복사
  3. 워드프레스 DB 테이블 생성 및 사용자 user / 1234 생성

✅ 9. 워드프레스 RDS 연동

  1. EC2 인스턴스 접속 (bitnami)
  2. 설정 파일 열기:
  3. vim /opt/bitnami/wordpress/wp-config.php
  4. DB_HOST를 RDS 엔드포인트로 수정, 유저이름, 비밀번호 수정
  5. :wq 저장

✅ 10. 수정된 인스턴스로 AMI 재생성

  1. 수정 완료된 EC2 인스턴스 선택
  2. 작업 > 이미지 및 템플릿 > 이미지 생성
  3. 이름: mywordpressAMInew

✅ 11. 시작 템플릿 & Auto Scaling 그룹 업데이트

  1. 시작 템플릿 생성: mytemplatenew
    • AMI: mywordpressAMInew
    • 인스턴스 타입: t2.micro
    • 보안 그룹: 기존 워드프레스용
  2. Auto Scaling 그룹 > 시작 템플릿 변경 > mytemplatenew

✅ 12. 최종 테스트

  1. 기존 EC2 인스턴스 모두 종료
  2. Auto Scaling이 자동으로 새 인스턴스 생성
  3. 인스턴스 IP /admin 접속 > user / 1234 로그인 > 게시글 작성
  4. ELB 주소 접속 → 게시글 정상 출력
  5. Workbench에서도 게시글 데이터 확인 가능

✅ 마무리

이번 실습을 통해:

  • EC2 + WordPress 설정
  • DB 분리 (RDS)
  • 다중AZ 및 Read Replica 구성
  • ELB + Auto Scaling 확장 구성

까지 실제 서비스를 운영할 수 있는 수준의 아키텍처를 직접 구성해보았습니다.

다음에는 S3 연동, Route53 연결, CodeDeploy 배포 자동화 등 더 심화된 구성도 도전해보려 합니다! 💪