awsでwebサイト構築①
書籍でawsの使い方を学んだので、今回は復習も兼ねてメモしながら環境を構築してみる
構成:
リージョン・・東京
使用サービス・・VPC、EC2
EC2で立てるサーバーは2つ
DBサーバー(mariadb)・・プライベート(外部とネットワークを繋げない)
VPCの作成
VPCを利用することで、仮想上にネットワーク環境を構築することができる
VPCは、本番環境のVPC、テスト環境のVPCなどの粒度で作成する
IPv4CIDRは192.168.0.0/16を採用
なので、このVPC環境で使用できるプライベートIPは、192.168.0.0~192.168.255.255までとなる
CIDR表記とは、IPアドレスを2進数で表した時、ネットワーク部のビット長(プレフィックス)を /ビット長 で示す表記
例えば、10.0.0.0~10.255.255.255の場合、10.0.0.0/8(この8がネットワーク部のビット長を示す)となる
サブネットの作成
作成したVPCをさらに分割した名前のことで、複数のネットワーク環境を構築できる。
部署毎にネットワークを構成したい場合や、1Fと2Fでネットワークを別にしたい、一方は外部とネットワークを繋げたくないetc...で使用
割り振るIPは、先ほどのVPCに当てたIPの一部から
パブリック
IPv4CIDR 192.168.1.0/24(192.168.1.0~192.168.1.255)
プライベート
IPv4CIDR 192.168.2.0/24(192.168.2.0~192.168.2.255)
ここまでで、一つのVPCに2つの仮想ネットワーク環境の土台を構築
インターネットゲートウェイの作成
次は、パブリックサブネットをインターネットと接続させる設定を行う
平たくいうと、外部のネットワークとパブリックサブネットを結ぶ道を作る感じ
インターネットゲートウェイを作成し、先ほど作成したパブリックサブネットにアタッチすれば良い
ルートテーブルの作成
続いて、ルート(ルーティング)テーブルの設定を行う
ルートテーブルとは、宛先IPアドレスがXXXの時に、どのネットワークにデータを流せば良いかを定義したテーブルのこと
TCP/IPでは、データをいくつかに分割したパケットという単位で送受信する
パケットの中には送受信したいデータの他に、宛先IPアドレスや、送信元IPアドレス情報などのヘッダーも付加されており、ルーターはヘッダーを見て、送信先を区別する
ルートテーブルの設定がされていないと、どこにデータを送信すればいいのかがルーターが判断できない
awsでは、デフォルトでVPC作成時に設定したIP(今回では192.168.0.0/16)が設定されており、これ以外のIPアドレスは破棄されるようになっているので、デフォルトゲートウェイ(0.0.0.0/0)をインターネットゲートウェイに設定する
これにより、192.168.0.0/16以外のIPアドレスも全て送受信することができる
仮想サーバーの作成
パブリックサブネット内に仮想サーバーを構築する
awsでは、EC2サービスを使用することで、様々なサーバーを構築することができる
インスタンス作成時に設定する項目は以下
- リージョン:東京
- AMI: Amazon Linux AMIなどVMイメージを指定
- インスタンスタイプ: 仮想マシンのスペックを設定
- VPCとサブネット: パブリックサブネットを指定
- パブリックIPアドレス: 外部からのアクセスのために必要
- プライベートIPアドレス: VPC内での通信に使用(今回は192.168.1.10を採用)
- ストレージ: デフォルトのまま
- インスタンスの名前:分かりやすい名前を
- セキュリティグループ:パケットフィルタリングの設定が可能
- キーペアの作成:作成したキーは無くさないように
インスタンスに割り当てられるパブリックIPアドレスは、デフォルトでは起動・停止するたびに別のIPアドレスが割り当てられる(動的IPアドレス)
固定化したい場合にはElastic IPを使用
ssh接続試行
SSHは秘密鍵と公開鍵によって接続する方法であるが、先ほど作成したキー「my-key.pem」は秘密鍵に相当する
ssh -i my-key.pem ec2-user@インスタンスに割り振られたIP
AWSのインスタンスでは「セキュリティグループ」でパケットフィルタリングを設定できる
デフォルトでは「ポート22に対して、すべての通信(0.0.0.0/0)を許可する」という設定となっている(ポート22はウェルノウンポートで、SSH(厳密にはsshdサービス)のこと)
デフォルトの設定ではWebサーバーソフトをインストールしようとしても、阻まれて通信できない(ポート22以外の通信が許可されていない)ので、必要に応じてセキュリティグループを変更する
インターネットは無数のルーターで接続されており、ルーター同士はルートテーブルの情報をやりとりする
ネットワークの情報は刻一刻と変更されるため、ルーター同士は情報をやり取りして自動的に更新する
そのための代表的な方法がEGPとIGP
EGPは大きなネットワークでネットワークを管理する「AS番号」を使ってやりとりに使われ、IGPはEGP内部のルーター同士でのやりとりに使われる
Apacheのインストール
$ sudo yum update
$ sudo systemctl enable httpd.service
設定が有効になっているかは、以下のコマンドで確認
$ sudo systemctl list-unit-files -t service
apache起動
$ sudo systemctl start httpd
状態確認
$ sudo systemctl status httpd
apacheが何番ポートを掴んでいるか確認
$ sudo lsof -i -n -P
80番を掴んでいた
FWの設定
今のままでは、22番ポートしか外部から接続許可されていないので、ポート80を開ける
セキュリティグループ→インバウンドルールを編集→TCPポート80を追加
ブラウザから接続試行
テストページが表示されればOK
DNSの設定
ブラウザにアクセスする際、覚えにくいIPを指定するより、分かりやすい名前でアクセス(yahoo.co.jpみたいなドメイン名で)する場合に使用
ec2-54-150-113-252.ap-northeast-1.compute.amazonaws.com
第5レベル ec2-54-150-113-252:インスタンス固有名称
第4レベル ap-northeast-1:東京リージョンのドメイン
第3レベル compute:EC2などのサービスドメイン
パブリックドメインでアクセスすることができた
phpのインストール
$ sudo amazon-linux-extras install php7.3
mariadb関連のライブラリもインストール
$ sudo yum -y install php php-mbstring
$ sudo yum install mariadb-server
#php.iniは以下。適宜修正する
$ /etc/php.ini
続いてphpフォルダを作成し、phpinfo確認
$ sudo mkdir /var/www/html/php
$ sudo touch /var/www/html/php/phpinfo.php
ファイルの中身↓
<?php
phpInfo();
?>
phpファイル作成後、apacheを再起動し、ブラウザでアクセスできればOK