메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

2단계: EC2 인스턴스 생성 및 웹 서버 설치

이 단계에서는 1단계: RDS DB 인스턴스 만들기에서 생성한 Amazon RDS DB 인스턴스에 연결할 웹 서버를 생성합니다.

EC2 인스턴스 시작

먼저 VPC의 퍼블릭 서브넷에서 Amazon EC2 인스턴스를 생성합니다.

EC2 인스턴스를 시작하려면

  1. AWS Management Console에 로그인한 다음 https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 다음과 같이 [EC2 Dashboard]를 선택한 다음, [Launch Instance]를 선택합니다.

     EC2 대시보드
  3. 다음과 같이 Amazon Linux Amazon 머신 이미지(AMI)를 선택합니다.

    Amazon 머신 이미지 선택
  4. 다음과 같이 [t2.micro] 인스턴스 유형을 선택한 다음, [Next: Configure Instance Details]를 선택합니다.

     인스턴스 유형 선택
  5. [Configure Instance Details] 페이지에서 다음과 같이 값을 설정하고 다른 값은 기본값으로 유지합니다.

     [Configure Instance Details]
  6. [Next: Add Storage]를 선택합니다.

  7. Add Storage 페이지에서 기본값을 유지하고 Next: Tag Instance를 선택합니다.

  8. 다음과 같이 [Tag Instance] 페이지에서 [Create Tag]를 선택하고 Name 태그의 [Value]를 tutorial-web-server로 설정한 다음 [Next: Configure Security Group]을 선택합니다.

     [Tag Instance]
  9. 다음과 같이 [Configure Security Group] 페이지에서 [Select an existing security group]을 선택한 다음 퍼블릭 웹 서버에 대해 VPC 보안 그룹 생성에서 생성된 tutorial-securitygroup과 같이 기존 보안 그룹을 선택합니다. 보안 그룹은 SSH 및 HTTP 액세스를 위한 인바운드 규칙을 포함해야 합니다.

     [Configure Security Group]
  10. [Review and Launch]를 선택합니다.

  11. 다음과 같이 [Review Instance Launch] 페이지에서 설정을 확인한 다음 [Launch]를 선택합니다.

     [Review Instance Launch]
  12. 다음과 같이 [Select an existing key pair or create a new key pair] 페이지에서 [Create a new key pair]를 선택하고 [Key pair name]을 [tutorial-key-pair]로 설정합니다. [Download Key Pair]를 선택하고 로컬 시스템에 키 페어 파일을 저장합니다. 이 키 페어 파일을 사용하여 EC2 인스턴스에 연결하게 됩니다.

     기존 키 페이 선택 또는 새 키 페어 생성
  13. EC2 인스턴스를 시작하려면 [Launch Instances]를 선택합니다. 다음과 같이 [Launch Status] 페이지에서, 새 EC2 인스턴스의 식별자(예: i-7abfcfb8)를 기록해 둡니다.

     [Launch Status]
  14. 인스턴스를 찾으려면 [View Instances]를 선택합니다.

  15. 인스턴스의 [Instance Status]가 running으로 읽힐 때까지 기다린 다음 계속합니다.

PHP와 함께 Apache 웹 서버 설치

이제 EC2 인스턴스에 연결하고 웹 서버를 설치합니다.

EC2 인스턴스에 연결하고 PHP가 포함된 Apache 웹 서버를 설치하는 방법

  1. 앞에서 만든 EC2 인스턴스에 연결하려면 인스턴스에 연결에 있는 단계를 따릅니다.

  2. 최신 버그 수정 및 보안 업데이트를 얻으려면 다음 명령을 사용하여 EC2 인스턴스의 소프트웨어를 업데이트하십시오.

    참고

    -y 옵션을 사용하면 확인 여부를 묻지 않고 업데이트를 설치합니다. 설치 전에 업데이트 정보를 확인하려면 이 옵션을 생략합니다.

    Copy
    [ec2-user ~]$ sudo yum update –y
  3. 업데이트 완료 후 yum install 명령을 사용하여 PHP 소프트웨어 패키지가 포함된 Apache 웹 서버를 설치합니다. 이 명령은 여러 소프트웨어 패키지와 관련 종속 프로그램을 동시에 설치합니다.

    Copy
    [ec2-user ~]$ sudo yum install -y httpd24 php56 php56-mysqlnd
  4. 다음 명령을 사용하여 웹 서버를 시작합니다.

    Copy
    [ec2-user ~]$ sudo service httpd start

    EC2 인스턴스의 퍼블릭 DNS 이름을 웹 브라우저의 주소 표시줄에 입력(예: http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com)해 보면 웹 서버가 제대로 설치되어 시작되었는지 테스트할 수 있습니다. 웹 서버가 실행되고 있으면 Apache 테스트 페이지가 표시됩니다. Apache 테스트 페이지가 표시되지 않으면 자습: Amazon RDS DB 인스턴스에 사용할 Amazon VPC 생성에서 생성한 VPC 보안 그룹의 인바운드 규칙에, 웹 서버에 연결할 때 사용하는 IP 주소에 대해 HTTP(포트 80) 액세스를 허용하는 규칙이 포함되어 있는지 확인하십시오.

    참고

    Apache 테스트 페이지는 문서의 루트 디렉터리 /var/www/html에 콘텐츠가 없는 경우에만 표시됩니다. 문서의 루트 디렉터리에 콘텐츠를 추가한 후에는 콘텐츠가 Apache 테스트 페이지 대신 EC2 인스턴스의 퍼블릭 DNS 주소에 나타납니다.

  5. chkconfig 명령을 사용하여 웹 서버가 시스템 부팅 때마다 시작되도록 구성합니다.

    Copy
    [ec2-user ~]$ sudo chkconfig httpd on

ec2-user가 Apache 웹 서버의 기본 루트 디렉터리에 있는 파일을 관리할 수 있도록 하려면 /var/www 디렉터리의 소유권 및 권한을 변경해야 합니다. 본 자습서에서는 www라는 그룹을 EC2 인스턴스에 추가한 다음, /var/www 디렉터리의 해당 그룹 소유권을 부여하고 해당 그룹의 쓰기 권한을 추가하게 됩니다. 해당 그룹의 모든 멤버는 웹 서버에 대해서 파일의 추가, 삭제, 수정을 할 수 있습니다.

Apache 웹 서버에 대한 파일 권한 설정 방법

  1. 다음 명령을 사용하여 www 그룹을 EC2 인스턴스에 추가합니다.

    Copy
    [ec2-user ~]$ sudo groupadd www
  2. ec2-user 사용자를 www 그룹에 추가합니다.

    Copy
    [ec2-user ~]$ sudo usermod -a -G www ec2-user
  3. 권한을 새로 고치고 새 www 그룹을 포함하려면 로그아웃합니다.

    Copy
    [ec2-user ~]$ exit
  4. 다시 로그인한 다음, groups 명령을 사용하여 www 그룹이 있는지 확인합니다.

    Copy
    [ec2-user ~]$ groups ec2-user wheel www
  5. /var/www 디렉터리 및 해당 콘텐츠의 그룹 소유권을 www 그룹으로 변경합니다.

    Copy
    [ec2-user ~]$ sudo chown -R root:www /var/www
  6. /var/www 및 그 하위 디렉터리의 디렉터리 권한을 변경해서 그룹 쓰기 권한을 추가하고 나중에 생성될 하위 디렉터리에서 그룹 ID를 설정합니다.

    Copy
    [ec2-user ~]$ sudo chmod 2775 /var/www [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} +
  7. /var/www 및 하위 디렉터리의 파일 권한을 계속 변경해서 그룹 쓰기 권한을 추가합니다.

    Copy
    [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} +

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

이제 Amazon RDS DB 인스턴스에 연결되는 Apache 웹 서버에 콘텐츠를 추가합니다.

RDS DB 인스턴스에 연결되는 Apache 웹 서버에 콘텐츠를 추가하는 방법

  1. EC2 인스턴스에 계속 연결되어 있을 때 디렉터리를 /var/www로 변경하고 inc라는 새로운 하위 디렉터리를 생성합니다.

    Copy
    [ec2-user ~]$ cd /var/www [ec2-user ~]$ mkdir inc [ec2-user ~]$ cd inc
  2. dbinfo.inc라는 inc 디렉터리에서 새 파일을 생성한 다음 nano 또는 선택한 편집기를 호출하여 파일을 편집합니다.

    Copy
    [ec2-user ~]$ >dbinfo.inc [ec2-user ~]$ nano dbinfo.inc
  3. 다음 콘텐츠를 dbinfo.inc 파일에 추가합니다. 이때, endpoint는 RDS MySQL DB 인스턴스의 엔드포인트(포트 없음)이며, master password는 RDS MySQL DB 인스턴스의 마스터 암호입니다.

    참고

    웹 서버의 문서 루트에 포함되지 않는 폴더에 사용자 이름 및 암호 정보를 저장해야 보안 정보가 노출될 가능성을 줄일 수 있습니다.

    Copy
    <?php define('DB_SERVER', 'endpoint'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'master password'); define('DB_DATABASE', 'sample'); ?>
  4. dbinfo.inc 파일을 저장하고 닫습니다.

  5. 디렉터리를 /var/www/html로 변경합니다.

    Copy
    [ec2-user ~]$ cd /var/www/html
  6. SamplePage.php라는 html 디렉터리에서 새 파일을 생성한 다음 nano 또는 선택한 편집기를 호출하여 파일을 편집합니다.

    Copy
    [ec2-user ~]$ >SamplePage.php [ec2-user ~]$ nano SamplePage.php
  7. 다음 콘텐츠를 SamplePage.php 파일에 추가합니다.

    참고

    웹 서버의 문서 루트에 포함되지 않는 폴더에 사용자 이름 및 암호 정보를 저장해야 보안 정보가 노출될 가능성을 줄일 수 있습니다.

    Copy
    <?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) NOT NULL AUTO_INCREMENT, `Name` varchar(45) DEFAULT NULL, `Address` varchar(90) DEFAULT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `ID_UNIQUE` (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1"; 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; } ?>
  8. SamplePage.php 파일을 저장하고 닫습니다.

  9. 웹 서버를 열고 http://EC2 instance endpoint/SamplePage.php(예: http://ec2-55-122-41-31.us-west-2.compute.amazonaws.com/SamplePage.php)를 검색하여 웹 서버에서 RDS MySQL DB 인스턴스에 제대로 연결되는지 확인합니다.

SamplePage.php를 사용하여 RDS MySQL DB 인스턴스에 데이터를 추가할 수 있습니다. 그러면 추가한 데이터가 페이지에 표시됩니다.

RDS MySQL DB 인스턴스를 가능한 최고로 보안하려면 VPC 외부의 소스가 RDS MySQL DB 인스턴스에 연결할 수 없도록 하십시오.