✔︎ RDS 데이터베이스 구축하기
앞서 진행한 VPC 구성에 이어서 RDS 데이터베이스를 구축해본다.
다음은 결과물 구성도이다.
RDS 구축은 고가용성을 위해 가용 영역이 2개 이상 필요하다.
구성도와는 다르게 VPC peering을 이용해 각 다른 Region에 구성된 Public Subnet과 Private Subnet 을 연결한다.
안전한 통신을 위해서는 보안 그룹을 통해 인바운드, 아웃바운드 네트워크를 설정해야 한다.
우선 RDS 인스턴스 이용과 직접 환경 구축하는 방법의 차이를 이해하기 위해 각 인스턴스에 직접 DB client, server를 구축해본다.
Region A에 만들어놨던 인스턴스로 진행할 것이며 하나의 인스턴스 (db-server 역할)를 더 생성할 것이다.
Region A에 생성할 인스턴스의 구성은 다음과 같다.
public subnet - webserver, dbclient (mariadb)
private subnet - dbserver (mariadb-server)
인스턴스 생성은 OS 설치가 되어있는 것이고 우리가 직접 DBMS 설치, DB table 생성, data CRUD를 조작한다.
RDS : OS + DBMS + table생성, data 관리
------------ --------------------
AWS 관리 영역 사용자 영역
✔︎ 인스턴스 생성
인스턴스를 생성한다.
db-server 인스턴스는 private subnet에 구성했으므로 기존의 public subnet에서 발급 받은 키를 이용해 private IP로 접근한다.
db-server 인스턴스에 접속을 완료했으면 mariadb-server 및 mariadb(client 역할)을 설치한다.
설치가 완료됐으면 mysql_secure_installation 설정을 진행한다.
[ec2-user@ip-10-0-137-75 ~]$ sudo yum install -y mariadb-server mariadb
...
Complete!
[ec2-user@ip-10-0-137-75 ~]$ rpm -qa mariadb-server
mariadb-server-5.5.68-1.amzn2.x86_64
[ec2-user@ip-10-0-137-75 ~]$ rpm -ql mariadb-server
[ec2-user@ip-10-0-137-75 ~]$ sudo systemctl start mariadb
[ec2-user@ip-10-0-137-75 ~]$ sudo systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[ec2-user@ip-10-0-137-75 ~]$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n
... skipping.
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
[ec2-user@ip-10-0-137-75 ~]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]>
원격 접속을 허용하기 위해 권한을 추가한다.
MariaDB [(none)]> SELECT host FROM mysql.user WHERE user = "root";
+-----------------------------+
| host |
+-----------------------------+
| 127.0.0.1 |
| ::1 |
| ip-10-0-137-75.ec2.internal |
| localhost |
+-----------------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> grant all privileges on *.* to root@'10.0.%' identified by 'wwqr3466';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
웹 서버로 돌아와서 mariadb(client)를 설치한다.
이후 원격 접속을 진행한다.
MariaDB [(none)]> exit
Bye
[ec2-user@ip-10-0-137-75 ~]$ exit
logout
Connection to 10.0.137.75 closed.
[ec2-user@ip-10-0-0-61 ~]$ sudo yum install -y mariadb
[ec2-user@ip-10-0-0-61 ~]$ mysql -u root -p -h 10.0.137.75 # db-server의 (private) ip 주소
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
✔︎ RDS 데이터베이스 구축하기
우선 RDS 데이터베이스 구축을 처음 해보거나 단순히 RDS 구축을 시도해보고 싶다면 아래의 내용을 따라한다.
기본 VPC에 RDS를 구축해 볼 것이므로 실제 사용의 용도로는 보안의 위험이 있다.
데이터베이스 생성을 클릭하면 몇분의 시간이 소요된다.
RDS 인스턴스 생성이 완료되면 엔드포인트를 통해 접근할 수 있다.
인스턴스 생성이 완료되고 엔드포인트로 접속을 시도하면 접속되지 않는다.
인바운드 규칙을 추가하면 정상적으로 접속되는 것을 확인할 수 있다.
RDS용 보안 그룹 생성
리소스 정리하기
database-test 인스턴스를 삭제하고 DB 서브넷 그룹을 삭제한다.
보안을 추가한 RDS 구축하기
RDS의 보안을 위해서는 VPC는 default가 아닌 사용자 생성 VPC를 생성한 뒤 사용해야 한다.
새로운 DB 서브넷 그룹을 생성한다.
RDS 인스턴스를 다시 생성한다.
EC2 인스턴스 생성
현재 private 서브넷의 가용 영역 a에 RDS 원본이 있고 b에 RDS 복제본이 있기 때문에 웹 서버는 public1이나 2로 설정한다.
웹 서버이므로 퍼블릭 IP 자동 할당을 활성화시켜준다.
만들어 놓은 "1-web-allow" 보안 그룹을 사용한다.
접속 완료 후 다음 명령어 순서대로 실행
sudo yum update -y
sudo yum install -y httpd24 php56 php56-mysqlnd
sudo service httpd start
# 서버 부팅 시에 웹 서버가 자동으로 시작되도록 설정
sudo chkconfig httpd on
# 로그인 중인 ec2-user로 웹 서버의 기본 루트 페이지 파일을 수정 변경 가능하도록 설정하기 위해
# /var/www 디렉토리의 소유권 및 권한을 변경해야 한다.
# 다음 명령을 사용해 www라는 그룹을 추가하고 /var/www에 대한 소유권과 권한을 부여한다.
sudo groupadd www
sudo usermod -aG www ec2-user
# 재접속
exit
# ec2-user가 그룹에 추가되었는지 확인한다.
groups
# /var/www 디렉토리 및 해당 콘텐츠의 그룹 소유권을 www 그룹으로 변경한다.
sudo chown -R root:www /var/www
# /var/www/ 및 그 하위 디렉토리의 권한을 변경해 그룹 쓰기 권한을 추가하고,
# 나중에 생성될 하위 디렉토리에서 그룹 ID를 설정한다.
sudo chmod 2775 /var/www
sudo find /var/www -type d -exec sudo chmod 2775 {} \;
# /var/www 및 하위 디렉토리의 파일 권한을 계속 변경해서 그룹 쓰기 권한을 추가한다.
sudo find /var/www -type f -exec sudo chmod 0664 {} \;
# EC2 인스턴스에 계속 연결되어 있을 때 디렉토리를 /var/www로 변경하고
# inc라는 새로운 하위 디렉토리를 생성한다.
cd /var/www
mkdir inc
cd inc
# 에디터로 편집한다.
vim dbinfo.inc
아래의 내용을 작성한다.
'DB_SERVER' 는 RDS의 엔드포인트를
'DB_USERNAME' 은 RDS 데이터베이스의 사용자명을
'DB_PASSWORD'는 데이터베이스 암호를
'DB_DATABASE'는 초기 데이터베이스 이름으로 대체한다.
# 디렉토리를 변경하고
cd /var/www/html
# SamplePage.php 파일을 생성한다.
sudo vim SamplePage.php
https://gist.github.com/thosuperman/cbf1eeb9fe62c4840db96d90398230cf
해당 깃헙에서 소스 코드를 복사해 붙여넣는다.
EC2 인스턴스 엔드포인트로 접속하면 정상 동작한다.
'Public Cloud > AWS' 카테고리의 다른 글
[AWS] nginx, Phusion Passenger 설치 및 서비스 구현 (0) | 2022.04.01 |
---|---|
[AWS] Dynamo DB CRUD (0) | 2022.03.31 |
[AWS] VPC peering 구성하기 (0) | 2022.03.31 |
[AWS] VPC 마법사로 네트워크 설정하기 (0) | 2022.03.31 |
[AWS] VPC 네트워크 수동으로 설정하기 (0) | 2022.03.30 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!