awsでwebサイト構築①

書籍でawsの使い方を学んだので、今回は復習も兼ねてメモしながら環境を構築してみる

 

構成:

リージョン・・東京

使用サービス・・VPC、EC2

EC2で立てるサーバーは2つ

APサーバー(Apache,php)・・パブリック

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つの仮想ネットワーク環境の土台を構築

 

インターネットゲートウェイの作成

次は、パブリックサブネットをインターネットと接続させる設定を行う

平たくいうと、外部のネットワークとパブリックサブネットを結ぶ道を作る感じ

awsでは、インターネットゲートウェイを利用する

インターネットゲートウェイを作成し、先ほど作成したパブリックサブネットにアタッチすれば良い

 

ルートテーブルの作成

続いて、ルート(ルーティング)テーブルの設定を行う

ルートテーブルとは、宛先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とは、仮想サーバーにアクセスするプロトコルのこと

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 yum -y install httpd

 

インスタンス起動時に自動でapacheが起動するように設定

$ sudo systemctl enable httpd.service

 

設定が有効になっているかは、以下のコマンドで確認

$ sudo systemctl list-unit-files -t service

f:id:yukimat:20200806104155p:plain

 

apache起動

$ sudo systemctl start httpd

 

状態確認

$ sudo systemctl status httpd

 

apacheが何番ポートを掴んでいるか確認

$ sudo lsof -i -n -P

80番を掴んでいた

 

FWの設定

今のままでは、22番ポートしか外部から接続許可されていないので、ポート80を開ける

セキュリティグループ→インバウンドルールを編集→TCPポート80を追加

 

ブラウザから接続試行

テストページが表示されればOK

f:id:yukimat:20200806105416p:plain

 DNSの設定

ブラウザにアクセスする際、覚えにくいIPを指定するより、分かりやすい名前でアクセス(yahoo.co.jpみたいなドメイン名で)する場合に使用

 

作成したVPCを選択し、DNSホスト名の編集→有効

インスタンスを確認すると、パブリックDNSが表示される

 

ec2-54-150-113-252.ap-northeast-1.compute.amazonaws.com

第5レベル ec2-54-150-113-252:インスタンス固有名称

第4レベル ap-northeast-1:東京リージョンのドメイン

第3レベル compute:EC2などのサービスドメイン

第2レベル amazonaws:awsドメイン

トップレベル com:comドメイン

 

パブリックドメインでアクセスすることができた

f:id:yukimat:20200806111434p:plain

 phpのインストール

$ sudo amazon-linux-extras install php7.3

mariadb関連のライブラリもインストール

$ sudo yum -y install php php-mbstring

$ sudo yum install mariadb-server

 

$ php -v で、phpのバージョンが出れば、OK

#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

f:id:yukimat:20200807091648p:plain