ブラウザーからRDSにアクセスするハンズオン

ブラウザーからRDSにアクセスするハンズオン

今回はRDSの勉強がてらブラウザーからアクセスするハンズオンを行っていきます。

VPCを作成

VPCの設定

「VPCなど」のチェックボックスを選択
名前タグの自動生成:任意設定(ここではotomosa-test)
IPv4 CIDR ブロック:任意設定(ここでは172.18.1.0/25)
その他:デフォルト(AZの数は2つ以上必要となります)

EC2インスタンスを起動

EC2インスタンスの設定

名前:任意(otomosa-test-ec2)
インスタンスタイプ:デフォルト(t2.micro)
キーペア:任意
サブネット:パブリックサブネット(subnet-public1-us-east-1a)
パブリックIPアドレス:有効
セキュリティグループ:HTTPSを追加


データベースの作成

データベースの設定

エンジンタイプ:MySQL
テンプレート:無料利用枠
DBインスタンス識別:otomosa-db1
マスターユーザー名:任意(admin)
マスターパスワード:任意
接続:EC2コンピューティングリソースに接続しない
VPC:上記で作成したもの(otomosa-test-vpc)
追加設定:
  最初のデータベース名:任意(otomosa_db_1)
その他はデフォルト
  

EC2とRDSを接続

EC2インスタンス内の設定

sshでEC2インスタンス内のOSに接続します。

EC2 インスタンスのソフトウェアを更新して、最新のバグ修正とセキュリティ更新を入手します。

sudo yum update -y

 PHP ソフトウェアをインストール

sudo amazon-linux-extras install php8.0 mariadb10.5

Apache ウェブサーバーをインストールします

sudo yum install -y httpd

ウェブサーバーを起動します。

sudo systemctl start httpd

システムがブートするたびにウェブサーバーが起動するように設定します。

sudo systemctl enable httpd

ec2-user ユーザーを apache グループに追加します。

sudo usermod -a -G apache ec2-user

apache コマンドを使用して groups グループが存在していることを確認します。

groups

出力は次のようになります。

ec2-user adm wheel apache systemd-journal

/var/www ディレクトリとそのコンテンツのグループ所有権を apache グループに変更します。

sudo chown -R ec2-user:apache /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 {} \;

DB インスタンスに接続する Apache ウェブサーバーにコンテンツを追加する

cd /var/www
mkdir inc
cd inc

inc という dbinfo.inc ディレクトリに新しいファイルを作成し、nano を呼び出して (または任意のテキストエディタで) ファイルを編集します。

>dbinfo.inc nano 
dbinfo.inc

<?php define('DB_SERVER', 'db_instance_endpoint');
define('DB_USERNAME', 'tutorial_user');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');
?>

※下記

db_instance_endpointはRDSのエンドポイントを選択します。
 例:otomosa-db1.*********.us-east-1.rds.amazonaws.com
DB_USERNAMEはマスターユーザー名を選択
 例:admin
DB_PASSWORDはマスターパスワードを選択
DB_DATABASEは最初のデーターベース名を選択
 例:otomosa_db_1

dbinfo.inc ファイルを保存して閉じます。

ディレクトリを /var/www/html に変更します。

cd /var/www/html

html という SamplePage.php ディレクトリに新しいファイルを作成し、nano を呼び出して (または任意のテキストエディタで) ファイルを編集します。

>SamplePage.php 
nano SamplePage.php

SamplePage.php ファイルに次のコンテンツを追加します

<?php include "../inc/dbinfo.inc"; ?>
<html>
<body>
<h1>Sample page
<?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="" method="POST">
  <table border="0">
    <tr>
      <td>NAME
      <td>ADDRESS
    </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>NAME
    <td>ADDRESS
  </tr>

<?php

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

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

</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("Error adding employee data.");
}

/* 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("Error creating table.");
  }
}

/* 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;
}
?>                        

SamplePage.php ファイルを保存して閉じます

ctl+o → enter → ctl + x

ウェブブラウザを開いて http://EC2 instance endpoint/SamplePage.php (例: http://ec2-55-122-41-31.us-west-2.compute.amazonaws.com/SamplePage.php) を参照することで、ウェブサーバーが正常に DB インスタンスに接続していることを確認します。