Wisdom’s Cloud

[AWS] 12. Amazon RDS 본문

AWS/Beginner

[AWS] 12. Amazon RDS

지혜로운지혜쓰 2021. 2. 3. 13:02

구분 내용
서비스명 Amazon RDS(Relational Database Services)
설명 주로 사용되는 6개의 데이터베이스 엔진 중에서 선택할 수 있는 아마존 관계형 데이터베이스 서비스
주요 특징 - 관리 용이성: 인프라의 프로비저닝/DB 설치 및 유지 관리 불필요
- 뛰어난 확장성: 서비스 중단 없이 서버 및 스토리지 확장 가능
- 가용성 및 내구성: 안정성이 뛰어난 인프라 제공(멀티 AZ)
- 빠른 속도: SSD 지원 스토리지 옵션 및 고성능 OLTP에 최적화된 옵션과 비용 효율적 범용 사례에서 옵션 선택 가능
- 보안: 데이터베이스와 네트워크에 대한 액세스를 손쉽게 제어
프리티어(Free Tier) - MySQL, PostgreSQL, MariaDB, Oracle BYOL, SQL Server 지원
- RDS 단일 AZ db.t2.micro 인스턴스를 750시간 무료 사용
- 가입 후 12개월 이후에 종료됨

 

 

Amazon 클라우드 데이터베이스 서비스 선택 사항
  • 직접 운영: 본인이 사용하기 원하는 데이터베이스를 Amazon EC2에 직접 설치하여 운영할 수 있다.
  • AWS에서 제공하는 DB 서비스 이용: 관계형 데이터베이스 서비스인 Amazon RDS과 NoSQL 기반의 중단 없는 확장성을 제공하는 Amazon DynamoDB, 대용량 병렬 페타바이트급 데이터웨어 서비스를 제공할 수 있는 Amazon Redshift와 같은 다양한 데이터베이스 서비스를 이용하여 별도의 운영과 관리 없이 서비스의 용도 및 사용량에 따라 원하는 형태의 리소스를 선택할 수 있다.

 

 

RDS 주요 특징
  • 유연한 인스턴스 및 스토리지 확장
  • 손쉽게 사용 가능한 백업 및 복원 기능
  • 멀티 AZ를 통한 고가용성 확보
  • RDS 암호화 옵션을 통한 보완성 강화
  • Database Migration 서비스

 

 

실습: MySQL용 DB 인스턴스 생성, 클라이언트를 통한 DB 연결 및 삭제하기

step 1 MySQL DB 인스턴스 만들기

1. AWS 계정으로 로그인한 후 서비스 메뉴에서 데이터베이스의 [RDS]로 이동한다.
2. [데이터베이스] 메뉴를 클릭한 후 [데이터 생성] 버튼을 클릭한다.
3. 데이터베이스 생성 방식 선택에서 [표준 생성]을 선택하고 엔진 옵션에서는 [MySQL]을 선택한 후 하단의 옵션 선택 항목으로 이동한다.
4. 템플릿에서 [프리 티어]를 선택하고 설정의 DB 인스턴스 식별자는 그대로 "database-1"로 작성한 후 하단의 옵션 항목으로 이동한다.
5. 설정의 나머지 항목들도 각각 입력해준 후 하단의 옵션 항목으로 이동한다.
6. DB 인스턴스 크기에서 [버스터블 클래스(t 클래스 포함)]을 선택한 후 [db.t2.micro]를 선택한다.
7. 데이터베이스 생성 페이지에서 추가 옵션을 구성하기 위해 다음 항목에 대해 구성 작업을 수행한다.
8. [데이터베이스] 메뉴를 눌러 신규 생성한 RDS 인스턴스를 클릭하면 다음과 같이 생성 완료된 인스턴스를 확인할 수 있다.


step 2 SQL 클라이언트 다운로드 및 DB 연결하기

1. MySQL Workbench를 다운로드 받기 위해 https://dev.mysql.com/downloads/workbench 페이지로 이동한 후 본인 PC의 플랫폼 사양에 맞는 프로그램을 선택하고 [Go to Download Page] 버튼을 클릭한다.
2. 로그인 페이지에서 하단의 [아니요, 다운로드를 시작하세요.]를 클릭한다.
3. PC로 다운받은 프로그램 설치 작업을 수행한다.
4. 설치 완료된 프로그램을 실행한 후 [MySQL Connection] 버튼을 클릭한다.
5. Setup New Connection 페이지에서 Connection Name을 입력하고, RDS 연결을 위한 IP 확인을 위해 [AWS RDS] 페이지로 이동한다.
6. RDS 연결을 위한 [엔드포인트]를 확인한다.
7. Hostname에 RDS 엔드포인트의 정보를 입력하고 Username에 RDS 생성 시 사용한 마스터 사용자를 입력한 후 [Test Conncection] 버튼을 눌러 연결 테스트를 수행한다.
8. 마스터 암호를 입력한 후 연결 테스트가 정상적으로 완료되었다면 [OK] 버튼을 눌러 연결 정보를 저장한다.
9. 생성된 연결 정보를 클릭해 DB 인스턴스에 접속하면 데이터베이스에 연결된다.

* MySQL Workbench에서는 데이터베이스에서 사용할 수 있는 다양한 스키마 객체가 제공된다.
이제 테이블 생성을 시작하고, 데이터를 삽입하고, 쿼리를 실행할 수 있다. *

 


step 3 DB 인스턴스 삭제

1. 데이터베이스 페이지에서 [작업]의 [삭제]를 클릭하면 MySQL DB 인스턴스를 삭제할 수 있다.
2. 삭제 확인 페이지에서 "최종 스냅샷 생성 여부"의 체크를 해지하고 "인스턴스 삭제 시~"를 체크한 후 아래 항목에 "delete me"를 입력하고 [삭제] 버튼을 클릭한다.
3. 데이터베이스의 상태가 "삭제 중"으로 변경되었고 삭제 작업이 진행된다.

 

 

실습: 웹 서버에서 실행되는 PHP 애플리케이션에 MySQL 데이터베이스 연결하기

step 1 RDS 네트워크 및 보안 설정

1. RDS DB 인스턴스를 VPC에서 사용하기 위한 RDS DB 서브넷 그룹을 생성하기 위해 VPC의 서브넷 메뉴에서 [서브넷 생성] 버튼을 클릭한다.
2. 서브넷 생성 페이지에서 다음과 같이 입력한 후 [생성] 버튼을 클릭한다.

- 서브넷 이름: Tutorial private 2
- VPC ID: vpc-014ee353003e38ff3 | tutorial-vpc(이전에 생성한 VPC)
- 가용 영역: ap-northeast-2c(이전에 선택한 가용 영역과 다른 가용 영역)
- IPv4 CIDR 블록: 10.0.2.0/24

 

3. 보안 그룹 설정을 위해 EC2의 보안 그룹 메뉴에서 [보안 그룹 생성] 버튼을 클릭한다.
4. 보안 그룹 생성 페이지에서 다음의 정보를 참조하여 기본 세부 정보를 입력하고, 규칙 추가를 통해 "SSH, 내 IP", "HTTP, 0.0.0.0/0"으로 인바운드 규칙을 추가하고 [보안 그룹 생성] 버튼을 클릭한다.

- 보안 그룹 이름: tutorial-securitygroup
- 설명: Tutorial Security Group
- VPC: vpc-014ee353003e38ff3 | tutorial-vpc(이전에 생성한 VPC)

 

5. RDS용 보안 그룹 생성을 위해 [보안 그룹 생성] 버튼을 클릭한 후 다음의 정보를 참조하여 입력한다. 그리고 인바운드 규칙에서 "MYSQL/Aurora"를 선택한 후 소스로 바로 "이전에 생성한 보안 그룹 ID"를 확인 후 추가하여 규칙을 생성한다.

- 보안 그룹 이름: tutorial-db-securitygroup
- 설명: tutorial-db-securitygroup
- VPC: vpc-014ee353003e38ff3 | tutorial-vpc(이전에 생성한 VPC)

 

6. RDS 서브넷 그룹 생성을 위해 RDS의 서브넷 그룹 메뉴에서 [DB 서브넷 그룹 생성] 버튼을 클릭한다.
7. DB 서브넷 그룹 생성 페이지에서 다음과 같이 정보를 입력한다.

- 이름: tutorial-db-subnet-group
- 설명: tutorial-db-subnet-group
- VPC: vpc-014ee353003e38ff3 | tutorial-vpc(이전에 생성한 VPC)

 

8. 서브넷 추가 항목에서 [가용 영역]에 사용 가능한 가용 영역을 모두 선택하고, [서브넷]에서 사용 가능한 서브넷을 모두 선택 후 [생성] 버튼을 클릭한다.


step 2 RDS DB 인스턴스 생성하기

1. RDS의 데이터베이스 메뉴에서 [데이터베이스 생성] 버튼을 클릭한다.
2. 데이터베이스 생성 방식 선택에서 [표준 생성]을 선택하고 엔진 옵션에서 [MySQL]을 선택한다. 그리고 버전 정보에서 [MySQL 8.0.20]을 선택하고 템플릿에서 [프리 티어]를 선택한다.
3. 설정에서 DB 인스턴스 식별자와 DB용 마스터 ID와 암호를 입력한 후 하단의 다음 항목으로 이동한다.

- DB 인스턴스 식별자: tutorial-db-Instance
- 마스터 사용자 이름: tutorial_user
- 마스터 암호: 비밀번호

 

4. 연결에서 VPC는 이전에 구성한 "tutorial-vpc"를 선택하고 VPC 보안 그룹은 [기존 항목 선택]을 누른 후 기존 VPC 보안 그룹 선택 창에서 "tutorial-db-securitygroup"을 선택한다.
5. 추가 구성에서 초기 데이터베이스 이름에 "sample"을 입력한 후 하단의 [데이터베이스 생성] 버튼을 누른다.
6. 데이터베이스로 이동한 후 엔드포인트를 확인한다.


step 3 PHP가 포함된 Apache 웹 서버 설치

1. EC2의 인스턴스 메뉴에서 [인스턴스 시작] 버튼을 클릭하여 다음 페이지에서 Amazon Linux AMI (HVM), SSD Volume Type의 [선택] 버튼을 클릭한다.

* Amazon Linux 2 AMI에는 지금 실습에서 필요한 소프트웨어 패키지가 없으므로
오른쪽 메뉴에서 커뮤티니 AMI의 맨 아래에 위치한 Amazon Linux AMI 2018.03.0를 선택해야 한다!!! *

 

 

2. 다음 페이지에서 [t2.micro]를 선택한 후 [다음: 인스턴스 세부 정보 구성] 버튼을 클릭한다.
3. 네트워크에서 [tutorial-vpc]를 선택하고 서브넷은 [tutorial public], 퍼블릭 IP 자동 할당은 [활성화]를 선택한 후 [검토 및 시작] 버튼을 클릭한다.
4. [시작하기] 버튼을 누르고 [기존 키 페어 선택]을 누른 후 하단 체크 박스 선택하고 [인스턴스 시작] 버튼을 누른다.
5. 인스턴스 생성 완료 후 마우스 오른쪽 버튼을 클릭하여 [보안]에서 [보안 그룹 변경]을 클릭한다.
6. 보안 그룹 중 [tutorial securitygroup]를 추가한 후 [저장] 버튼을 클릭한다.
7. PuTTy를 실행한 후 EC2의 IP를 입력하여 접속한다. 그리고 "login as: ec2-user"를 입력하여 로그인한다.
8. PHP 소프트웨어 패키지가 포함된 Apache 웹 서버를 설치한다. 이 명령은 여러 소프트웨어 패키지와 관련 종속 프로그램을 동시에 설치한다.

$ sudo yum install -y httpd24 php56 php56-mysqlnd

 

9. 다음 명령을 사용하여 웹 서버를 시작한다.
10. 인스턴스 세부 정보에서 [퍼블릭 IPv4 DNS] 항목의 DNS 정보를 복사 후 웹 사이트 접속 여부를 확인한다.
11. 웹 브라우저에서 EC2의 Apache 웹 서버가 정상적으로 설정되면 다음과 같이 Test Page가 출력된다.
12. SSH Console로 이동 후 다음과 같이 "chkconfig" 명령을 사용하여 서버 부팅 시 웹 서버가 자동으로 시작될 수 있도록 설정한다.
13. 지금 로그인 중인 ec2-user로 웹 서버의 기본 루트 페이지 파일을 수정 변경 가능하도록 설정하기 위해 /var/www 디렉터리의 소유권 및 권한을 변경해야 한다. 다음의 명령을 사용해서 www라는 그룹을 추가하고 /var/www에 대한 소유권과 권한을 부여한다. 이후 EC2를 SSH console로 다시 접속한다.
14. EC2에 재접속 후 다음 명령어를 입력하여 ec2-user가 group에 추가되었는지 확인한다.
15. /var/www 디렉터리 및 해당 콘텐츠의 그룹 소유권을 www 그룹으로 변경한다.
16. /var/www 및 그 하위 디렉터리의 권한을 변경해서 그룹 쓰기 권한을 추가하고, 나중에 생성될 하위 디렉터리에서 그룹 ID를 설정한다.
17. /var/www 및 하위 디렉터리의 파일 권한을 계속 변경해서 그룹 쓰기 권한을 추가한다.


step 4 RDS DB 인스턴스에 Apache 웹 서버 연결

1. EC2 인스턴스에 계속 연결되어 있을 때 디렉터리를 /var/www로 변경하고 inc라는 새로운 하위 디렉터리를 생성한다.
2. inc 디렉터리에서 dbinfo.inc라는 새 파일을 생성한 다음 nano를 호출하여 파일을 편집한다.
3. 다음 콘텐츠를 dbinfo.inc 파일에 추가한다. 이때, endpoint는 RDS MySQL DB 인스턴스의 엔드포인트며, master password는 RDS MySQL DB 인스턴스의 마스터 암호다. 본인의 MySQL 접속 정보를 추가하여 입력 후 Ctrl + X 후 Y를 눌러 정보를 저장한다.
4. html 디렉터리에서 SamplePage.php라는 새 파일을 생성한 다음 nano를 호출하여 파일을 편집한다. 그리고 다음의 콘텐츠를 SamplePage.php 파일에 추가한다.

<?php include "../inc/dbinfo.inc"; ?>
<html>
<body>
<h1>Sample page</h1>
<?php

/* Connect to MySQL and select the database. */
$connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);

if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error();

$database = mysqli_select_db($connection, DB_DATABASE);

/* Ensure that the EMPLOYEES table exists. */
VerifyEmployeesTable($connection, DB_DATABASE);

/* If input fields are populated, add a row to the EMPLOYEES table. */
$employee_name = htmlentities($_POST['NAME']);
$employee_address = htmlentities($_POST['ADDRESS']);

if (strlen($employee_name) || strlen($employee_address)) {
AddEmployee($connection, $employee_name, $employee_address);
}
?>

<!-- Input form -->
<form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST">
<table border="0">
<tr>
<td>NAME</td>
<td>ADDRESS</td>
</tr>
<tr>
<td>
<input type="text" name="NAME" maxlength="45" size="30" />
</td>
<td>
<input type="text" name="ADDRESS" maxlength="90" size="60" />
</td>
<td>
<input type="submit" value="Add Data" />
</td>
</tr>
</table>
</form>

<!-- Display table data. -->
<table border="1" cellpadding="2" cellspacing="2">
<tr>
<td>ID</td>
<td>NAME</td>
<td>ADDRESS</td>
</tr>

<?php

$result = mysqli_query($connection, "SELECT * FROM EMPLOYEES");

while($query_data = mysqli_fetch_row($result)) {
echo "<tr>";
echo "<td>",$query_data[0], "</td>",
"<td>",$query_data[1], "</td>",
"<td>",$query_data[2], "</td>";
echo "</tr>";
}
?>

</table>

<!-- Clean up. -->
<?php

mysqli_free_result($result);
mysqli_close($connection);

?>

</body>
</html>

<?php

/* Add an employee to the table. */
function AddEmployee($connection, $name, $address) {
$n = mysqli_real_escape_string($connection, $name);
$a = mysqli_real_escape_string($connection, $address);

$query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');";

if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>"); }

/* Check whether the table exists and, if not, create it. */
function VerifyEmployeesTable($connection, $dbName) {
if(!TableExists("EMPLOYEES", $connection, $dbName))
{
$query = "CREATE TABLE EMPLOYEES (
ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(45),
ADDRESS VARCHAR(90) )";

if(!mysqli_query($connection, $query))echo("<p>Error creating table.</p>");
}
}

/* Check for the existence of a table. */
function TableExists($tableName, $connection, $dbName) {
$t = mysqli_real_escape_string($connection, $tableName);
$d = mysqli_real_escape_string($connection, $dbName);

$checktable = mysqli_query($connection,
"SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'");

if(mysqli_num_rows($checktable) > 0) return true;

return false;
}
?>

 

5. 웹 서버를 열고 http://ec2-3-35-176-130.ap-northeast-2.compute.amazonaws.com/SamplePage.php에 접속하여 SamplePage에서 이름과 주소를 등록하고 조회하는 기능이 정상 동작하는지 여부를 확인한다.

'AWS > Beginner' 카테고리의 다른 글

[AWS] 14. Amazon Route 53  (0) 2021.02.14
[AWS] 13. 클라우드 용어 정리(5)  (0) 2021.02.04
[AWS] 11. 클라우드 용어 정리(4)  (0) 2021.01.26
[AWS] 10. Amazon VPC  (0) 2021.01.20
[AWS] 9. 클라우드 용어 정리(3)  (0) 2021.01.20