모듈 5 - 챌린지 랩: Amazon RDS로 데이터베이스 마이그레이션
시나리오
현재 카페에서는 단일 EC2 인스턴스를 사용하여 웹 서버, 데이터베이스 및 애플리케이션 코드를 호스팅합니다.
그런데 카페의 사업이 성장했습니다. 데이터베이스에 저장된 주문 기록은 카페 직원에게 중요한 비즈니스 정보를 제공하는 만큼 유실되어서는 안 됩니다. Martha는 이 자료를 회계에 사용하고, Frank는 가끔씩 각 디저트 종류를 몇 개씩 만들어야 할지 계획하는 데 이용합니다.
Sofía에게는 걱정거리가 하나 더 있습니다. 데이터베이스를 일관되게 업그레이드하고 패치해야 하는데, 이러한 작업을 수행할 시간이 항상 있는 것은 아닙니다. 또한 데이터베이스를 관리하는 것은 전문적인 기술입니다. 그렇다고 다른 사람들이 데이터베이스 관리하도록 교육하는 데 시간을 허비할 수도 없습니다. 또 한편으로, Sofía는 카페의 데이터를 자주 백업하지 않는 것을 우려하고 있습니다.
결국 Martha도 데이터베이스를 관리하는 데 필요한 기술 학습 투자와 관련된 인건비를 줄이기를 원하게 되었습니다.
실습 개요 및 목표
이 실습에서는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 데이터베이스에서 Amazon Relational Database Service(Amazon RDS)로 데이터를 마이그레이션합니다. 구체적으로 말하면, EC2 인스턴스에서 실행되는 MariaDB 데이터베이스를 Amazon RDS에서 실행되는 MariaDB 데이터베이스로 마이그레이션합니다. 또한 새로운 데이터베이스를 사용하여 향후 모든 주문의 데이터를 저장하도록 카페 웹 애플리케이션을 업데이트합니다.
실습을 시작할 때, AWS 계정에 다음 리소스가 이미 생성되어 있습니다.
이 실습이 끝나면 아키텍처는 다음 예와 같습니다.
챌린지 1 : 카페 애플리케이션을 위한 RDS 인스턴스 생성
다음과 같은 조건으로 db를 생성한다.
태스크 2: 기존 카페 애플리케이션 배포 분석
EC2 콘솔로 이동하여 Running instances를 선택하면, CafeServer라는 인스턴스가 실행 중인 것을 볼 수 있다.
카페 어플리케이션 테스트를 위해 새 브라우저 탭을 열고 http://<public-ip-address>/cafe에서 카페 애플리케이션을 로드하면 다음과 같은 페이지를 볼 수 있다.
AWS Systems Manager를 사용하여 브라우저에서 터미널 세션에 액세스해 EC2 인스턴스에 연결한다.
AWS Management Console에서 Systems Manager 콘솔로 이동하여 Session Manager를 선택
세션을 시작하고 CafeServer에 연결한다.
프롬프트에서 다음 명령을 입력
- Bash 셸을 실행
- EC2 인스턴스의 루트 사용자 계정을 사용하도록 세션을 전환
- ec2-user 계정을 사용하도록 사용자를 전환
- 사용자가 e2-user로 연결되었음을 확인하는 출력을 반환
- 터미널을 e2-user의 홈 디렉터리로 전환
이전 데이터베이스에서 데이터를 내보내고 새 데이터베이스에 연결 설정(챌린지 2)
태스크 3: EC2 인스턴스에서 데이터베이스 사용법
EC2 인스턴스에서 실행되는 MariaDB 데이터베이스에 대한 세부 정보를 관찰한다. 그런 다음 mysqldump 유틸리티를 사용하여 데이터베이스에서 기존 주문 기록 데이터를 내보낸다.
우선 인스턴스에 연결한다.
EC2 인스턴스에서 실행되는 데이터베이스의 세부 정보를 관찰하기 위해 터미널에 다음 명령을 실행한다.
service mariadb status
mysql --version
출력에는 이 EC2 인스턴스에 로컬로 설치된 MariaDB 데이터베이스가 실행 중인 것으로 표시되는 것을 알 수있다.
AWS Systems Manager 콘솔이 열려 있는 브라우저 탭으로 돌아간 뒤, 왼쪽 패널의 Application Management에서 Parameter Store를 선택
파라미터가 저장되어 있는 것을 확인가능하다. 카페 애플리케이션의 PHP 코드는 이들 값을 참조합니다. 예를 들어 데이터베이스의 연결 정보를 검색하는 데 사용된다.
/cafe/dbPassword 파라미터를 선택하고 Value를 클립보드에 복사해둔다.
EC2 인스턴스에서 실행 중인 데이터베이스에 연결한다. 이때 데이터베이스 암호를 묻는 메시지가 나타나면 조금 전에 복사한 dbPassword 파라미터 값을 붙여 넣는다.
기존 데이터베이스의 데이터를 관찰하면 다음과 같이 나온다.
이 모든 데이터를 새 데이터베이스로 마이그레이션해야 한다. 따라서 mysqldump 유틸리티를 사용하여 파일에 있는 기존 데이터를 캡처한다. 데이터베이스 암호를 묻는 메시지가 나타나면 Systems Manager Parameter Store에서 dbPassword 값을 붙여 넣음.
ls 명령을 통해 mysqldump가 성공했는지 확인한다.
태스크 4: RDS 데이터베이스 사용법
EC2 인스턴스에서 실행 중인 터미널에서 새 RDS 인스턴스로의 네트워크 연결을 설정한다.
mysql -u admin -p --host <rds-endpoint>
명령을 실행하면 RDS 인스턴스의 암호를 입력하라는 메시지가 표시되는데, 이때의 암호는 RDS 인스턴스를 생성할 시 정의한 암호이다. 하지만 RDS 엔드포인트와 데이터베이스 암호를 올바르게 입력하더라도 여전히 연결할 수 없는데, RDS 인스턴스가 실행되는 보안 그룹의 인바운드 규칙을 업데이트해야한다. MySQL 클라이언트 소프트웨어는 TCP 포트 3306에서 데이터베이스에 연결을 시도한다. 하지만 모든 소스 IP 주소에 포트 3306을 개방하면 안전하지 않으므로 연결 중인 EC2 인스턴스에서 사용하는 보안 그룹(dbSG)의 서버에만 이 포트를 개방한다.
show databases; 명령을 실행합니다. 다음 출력이 표시된다.
하지만 cafe_db 데이터베이스가 아직 목록에 없다. 아직 데이터를 가져오지 않았기 때문이다.
태스크 5: RDS 데이터베이스 인스턴스로 데이터 가져오기
데이터를 가져오려면 터미널에서 다음 명령을 실행한다.
mysql -u admin -p --host <rds-endpoint> < CafeDbDump.sql
데이터를 가져왔는지 확인하기 위해 다음 명령을 실행한다.
mysql -u admin -p --host <rds-endpoint>
성공적으로 가져왔음을 확인할 수 있다.
업데이트 된 주문내역도 확인할 수 있다.
태스크 6: 카페 애플리케이션을 새 데이터베이스에 연결
실습의 마지막 태스크에서는 카페 애플리케이션을 새 데이터베이스에 연결해야 한다. EC2 인스턴스에서 로컬로 실행되는 데이터베이스도 중지한다. 우선 AWS Systems Manager 콘솔 브라우저 탭으로 돌아간 뒤, 왼쪽 패널에서 Parameter Store를 선택한다. 카페 애플리케이션을 RDS 인스턴스에 연결해야하기 위해 파라미터 정보를 업데이트 해야한다.
다음과 같은 값을 rds와 동일한 값으로 업데이트한다.
웹 애플리케이션이 새 데이터베이스를 사용하는지 확인하기 위해 C2 인스턴스에서 여전히 실행 중인 데이터베이스를 중지한다.
sudo service mariadb stop
http://<public-ip>/cafe/menu.php 페이지를 로드하고 주문을 통해 애플리케이션이 계속 작동하는지 확인합니다. Order History를 선택한다. 최근 주문 및 기타 모든 이전 주문 정보가 있어야 한다.
task 5에서 뭔가 잘못했나보다....... cafe_db migrate하는 과정에서 손실된 데이터가 있는듯,,,
'DEVELOP > AWS' 카테고리의 다른 글
AWS | 데이터베이스 (0) | 2023.02.21 |
---|---|
AWS | 스토리지 storage (0) | 2023.02.21 |
AWS | [실습] RDS 데이터베이스 생성하기 (0) | 2023.01.31 |
AWS | 클라우드 아키텍처 (0) | 2023.01.15 |
AWS | 자동 조정 및 모니터링 (0) | 2023.01.15 |