awsでwebサイト構築②
前回は、パブリック環境を構築
今回はプライベート環境構築
前回でプライベートサブネットは構築してあるので、インスタンス作成から
EC2
IPは192.168.2.10とした
セキュリティーグループで、ポート3306(sql)、ICMPを開けておく
ICMPとは
サーバー間での疎通確認(ping)に使用されるプロコトル
インスタンス作成後、パブリックIPが振られていないことを確認
疎通確認
パブリックサーバーから、pingをプライベートサーバーへ発行
$ ping 192.168.2.10
pingが通れば問題なし
プライベートサーバーへssh
プライベートサーバーは外部とネットワークを繋いでいないので、パブリックサーバーからプライベートサーバーへssh接続
$ scp -i my-key.pem my-key.pem ec2-user@54.150.113.252:~/
コピーされたかはパブリックサーバーの中を確認
my-key.pemがあればOK
鍵ファイルのパーミッションを変更(外部から読み取られるのを防ぐ)
$ chmod 400 my-key.pem
ssh接続試行
$ ssh -i my-key.pem ec2-user@192.168.2.10
接続できればOK
NAT構築
プライベートサーバーにSQL(mariadb)を構築したいが、外部とのネットワークを遮断しているので、yumコマンドでのインストールが今のままではできない
そこで、NAT(network address translation)を使って、プライベート→インターネットへの通信のみ許可する
NATは2つのIFを持っている
1つは外部との接続可能なパブリックIPアドレス
もう1つは、プライベートIPアドレス
プライベートIPアドレスに先ほど構築したプライベートサブネットを設定しておくことで、プライベートサブネット内の外部への通信は、NATのパブリックIPアドレスに変換され、外部と通信することが可能
逆に、外部からはNATが変換したパブリックIPアドレスしか分からないため、プライベート環境へアクセスされることがない利点がある
awsでNATを実現する手段は2パターンある
・NATインスタンス:AMI選定の時点で、NAT機能付きのインスタンスを生成する
・NATゲートウェイ:後付けで指定したサブネットにNAT機能を付加できるが、負荷に応じて利用料金が変わる
今回はNATゲートウェイを使用する
NATゲートウェイの作成
割り当てるサブネットは、パブリックサブネット
新しいElastic IPアドレスを取得
ルートテーブルの編集
VPCIDがパブリックサーバー、かつ、メインが"はい"になっているルートテーブルが変更対象
新しい送信先(0.0.0.0/0)を追加
ターゲットは、先ほど作成したNATゲートウェイIDを指定
疎通確認
プライベートサーバーへsshし、curlコマンドで外部へアクセスできるか確認
レスポンスにhtmlが含まれていればOK
mariaDBインストール
$ sudo yum -y install mariadb-server
サーバー起動時、自動起動するように変更
$ sudo systemctl enable mariadb
サーバー起動
$ sudo systemctl start mariadb
rootユーザパスワードの設定
$ mysqladmin -u root password
ログイン
$ mysql -u root -p
DB/テーブル作成
create database testdb;
create table users(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL);
insert into users (username) values ('uematsu');
ユーザ作成
"testdbへの全てのアクセス権を持つユーザadministraorをパスワード!password0で作成"というクエリ"
grant all on testdb.* to administrator@"%" identified by '!password0';
設定即時反映
flush privileges;
パクリックサーバーから、接続試行。接続できればOK
$ mysql -h 192.168.2.10 -u administrator -p
テーブル情報を表示してみる
(テーブル定義を変更、レコードも追加した)
phpファイル作成し、デプロイ
method名やclass名は適当に
ブラウザで確認
DBの中身を表示できた