수업을 듣고 배운 내용과 연습한 내용을 정리하였습니다
개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
잘못된 부분이 있거나 질문사항은 댓글로 남겨주시면 성심성의껏 답변해드리겠습니다. 감사합니다!
교재 <아마존 웹 서비스 AWS Discovery Book - 권영환 지음>를 토대로 실습을 진행하였습니다.
VPC, EC2, RDS, 보안그룹 등 기본설정은 구성됐다는 가정하에 진행하도록 하겠습니다.
* 실습요약
1. RDS 설정
2. EC2 설정
3. RDS DB 인스턴스에 Apache 웹 서버 연결
1. RDS 설정
RDS 서브넷 그룹을 생성합니다.
RDS DB 인스턴스 아래와 같은 설정으로 생성합니다.
위의 설정대로 만들면 10분 정도 후에 DB 인스턴스가 생성됩니다.
아래와 같이 엔드포인트 주소를 확인하실 수 있습니다.
2. EC2 설정
DB인스턴스를 만들었으니 이제 EC2에 접속하여 DB인스턴스에 접속하기 위한 작업을 하도록 하겠습니다.
먼저 Putty를 통해 EC2에 접속하여 PHP가 포함된 Apache 웹서버를 설치하도록 하겠습니다.
터미널에서 아래 명령을 차례대로 실행합니다.
$sudo yum update -y // 최신 버그 수정 및 보안 업데이트
$sudo yum install -y httpd php php-mysqlnd // PHP 소프트웨어 패키지가 포함된 Apache 웹 서버 설치
$sudo service httpd start // 웹 서버 실행
설치가 완료되면 인스턴스의 퍼블릭IP 주소를 웹브라우저 검색창에 접속합니다.
'웹 브라우저에서 EC2의 Apache 웹 서버가 정상적으로 설정되면 아래와 같이 [Test Page]가 출력됩니다.
"chkconfig" 명령을 사용하여 서버 부팅 시 웹 서버가 자동으로 시작될 수 있도록 설정합니다.
$sudo chkconfig httpd on // 서버 부팅 시 웹 서버 자동시작
지금 로그인 중인 ec2-user로 웹 서버의 기본 루트 페이지 파일을 수정 변경 가능하도록 설정하기 위해 /var/www 디렉터리의 소유권 및 권한을 변경합니다.
$sudo groupadd www
$sudo usermod -a -G www ec2-user
$exit
EC2에 재접속 후 다음 명령어를 입력하여 ec2-user가 group에 추가되었는지 확인합니다.
$groups
/var/www 디렉터리 및 해당 콘텐츠의 그룹 소유권을 www 그룹으로 변경합니다.
$sudo chown -R root:www /var/www
/var/www 및 그 하위 디렉터리의 권한을 변경해서 그룹 쓰기 권한을 추가하고, 나중에 생성 될 하위 디렉터리에서 그룹 ID를 설정합니다.
$sudo chmod 2775 /var/www
$find /var/www -type d -exec sudo chmod 2775 {} +
/var/www 및 하위 디렉터리의 파일 권한을 계속 변경해서 그룹 쓰기 권한을 추가합니다.
$find /var/www -type f -exec sudo chmod 0664 {} +
3. RDS DB 인스턴스에 Apache 웹 서버 연결
RDS DB 인스턴스에 연결되는 Apache 웹 서버에 콘텐츠를 추가합니다.
디렉터리를 /var/www로 변경하고 inc라는 새로운 하위 디렉터리를 생성합니다.
$cd /var/www
$mkdir inc
$cd inc
dbinfo.inc라는 파일을 생성한 다음 vi로 다음의 콘텐츠를 dbinfo.inc 파일을 추가합니다.
이 때, endpoint는 RDS MySQL DB 인스턴스의 엔드포인트이며, Master password는 자신이 설정한 DB 인스턴스의 마스터 암호입니다.
<?php
define('DB_SERVER', 'db_cluster_writer_endpoint');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');
?>
디렉터리를 /var/www/html로 변경합니다.
cd /var/www/html
SamplePage.php라는 html 디렉터리에서 새 파일을 생성한 다음 파일을 편집합니다.
DB_SERVER : RDS endpoint 주소
DB_DATABASE : sample
DB_USERNAME : tutorial_user
DB_PASSWORD : 자신이 지정한 암호
저같은 경우는 $connection = mysqli_connect('RDS endpoint 주소', 'tutorial_user', 'DB_PASSWORD');
아래 DB_DATABASE 부분에 sample 을 입력했습니다.
DB_SERVER, DB_USERNAME, DB_PASSWORD 에서는 따옴표('') 를 꼭 붙여야합니다.
<?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;
}
?>
퍼블릭 IP주소 뒤에 SamplePage.php를 붙이면 아래와 같이 정상적으로 작동되는 것을 확인할 수 있습니다.
이로써 웹서버와 RDS DB를 연동하는 실습을 진행하였습니다. 고생하셨습니다!!!
'클라우드 > AWS' 카테고리의 다른 글
Lambda와 S3로 이미지 썸네일 생성 (0) | 2021.04.08 |
---|---|
AWS OpsWorks for Chef Automate (1) | 2021.04.08 |
AWS S3와 Ubuntu gnuboard간 파일 자동 백업 (0) | 2021.03.10 |
AWS S3와 Window간 파일 자동 백업 (0) | 2021.03.08 |
AWS Solutions Architect - Associate (SAA) 자격 취득 (0) | 2021.03.05 |
댓글