ブラウザーからRDSにアクセスするハンズオン
今回はRDSの勉強がてらブラウザーからアクセスするハンズオンを行っていきます。
- 1. VPCを作成
- 2. EC2インスタンスを起動
- 3. データベースの作成
- 4. EC2とRDSを接続
- 5. EC2インスタンス内の設定
- 5.1. EC2 インスタンスのソフトウェアを更新して、最新のバグ修正とセキュリティ更新を入手します。
- 5.2. PHP ソフトウェアをインストール
- 5.3. Apache ウェブサーバーをインストールします
- 5.4. ウェブサーバーを起動します。
- 5.5. システムがブートするたびにウェブサーバーが起動するように設定します。
- 5.6. ec2-user ユーザーを apache グループに追加します。
- 5.7. apache コマンドを使用して groups グループが存在していることを確認します。
- 5.8. /var/www ディレクトリとそのコンテンツのグループ所有権を apache グループに変更します。
- 5.9. DB インスタンスに接続する Apache ウェブサーバーにコンテンツを追加する
- 5.10. dbinfo.inc ファイルを保存して閉じます。
- 5.11. ディレクトリを /var/www/html に変更します。
- 5.12. SamplePage.php ファイルに次のコンテンツを追加します
- 5.13. SamplePage.php ファイルを保存して閉じます
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 インスタンスに接続していることを確認します。
-
前の記事
AWS Lambda で Slack に通知するハンズオン 2023.02.03
-
次の記事
Terraformを使ってAWSにEC2をデプロイしてみる 2023.03.14