본문 바로가기
Cloud AWS, Azure, GCP

AWS 인프라 구축 실습 5회 - RDS

by SB리치퍼슨 2021. 11. 10.

AWS 인프라 구축 실습 5회 - RDS

이번 회차에서는 AWS의 관리형 데이터베이스 RDS설정에 관하여 실습을 해보겠습니다.
RDS만 설정하면 실제로 어떻게 사용되는지 모르기 때문에, 어디에 어떻게 사용할 수 있는 지 연동환경까지 구축해 보겠습니다.
그래서 다음과 같은 과정으로 진행해 보려고 합니다.

실습과정
1. Route53 도메인 설정
2. VPC 설정
3. RDS (mysql) 설정
4. EC2(wordpress) 연동



RDS란 관계형 데이터베이스를 설치, 운영, 확장 작업에 대한 관리형 웹서비스입니다.
도메인을 이용하여 웹서버에 접속하면 관리형 DB를 액세스할 수 있는 서비스를 구축해보도록 하겠습니다.

1. Route53 도메인 설정


Route53 메뉴의 대시보드에서 호스트 영역 생성을 클릭합니다.
이전 과정에서 등록한 도메인으로 sbrich.shop을 등록합니다.
호스팅 영역 Name Server의 값으로 도메인 등록사이트에서 네임서버설정에 입력합니다.

ns-1635.awsdns-12.co.uk
ns-289.awsdns-36.com
ns-867.awsdns-44.net
ns-1034.awsdns-01.org

네임서버 설정이 끝났다면, VPC를 등록합니다.


 

2. VPC 생성


이번 과저에서는 VPC 설정을 직접할 수도 있지만 VPC 마법사를 이용하여 생성해 보도록 하겠습니다. 실무에서도 VPC 마법사를 이용하면 다른 작업을 위해서 좀 더 간단하게 시간을 단축해서 설정을 할 수 있습니다.

2.1. EIP설정
탄력적 IP메뉴 페이지로 이동 
탄력적 IP주소할당 클릭합니다.

탄력적 IP주소 할당 클릭합니다.

(참고, EIP 하나를 할당하여 사용하는 것은 무료. 할당하지 않으면 유료. 2개째부터는 유료)


2.2. VPC 생성
퍼블릭 및 프라이빗 서브넷 선택

VPC 설정
퍼블릭 서브넷과 프라이빗 서브넷을 가용영역을 달리하고 생성한 탄력적IP도 할당하여 생성합니다.

VPC 생성이 완료되었습니다.

'new-vpc' 가 생성되었습니다.
(참고: NAT Gateway는 과금대상이고 EIP 연동 1건은 비과금입니다)

 


 

3. 라우팅 테이블 설정


라우팅 테이블 메뉴로 이동
명시적 서브넷 연결이 있는 'new-vpc'와 연결된 라우팅 테이블 클릭하고 라우팅 탭 클릭합니다.

Internet Gateway가 연결되어 있습니다. 'new-Public-RTB'로 태그명을 입력합니다.

프라이빗 라우팅 테이블도 확인합니다. 퍼블릭 라우팅 테이블은 인터넷 게이트웨이와 연동되어 있고 프라이빗 라우팅 테이블은 NAT 게이트웨이와 연동되어 있습니다.
(참고: 프라이빗 라우팅 테이블도 명시적 서브넷 연결이 가능합니다. 여러개의 라우팅 테이블이 있는 경우에는 퍼블릭 라우팅 테이블 1개 이상은 설정해야 합니다)
일반 VPC 등록 설정에서는 퍼블릭 라우팅 테이블에 퍼블릭서브넷을 연결해 주어야 합니다.
* 프라이빗 서브넷에 있는 RDS의 경우 퍼블릭 서브넷에 있는 NAT gateway와 연결하여 인터넷게이트웨이로 외부와 통신합니다.

 


4. NAT Gateway 생성

NAT gateway 메뉴에서 생성을 클릭하고 
태그명은 'new-nat', 서브넷은 '퍼블릿 서브넷2a', 연결유형은 'public', 탄력적IP할당ID에서는 탄력적IP할당 버튼을 클릭하여 생성한 후 NAT 게이트웨이 생성하기를 클릭합니다


프라이빗 서브넷2c에는 NAT Gateway가 할당됩니다.

이제 NAT gateway는 퍼블릭 서브넷2a에 있고 프라이빗 서브넷에 있는 RDS와 연결하여 (외부망으로) 통신합니다.


5. 인스턴스 시작

WordPress를 생성하는 작업입니다.
EC2 생성
  AMI : Amazon Linux 2 AMI
  리전 : 서울
  유형 : t2.micro
  네트워크 : 'new-vpc', 'new-Public-Subnet'
  사용자데이터 : 아래와 같이 입력합니다.

#!/bin/bash
yum installl -y httpd
systemctl enable --now httpd
echo "web server 1" > /var/www/html/index.html

  name tag : 'new-wordpress'
  보안그룹 : 새보안그룹 'new-sg-wp', SSH와 추가 HTTP, '모든ICMP-IP', 위치무관
  키페어 : 기존
  인스턴스 보기
  브라우저에서 퍼블릭ip로 webserver 표시 확인

 


6. DB생성

DB 서버는 외부에서 접속이 불가능하도록 private subnet에 생성합니다.

6.1. EC2 생성
  AMI : ubuntu server 18, type : 서울리전, t2.micro, 네트워크 : new-vpc, 서브넷 : 프라이빗-서브넷2c, 퍼블릭ip 활성화 : 활성화, name tag : 'new-mariadb', 새보안그룹 : 'new-SG-DB' / ssh / 모든-ICMP-IP(위치무관) / MySQL/Aurora(위치무관)
(참고 : 퍼블릭IP 자동활당 활성화 설정은 실습에서는 '비활성화'로 설정하여 사용)

6.2. EC2 IP 확인
new-wordpress : 3.36.72.4
new-mariadb (publicIP) : 15.164.228.44
new-mariadb (privateIP) : 192.168.1.245


6.3. 외부접속 도메인 등록
도메인 blog.sbrich.shop을 등록하도록 하겠습니다.
Route53 메뉴로 이동합니다. 호스팅 영역 sbrich.shop 도메인에서 레코드를 생성합니다.
레코드 생성에서 이름은 'blog.sbrich.shop', 레코드 유형은 'A-IPv4', 값(ip)는 wordpress ip(3.36.72.4)로 할당합니다.


'new-wordpress'에 web browser로 연결해 보겠습니다. 접속이 됩니다. 

ssh로도 연결해 보겠습니다.  먼저 'new-wordpress'로 연결한 후, 여기에서 mariadb로 (내부망)연결해보겠습니다.
키파일은 로컬에도 'new-wordpress' 인스턴스에도 있어야 합니다. 

6.4. mariaDB 설정

wordpress 접속
$ ssh -i "my-aws-train.pem" ec2-user@ec2-3-36-72-4.ap-northeast-2.compute.amazonaws.com
키파일을 'new-wordpress'에도 업로드를 했다면 파일접근권한을 변경하고 'new-mariadb'로 접속해 봅니다.

mariaDB 접속
$ ssh -i "my-aws-train.pem" ubuntu@192.168.1.245
키페어 퍼미션은 600, 외부연결이 불가하므로 내부망으로 연결합니다.

// MariaDB 설치 

# MariaDB 설치

$ sudo apt-get -y update
$ sudo apt-get -y install mariadb-server
$ sudo mysql_secure_installation
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
# 또는 $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address            = 127.0.0.1
<- locahost 이외의 wordpress서버 192.x.x.x에서 접속가능하도록

$ sudo systemctl restart mysql

# sudo mysql_secure_installation 설치시 질문과 답변
password validation plug-in : y, 
root password : aws0925
anonymous user : y
root login 외부허용불가? y
test database 액세스제거? y
reload privileage table ? y
$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
# 또는 $ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
파일 내에서 'bind-address 행에서 맨 앞 컬럼에 '#'로 주석처리 합니다.
(
bind-address 가 '127.0.0.1' 이면 local 접근허용합니다. 비활성화 하려면 '#' 추가하여 주석처리합니다)

wordpress 서버에서의 접속을 위해서 wordpress db를 생성합니다.
user, db, privileges 생성합니다.

$ sudo mysql -u root -p
CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass0925';
CREATE DATABASE IF NOT EXISTS wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
quit


#  quit 하기 전
# 1. database 확인
> show databases;
# 2. 생성한 사용자 확인
> use mysql;
database changed
> select user, host from user;
...
wpuser | localhost
...
> exit;
Bye

(실습에서는 외부 연결이 필요없으므로 NAT Gateway를제거합니다. 과금을 줄이기 위해서)
이제 mariadb에서
$ ping google.com
명령어를 실행하면 실패메세지가 표시됩니다.

(참고 : 과금부담을 줄이기 위해 탄력적 IP도 '릴리스'합니다. )
 NAT Gateway를 활용하려면 필요할 때 생성후 삭제하거나 
  라우팅 테이블 > 프라이빗라우팅 테이블에서 라우팅 탭으로 가서
  라우팅 편집 > 대상에서 "NAT ..." 제거 후  인터넷 게이트웨이를 설정. (임시방편 방법)
  (* 일시적으로 퍼블릭 서브넷 모드가 되도록 하여 사용합니다. 필요한 작업을 급히 하고 설정한 인터넷게이트웨어를 제거)

6.5. wordpress 설치
amazon에 있는 wordpress 설치를 참조해도 됩니다.
new-wordpress 서버로 이동

워드프레스 설치
$ sudo yum install -y httpd php php-mysql php-gd php-mbstring wget unzip mysql
$ sudo wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
$ cd /var/www/html
$ sudo unzip /home/ec2-user/wordpress-4.8.2-ko_KR.zip

# 소유자가 ec2-user에서 apache로 이동
$ sudo chown -R apache:apache wordpress
$ sudo systemctl restart httpd
$ sudo systemctl enable httpd

웹브라우저 http://본인 ip/wordpress


wordpress 웹사이트를 접속합니다. (url : http://3.36.72.4/wordpress )

wordpress 웹설정을 시작합니다.
let's go를 클릭

# 데이터베이스 호스트 (mariadb의 private ip)
dbname : wordpress
user : wpuser
pass : wppass0925
db host : 192.168.1.245
접두어는 : (변경없음) wp_

저장하기를 클릭합니다.

이제 설치 실행하기 페이지로 이동하여 입력란을 작성합니다.
사이트제목 : 'AWS실습' 
사용자명 : sbrich
비밀번호 : 
aws0925  <- 비밀번호는 절대로 database 계정과 어드민 계정과 같게 하지 마십시오
email : sobakcc@gmail.com
워드프레스 블로그 생성합니다.
url 로 "https://blog.sbrich.shop/wordpress"를 접속합니다.
워드프레스 블로그 생성


7. RDS 생성


DB생성에서 워드프레스와 데이터베이스간의 DB연동을 실습하였습니다. Database서버의 경우 외부망에 노출될 필요가 없기 때문에 내부망에서 퍼블릭서브넷에 있는 NAT Gateway를 통해서 외부에서 인바운드 통신을 하도록 하였습니다.
이번에는 아마존에서 제공하는 RDS를 통해서 실습해 보도록 하겠습니다.

7.1. 데이터베이스 생성
RDS 메뉴로 이동합니다. 대시보드에서 '데이터베이스 생성' 을 클릭합니다.
MySQL을 선택합니다.

실습에서는 버전 5.7.22를 선택하도록 하겠습니다(참고: 클라우드 서비스 프로바이더별로 지원 버전이 다릅니다)

데이터베이스명은 'database-1로 합니다.
계정의 경우, 실무에서는 마스터 계정을 다른 것으로 해야합니다.
   id : admin
   pass aws0925*   (db.t2.micro 750h 무료 프리티어)
   스토리지 자동 조정(Auto Scaling)
   가용성 및 내구성
    다중az 배포 : 다른 가용성(zone)에 복사 해서 관리
   연결
    Virtual Private Cloud(VPC) 설정  : new-VPC
    퍼블릭 액세스 : 아니오 (퍼블릭IP 비활성화. 내부망용도)
   VPC 보안 그룹 : "기존항목사용" 이미 db를 만든 환경이 있음
   기존 VPC 보안 그룹 : "new-SG-DB" 설정
   가용영역 : "ap-northeast-2c" 설정 (이전에 설정한 프라이빗 서브넷 가용영역)
   삭제방지 : 실무에서는 가능한 사용
   데이터베이스 생성
   ( DB생성이 완벽하지는 않습니다)

이제 데이터베이스를 생성합니다.
 데이터베이스 "database-1" 선택합니다. 연결&보안의 '엔드포인트' 값을 복사합니다.
 RDS DB EC2에는 ssh로 안됩니다.
  데이터베이스 "database-1" 선택
    연결&보안의 "엔드포인트" 값 복사 : database-1.cpumjmpbpai3.ap-northeast-2.rds.amazonaws.com
   (* db 비밀번호 일어버렸을 때 생성한 DB의 구성 탭으로 가서 수정하기를 합니다.

 


7.2. wordpress 설정

# wordpress ssh 연결에서 설정
$ sudo mysql -h database-1.cpumjmpbpai3.ap-northeast-2.rds.amazonaws.com -u admin -p
> CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wppass';
> CREATE DATABASE IF NOT EXISTS wordpress;
> GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'%';
> quit;

$ cd /var/www/html/wordpress
# 기존 파일은 만약을 위해 백업 
$ sudo mv wp-config.php wp-config.php.old


워드프레스 블로그가 생성되었습니다.
https://blog.sbrich.shop/wordpress 

 RDS 연결을 설정해야 합니다.
 database명 : wordpress
 사용자 : wpuser
 비밀번호 : wppass
  
DB host : database-1.cpumjmpbpai3.ap-northeast-2.rds.amazonaws.com
 접두어 : wp_
다음 설치에서
  (ping으로 database1 접속이 안됩니다)
  id : sbrich
  pass : aws0925* <- 비밀번호는 절대로 database 계정과 어드민 계정과 같게 하지 마십시오
  email : sobakcc@gmail.com

워드프레스 설정을 마쳤습니다.


http://3.36.72.4/wordpress/wp-admin/
= http://blog.sbrich.shop/wordpress/wp-admin/

AWS 인프라 구축 실습 5회 - RDS를 마치고 다음 EBS 과정으로 넘어갑니다.

 

 

반응형

댓글