RDS?
RDS는 Relational Database Service의 약자이다.
번역하면 관계형 데이터베이스 서비스라고 할 수 있다.
말 그대로 AWS에서 관계형 데이터베이스를 제공해주는 서비스이며, DB와 관련된 모든 작업들을 제공해준다.
RDS를 사용하는 이유
RDS를 사용하지 않고 이전 실습에서 진행했던 WordPress EC2 인스턴스처럼 직접 MySQL 서버를 설치해서 사용할 수 있다.
하지만 이럴 경우 DB를 직접 관리하게 되어 할 일이 매우 많을 것이다.
그래서 존재하는 직업이 DBA(데이터베이스 관리자) 라고 생각한다.
하지만 RDS를 사용한다면 ? 모든 일을들 알아서 처리해주기 때문에 신경쓸게 적어지고 편리해진다.
RDS의 기본 구조
출처:https://www.frontoverflow.com/document/2/%EC%B2%98%EC%9D%8C%20%EB%A7%8C%EB%82%9C%20AWS/chapter/25/Relational%20Database%20Service%20(RDS)/section/168/RDS%20%EA%B8%B0%EB%B3%B8%20%EA%B5%AC%EC%A1%B0

먼저 AWS 리전과 가용 영역이 나타나있고 가용 영역에 M이라고 써있는 Master DB 인스턴스가 있다.
이 DB를 통해 읽기와 쓰기 작업이 이뤄진다.
Master DB = Primary DB
가용 영역 2번째에는 S라고 써있는 Standby DB 가 있다.
이 DB는 장애를 예방하기 위해 DB 이중화 작업을 위해 사용하는 것이다.
아까 맨 처음 RDS를 설명할 때 나왔던 Multi-AZ가 바로 이것이다.
Master DB의 데이터는 Standby DB로 동기 복제가 이뤄진다. 그래서 두 DB의 데이터는 항상 동일하다고 볼 수 있다.
마지막으로 R이라고 써있는 인스턴스는 Read Replica 이다.
말 그대로 읽기 전용 복제본 이라고 부르고 데이터를 쓰는 용도가 아닌 읽기만 하는 용도로 사용한다.
위 사진처럼 다른 리전에 존재할 수도 있는데, 멀리 떨어져 있는 국가에서도 빠르게 데이터를 읽을 수 있게 해준다.
Master DB와 Read Replica는 비동기 복제이며, 데이터가 항상 같다고는 할 수 없지만, 비동기 복제는 굉장히 짧은 시간 내에 이뤄지기 때문에 거의 동일하게 데이터가 유지된다고 봐도 된다.
만약 M DB에서 장애가 발생하게 되면 장애를 극복하기 위한 Failover 가 이뤄진다. 이 때 S DB가 M DB 역할을 하게 된다.
실습
!! 필독
전 실습에서 진행했던 ASG, EC2, AMI, 보안그룹, 대상그룹, 시작 템플릿 등등 생략했음(이젠 쉽다.)

엔진은 MySQL을 사용한다 (프리티어라..)
인스턴스 식별자는 그냥 내 맘대로 정했고 마스터 사용자 이름은 UserName에 사용될 거라 admin으로 정했다.
아래 암호 자동 생성을 체크해주고 이 암호는 DB 패스워드로 사용할 거다!!!(나중에 마지막에 볼 수 있음)

이렇게 위에 파란색으로 자격 증명 세부 정보 보기 라고 뜨는데 꼭 눌러야한다 꼭

마스터 암호를 메모장에 적어두길 ..
이렇게 RDS 인스턴스 생성완료.

인스턴스를 클릭해보면 이렇게 나오는데 저기 아래에 엔드포인트를 복사해두자
MySQL Workbench는 이전에 설치했기 때문에 패스!

Connection Name 은 마음대로
Hostname 은 아까 복사해둔 RDS 엔드포인트
Username 은 admin
Password 의 Store in Keychain 눌러서 아까 자동 생성한 메모장에 적어둔 암호 입력하고 접속한다.
이제 스키마와 테이블을 생성할 건데 이건 예시 코드가 있어 참고했다.
코드 : https://github.com/soaple/first-met-aws-practice/blob/master/chapter_07/backup.sql


까먹은게 있는데 RDS 인스턴스 클릭 후 VPC 보안 그룹을 클릭하면 인바운드 편집이 가능한데 소스를 Anywhere IPv4 로 바꿔줘야 한다.
안 그러면 나중에 접속이 잘 안됨

다 했다면 WordpressInstance IP로 bitnami를 사용해 ssh로 접속해서 저 명령어를 입력해준다.
vim /opt/bitnami/wordpress/wp-config.php
vim 편집기로 wordpress 설정파일인 wp-config.php를 연다는 것이다.

위 사진을 아래처럼

열었다면 위의 두 사진을 비교해서 바꿔보자.
DB_USER 는 admin
DB_PASSWORD 는 아까 메모장에 적어둔 암호
DB_HOST는 RDS의 엔드포인트:포트번호를 적어주자
기본적으로 MySQL의 포트번호가 3306이라고 한다.

다 됐다면 로드밸런서의 DNS 주소/admin 으로 들어와 게시물을 올려보자.
참고로 아이디는 user 비밀번호는 1234 이다. (아까 올려둔 테이블 생성 코드 맨아래 참고하면 된다!)

그리고 꼭!!!!!!!!!!!!!!!!!!!!!!!!!
이거 쳐줘야함. 원래는 AMI 이미지 생성하면서 bitnami를 재부팅하는데 나는 이미 만들어두고 설정을 했기 때문에 꼭 재부팅해야 접속이 된다.

게시물을 이렇게 작성하고

MySQLWorkbench 가서 게시물 DB인 wp_posts를 보니 내가 작성한 게시물이 정상적으로 들어갔다!
(2개뜨는 이유는 inherit 상태는 임시저장 상태라고 한다.)
이렇게 연결을 해봤는데 생각보다 어려운데 쉬웠다.
그리고 마지막으로 항상 해야하는 것.

깔끔하게 제거까지 완료
이제 S3에 대해 알아보자.
S3?
Simple Storage Service의 약자이다.
S3는 처음에 아마존에서 수많은 상품의 이미지를 저장하기 위해서 만들어졌다고 한다.
스토리지 유형은 S3, EFS, EBS가 있는데
EBS는 이전에 다뤄봤고
EFS는 Elastic File System의 약자이고, 트리 구조로 파일을 저장하는 스토리지다.
그렇다면 S3의 특징은 ?
Bucket
- Object를 담는 최상위 단위 (이름,개수 제한있음)
Object
- Bucket에 담는 데이터 단위(파일)
Metadata
- Object에 대한 여러가지 정보를 담고있는 데이터
Policy
- Bucket, Object에 대한 접근을 통제하는 권한 정보
S3 스토리지의 클래스는 다양하게 있는데 그 중
Standard와 Standard-IA, One Zone-IA를 설명하자면 Standard 클래스가 기본 클래스이며 높은 내구성과 가용성 및 성능을 갖춘 스토리지를 제공한다.
IA가 붙은 클래스는 Infrequent Access의 약자이며 자주 액세스하지 않는 객체를 위한 스토리지 클래스이다.
실습

먼저 S3에 접속해 Bucket을 생성한다. 여기서 Bucket은 고유한 이름이므로 오늘 날짜를 추가했다.

그리고 hello.txt 파일을 바탕화면에 생성하여 업로드했다.

클릭하여 다운로드도 가능!
그리고 폴더 만들기를 클릭하여
폴더명은 MyFolder 로 해줬다.

그리고 hello.txt 파일을 선택하여 복사를 클릭하고

S3 찾아보기 클릭 후 위에서 생성한 MyFolder 를 지정하고 확인.
위 사진은 직접 만든 hello.txt 파일
아래 사진은 복사한 hello.txt 파일

비교해보면 S3 URI가 다르다.
직접 만든 폴더 밖 파일은 hello.txt가 파일명이고
복사한 폴더 안 파일은 MyFolder/hello.txt가 파일명이 된다.
폴더는 파일 이름의 Prefix 개념이라 그렇다.(다 아는 거..)
끝!