AWSでEC2(nginx)+RDS(MySQL8)+PHP7.3なLAMP環境を構築して、phpMyAdmin導入までやってみた。セキュリティグループ(ファイアウォール)の設定が分かりづらい…。
前回はEC2サーバにMySQLをインストールしちゃったので、今回はAWSっぽい感じでRDS(MySQL)を使ってみよう。
DBは、Amazon Aurora(MySQL互換性)を使おうと思ったらMySQL8系には対応していないのか…。
MySQL5.7までだと、laravel6系を使うのは不安だからやめておこう。
MySQL8.0.16(最新) & 無料利用枠を選択
Amazon RDS 無料利用枠は、12 か月間利用できます。無料利用枠では毎月 1 日から末日まで、下記の Amazon RDS リソースを無料で使用できます。
Amazon RDS による db.t2.micro インスタンスのシングル AZ における 750 時間使用。
20 GB の汎用ストレージ (SSD)。
自動化されたバックアップ用の 20 GB のストレージ、およびユーザー起動による任意の DB スナップショット。
AWS 無料利用枠の詳細はこちらをご参照ください。
無料利用枠の有効期限が切れた場合、またはアプリケーション使用量が無料利用枠を超えた場合は、Amazon RDS の料金ページで説明されているように、標準の従量課金制でお支払いいただきます。
DBインスタンス識別子はS3と違って、AWSアカウント毎でユニークだから楽でいい。
database-1-mysql8016
パスワードの自動生成
db.t2.micro
20GiB SSD
ストレージの自動スケーリング:有効
最大ストレージ100GiB
エントリーポイントURLが表示されるのでメモしておく
とりあえず、これでMySQLが使えるようになった~。
phpMyAdminを使いたいのでEC2インスタンスを作ろう。
無料利用枠
Amazon Linux 2 AMI (HVM), SSD Volume Type
SSH(ec2-user)でログインして
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#EC2を日本時間と日本語に対応させる sudo yum update -y sudo timedatectl set-timezone Asia/Tokyo sudo localectl set-locale LANG=ja_JP.UTF-8 sudo localectl set-keymap jp106 # nginxインストール sudo amazon-linux-extras install nginx1.12 -y # 設定ファイルのバックアップ sudo cp -a /etc/nginx/nginx.conf /etc/nginx/nginx.conf.back # nginxの起動とインスタンス起動時自動起動の設定 sudo systemctl start nginx sudo systemctl enable nginx systemctl status nginx |
nginxのドキュメントルートはroot権限になっているので、このままだとec2-userがファイルアップロードが出来ない…。
/usr/share/nginx/html
1 2 3 4 5 6 7 8 9 10 |
# ec2-userをnginxグループに追加 sudo usermod -a -G nginx ec2-user # /var/wwwフォルダ以下を、ec2-userユーザとapacheグループの所有にする sudo chown -R ec2-user:nginx /usr/share/nginx/html # グループの書き込み許可を追加して、これからのサブディレクトにグループ ID を設定するには、/usr/share/nginx/html とサブディレクトのディレクトリ許可を変更します。 sudo chmod 2775 /usr/share/nginx/html && find /usr/share/nginx/html -type d -exec sudo chmod 2775 {} \; #グループ書き込み許可を追加するには、/var/www とサブディレクトリのファイル許可を再帰的に変更します。 find /usr/share/nginx/html -type f -exec sudo chmod 0664 {} \; |
これでアップロードも出来るようにあったので、nginxでPHPが動くようにする。
例によってyumじゃなくて、amazon-linux-extrasを使う
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# php7.3インストール&起動設定 sudo amazon-linux-extras install php7.3 -y sudo systemctl start php-fpm sudo systemctl enable php-fpm # 必要なPHPモジュールもyumでインストール sudo yum install php-cli php-common php-devel php-fpm php-gd php-mysqlnd php-mbstring php-pdo php-xml # 確認 php -v # Webサーバ再起動 sudo systemctl restart nginx |
phpinfo()なんかのPHPファイルを作って、ブラウザからアクセスできるかチェックしてみる。
mysqlクライアントをインストールしておく
https://joppot.info/2017/04/28/3877
う~ん、うまく行かないな~。しょうがない。素直にmysql本体をインストールしよう。
1 2 3 4 5 6 7 8 9 |
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo yum install mysql mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) # ローカルではなく、rdsのエントリーポイントに接続 mysql -h RDSのエントリーポイントのURL -u admin -p Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on 'RDSのエントリーポイントのURL' (110) |
セキュリティグループ(ファイアウォール)の設定をしないと駄目っぽい。
RDSインスタンス作成時に、セキュリティグループ(ファイアウォール)を特に指定しなかったらデフォルト・セキュリティグループになっていた。
デフォルト・セキュリティグループの設定を見てみると、インバウンドもアウトバウンドも「すべてのトラフィック」になっているから何も制限してないんじゃ・・・?と思ったけど
インバウンド = 外部から内部へのアクセス。デフォルトで全てNG
アウトバウンド = 内部から外部のアクセス。デフォルトで全てOK
なので、インバウンドが「すべてのトラフィック」だと、全く外部からアクセス出来ないって事か…。
デフォルト・セキュリティグループを修正するのは怖いので、RDSのセキュリティグループをEC2のに変更しよう。(RDSの右上の変更ボタンから修正。反映に数分かかった)
1 2 3 4 5 6 |
# rdsのエントリーポイントに接続出来た! mysql -h RDSのエントリーポイントのURL -u admin -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 830 Server version: 8.0.16 Source distribution |
これでサーバ&ネットワークの設定は完了。
最新版のphpMyAdminをダウンロードする
1 2 3 4 5 6 7 8 9 10 |
# ドキュメントルートに移動 cd /usr/share/nginx/html # 最新版のphpMyAdminをダウンロード sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz # 解凍先フォルダ生成 mkdir phpmyadmin # 解凍 tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpmyadmin --strip-components 1 # 圧縮ファイルは削除 rm phpMyAdmin-latest-all-languages.tar.gz |
phpMyAdminの接続DBを設定ファイルで指定する。
直下にconfig.sample.inc.phpがあるので、コピーしてconfig.inc.phpにして
$cfg[‘Servers’][$i][‘host’] = ‘localhost’;
$cfg[‘Servers’][$i][‘host’] = ‘RDSのエントリーポイントのURL’;
これで、EC2上のphpMyAdminからRDS(MySQL)を操作出来るようになった~。
セキュリティグループ(ファイアウォール)の設定が分かりづらい…。
RDSって言っても、外部からみると普通のMySQLサーバと全く変わらないのな。