RDB on EC2 に外部接続してみた

2021.06.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、森田です。

AWSの公式ドキュメントでLAMPのチュートリアルがありますが、今回はこのとき作成したRDBを外部から接続できるようにしてみました。

 

前提

この通り進めた後の操作になります。

上の作業進めるの大変!って思った方は下記のユーザデータを使用してください。

mysqladmin password XXXXXXXXXXXXXXXX はパスワードになりますので適宜変更してください。

#!/bin/bash

yum update -y

# amazon-linux-extrasを使用して Maria DB php をインストール
amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

# mariadb-server , Apacheのインストール
yum install -y httpd mariadb-server
systemctl start httpd
systemctl enable httpd

# ファイルの所有権、権限を変更
usermod -a -G apache ec2-user
chown -R ec2-user:apache /var/www
chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;

# PHPの動作確認ファイル生成
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

# Maria DB 起動、設定
systemctl start mariadb
mysqladmin password XXXXXXXX

# 依存ライブラリインストール
yum install php-mbstring php-xml -y

# 各サービスの再起動
systemctl restart httpd
systemctl restart php-fpm

# phpAdminダウンロード、インストール
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
mkdir /var/www/html/phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C /var/www/html/phpMyAdmin --strip-components 1
rm phpMyAdmin-latest-all-languages.tar.gz

# Maria DB 起動
systemctl start mariadb

 

【コンソールでの操作】セキュリティグループの変更

チュートリアルの通り進めていますと、3306のポートは空いておりませんので下記のように変更します。

【EC2上での操作】ユーザの作成

まずは、rootユーザでログインします。 パスワードが求められますが、先ほどユーザデータで記述したものを入力します。

mysql -u root -p

続いて、リモートログイン用のユーザを作成します。

CREATE USER 'user'@'%' IDENTIFIED BY 'XXXXXX';
GRANT ALL ON *.* TO 'user'@'%';

SELECT User, Host FROM mysql.user;でユーザが正常に作成できるているかを確認します。

【ローカルPCでの操作】外部接続

RDB on EC2にローカルPCより接続します。Macより行うためbrewでmysqlをインストールを行いました。

インストール後、下記のコマンドを実行します。

mysql -u user -p -h パブリックIP

パスワードが求められますので、先ほど設定したパスワードを入力すると以下のようにアクセスできます。

気付き

外部公開について調べていたところ、firewall-cmdについても設定すべきかと悩みましたが、設定なしで良さそうです。

EC2では、セキュリティグループとネットワークACLでアクセス制限を行なっておりますのでfirewall-cmdでも設定しまうと重複してしまいます。

以下が非常に分かりやすかったです。

最後に

今回は、RDB on EC2を行いましたが、基本はRDSを検討すべきであり、実際の用途ではなさそうです。
仮に、RDB on EC2を構築する際にはプライベートサブネットの中に置き、クラウド外部に通信を出さないように接続するべきです。