メニュー
Amazon Relational Database Service
ユーザーガイド (API Version 2014-10-31)

ステップ 2: EC2 インスタンスの作成とウェブサーバーのインストール

このステップでは、「ステップ 1: RDS DB インスタンスの作成」で作成した Amazon RDS DB インスタンスに接続するウェブサーバーを作成します。

EC2 インスタンスの起動

最初に、VPC のパブリックサブネットで Amazon EC2 インスタンスを作成します。

EC2 インスタンスを起動するには

  1. AWS マネジメントコンソールにサインインをしたあと、https://console.aws.amazon.com/ec2/ にある Amazon EC2 コンソールを開きます。

  2. 次に示すように、[EC2 Dashboard] を選択し、次に [Launch Instance] を選択します。

     EC2 ダッシュボード
  3. 次に示すように、[Amazon Linux] Amazon Machine Image (AMI) を選択します。

     Amazon Machine Image の選択
  4. 次に示すように、t2.micro インスタンスタイプを選択し、次に [Next: Configure Instance Details] を選択します。

     インスタンスタイプの選択
  5. 次に示すように、[Configure Instance Details] ページで次の値を設定し、他の値はデフォルトのままにします。

     インスタンスの詳細の設定
  6. [次の手順: ストレージの追加] を選択します。

  7. [Add Storage] ページで、デフォルト値のまま [Next: Tag Instance] を選択します。

  8. 次に示すように、[インスタンスのタグ付け] ページで [タグの作成] を選択し、Name タグの [] には tutorial-web-server を設定し、続いて [Next: Configure Security Group] を選択します。

     インスタンスのタグ付け
  9. 以下に示す [セキュリティグループの設定] ページで、[既存のセキュリティグループを選択する] を選択し、 パブリックウェブサーバーの VPC セキュリティグループを作成する で作成された tutorial-securitygroup のような既存のセキュリティグループを選択します。セキュリティグループには、SSH および HTTP アクセス用にインバウンドルールを含める必要があります。

     セキュリティグループの設定
  10. [Review and Launch] を選択します。

  11. 次に示すように、[Review Instance Launch] ページで設定を確認して、[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 インスタンスの ID (例: i-7abfcfb8) をメモします。

     作成ステータス
  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 コマンドを使用して Apache ウェブサーバーと PHP ソフトウェアパッケージをインストールします。このコマンドは複数のソフトウェアパッケージと関連依存関係を同時にインストールします。

    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 ディレクトリの所有権とアクセス許可を変更する必要があります。このチュートリアルでは、EC2 インスタンスに www という名前のグループを追加し、そのグループに /var/www ディレクトリの所有権を付与してグループへの書き込み許可を追加します。そのグループの任意のメンバーは、ウェブサーバーに対してファイルの追加、削除、および変更ができるようになります。

Apache ウェブサーバーのファイル許可を設定するには

  1. 次のコマンドを使用して、EC2 インスタンスに www グループを追加します。

    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 {} +

Apache ウェブサーバーを RDS DB インスタンスに接続します。

次に、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 インスタンスに接続できないことを確認します。