awsでwebサイト構築②

前回は、パブリック環境を構築

yukimat.hatenablog.jp

 

今回はプライベート環境構築

前回でプライベートサブネットは構築してあるので、インスタンス作成から

 

EC2

IPは192.168.2.10とした

セキュリティーグループで、ポート3306(sql)、ICMPを開けておく

ICMPとは

サーバー間での疎通確認(ping)に使用されるプロコトル

 

インスタンス作成後、パブリックIPが振られていないことを確認

 

疎通確認

パブリックサーバーから、pingをプライベートサーバーへ発行

$ ping 192.168.2.10

pingが通れば問題なし

 

プライベートサーバーへssh

プライベートサーバーは外部とネットワークを繋いでいないので、パブリックサーバーからプライベートサーバーへ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

f:id:yukimat:20200806140630p:plain

 

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;

f:id:yukimat:20200807092913p:plain

create table users(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL);

f:id:yukimat:20200807093155p:plain

insert into users (username) values ('uematsu');

f:id:yukimat:20200807093308p:plain

ユーザ作成

"testdbへの全てのアクセス権を持つユーザadministraorをパスワード!password0で作成"というクエリ"

grant all on testdb.* to administrator@"%" identified by '!password0';

 

設定即時反映

flush privileges;

 

パクリックサーバーから、接続試行。接続できればOK

$ mysql -h 192.168.2.10 -u administrator -p

 

テーブル情報を表示してみる

(テーブル定義を変更、レコードも追加した)

f:id:yukimat:20200810190223p:plain

phpファイル作成し、デプロイ

method名やclass名は適当に

f:id:yukimat:20200817200202p:plain

f:id:yukimat:20200817200319p:plain

f:id:yukimat:20200817200425p:plain

ブラウザで確認

f:id:yukimat:20200817200539p:plain

DBの中身を表示できた

f:id:yukimat:20200817200630p:plain