Webサーバーについて


#Webサーバーの仕組み
Webサーバーは、Webブラウザからの接続を待ち受けて、接続があったら、その要求に従ってコンテンツを返すサーバーです。
Webサーバーを構成するには、いくつかのやり方がありますが、シンプルで代表的な構成は、サーバー上にそうした機能をもつWebサーバーに置かれているファイルを返すというものです。
具体的なWebサーバーソフトとしては、Apacheやエンジンエックスなどがあります。
例えば、Webサーバーにwww.example.co.jpという名前をつけてインターネット上に配置し、そこにabcdef.htmlというファイルを置いたとします。
この時ユーザーが、ブラウザのアドレス欄にhttp://www.example.co.jp/abcdef.htmlを入力してアクセスすると、このWebサーバーに置かれているabcdef.htmlの内容が返され、ブラウザに表示されます。
これがWebの基本です。
Webページは、HTMLで記述します。
基本的に１ページが１ファイルに相当します。
画像を含む時はHTMLとは別に画像ファイルを置き、HTMLから参照するように<img>タグを記述して、その画像ファイルを参照するようにします。
すると、ブラウザが、HTMLのなかに画像を差し込むように表示します。
複数枚の画像がある場合や動画、音楽が含まれている場合も、これと同じ仕組みです。

##AWSを使ってWebサーバーを構築
AWSを使ってWebサーバーを構築する方法は、主に２つあります。
EC2を使う方法とS3を使う方法です。
前者はアンマネージドサービス、後者はマネージドサービスです。
AWSでは、マネージドサービスを使った方が設定や管理が簡単です。

※S3のバケットの名前を変えたい時
S3バケットの名前は、一度決めると後から変更できませんが、どうしても変更したいことはあります。
しかし変更はできないので、もし変更したい時は変更後の名前のS3バケットを新規に作成し、古いバケットからコピーするしかありません。
全ファイルのコピーをAWSマネジメントコンソールから操作するのは時間もかかって面倒なので、そうした時はAWS CLIを使いましょう。

##EC2インスタンスとネットワーク
EC2インスタンスは、AWS上のどこかのネットワークに配置します。
そのネットワークを介して、インターネットなどのネットワークと通信します。
AWSでは、ネットワークも仮想化されていてVPCと呼ばれます。
VPCは、AWSマネジメントコンソールから設定することで作られます。
用途ごとに互いに離れた独立した環境でシステムを構築する場合は、それぞれにEC2インスタンスを配置して動かせるようになっています。

##デフォルトのVPCとデフォルトのサブネット
AWSでは、あらかじめインターネットに接続されたVPCをそれぞれのリージョンに１つずつ用意しています。
これをデフォルトのVPCと言います。
そのためインターネットと通信したいEC２インスタンスを作る場合は、VPCを作らなくてもこのデフォルトのVPCに配置すればいいのです。
デフォルトのVPCは、さらにデフォルトのサブネットという区画に分かれており、EC2インスタンスをこのいずれかのデフォルトサブネットに配置すればインターネットと通信できます。
デフォルトのサブネットは後ろにa b c dのような名前がつけられています。
１台しかEC2インスタンスを配置しない時は、どれも同じです。
その場合はランダムなサブネットに配置されます。

###アベイラビリティゾーン
デフォルトのサブネットが、なぜ複数あるのかを知るには、アベイラビリティゾーンという概念を理解しなければなりません。
なぜなら、デフォルトのサブネットは、アベイラビリティゾーンと呼ばれる場所単位で１つずつ置かれているからです。
アベイラビリティゾーンとは、簡単にいうとAWSのデータセンターのグループ範囲です。
AWSのデーターセンターは、それぞれのリージョンで、ある程度距離がある複数の離れた場所で運営されています。
この単位がアベイラビリティゾーンです。
いくつのアベイラビリティゾーンで運営されているのかはリージョンによって異なり、東京リージョンの場合は４つのアベイラビリティゾーンで構成されています。
ある程度、距離がある離れた場所で運営しているのは、地震や火災などの対策のためです。
このように分割することによって、ある地域で火災が起きても、別の地域にあるデータセンターでサービスを継続できるようになっています。
複数のEC2インスタンスを使って、片方が止まっても、もう片方で処理を継続できるようにするというような冗長構成を取る場合は、それぞれのEC2インスタンスを別のアベイラビリティーゾーンに置くことが大事です。
そうしないと、そのアベイラビリティゾーンに災害が起きれば、両方のEC2インスタンスが停止してしまうからです。
逆に、2台のEC2インスタンスがとても密接に関連していて、片方が止まったら全体が止まるような場合には同一アベイラビリティゾーンに置いても構わないでしょう。
アベイラビリティゾーンを跨ぐ通信は通信速度が遅くなること、そして、余計な通信費用が発生するためです。

##ディスクイメージを指定するAMI
EC2インスタンスを作成するときには、AMIというディスクイメージを選択します。
AMIにはOSのイメージが含まれていて、好きなOSを選べます。

###AmazonLinuxとAmazonLinux２
AmazonLinuxとAmazonLinux２は、Red Hat Enterprice Linux（RHEL）をベースとしたLinuxで、AWSが提供・保守・管理しているものです。
コマンドなどは、RHEL（や同等のCentOS）とほぼ同じであり、AWS用にカスタマイズされていたり、AWSを操作するためのAWS-CLIと呼ばれるコマンドサービスがインストールされたりしているものです。
そのため、AWSの世界では、よく使われます。
AmazonLinuxとAmazonLinux２の違いは、ベースとするRHELのバージョンです。

###AMIは初期設定が済んでいるディスクイメージ
AMIはOSのインストールディスクのことではありません。
あらかじめOSをインストールし、それに必要な設定を施した構成のディスクイメージです。
AmazonLinux2の場合、ec2-userというユーザーでログインできるように構成されています。
このec2-userというユーザーは、あらかじめ作成されているユーザーです。
他にもネットワークのIPアドレスをどのように構成するかなどの設定も、あらかじめ書き込まれています。
EC2インスタンスでは、OSのインストールや設定の作業は必要なく、起動するとすぐに使えます。

##データを保存するディスクを構成するEBS
EC2インスタンスには、１台以上のディスクが必要です。
EC2インスタンスで一般的に扱うのはEBSという機能で作られたボリュームです。
EBSボリュームは、箱型のアイコンで示されます。
EBSには次の特徴があります。
EBSにはEC2インスタンスを作成するときに、一緒に作ることがほとんどです。
このとき、SSDやHDDの別、割り当てる容量を設定します。

１、高いパフォーマンスと信頼性
HDDとSSDの種別ほか、最大IOPSを保証する設定にもできます。
つまり目的に応じて、コストとパフォーマンスのバランスがいいディスクを選べます。
可用性は９９.９９９％を満たすように設計されています。

２、スナップショットや複製を作れる
ディスクのスナップショットを作り、あとで、そのスナップショットからデータを戻すことができます。
定期的にスナップショットを作っておけば、ディスクのバックアップになります。
またスナップショットのデータを使って、ディスクを複製することもできます。

３、スケールアップが容易
簡単な操作でディスク容量を増やせます。
またHDDからSDDに変更するなどの操作もできます。

#EC2の操作と通信
EC2インスタンスを起動したら、そこにソフトウェアをインストールしたり、各種設定を変更したりするなどの操作が必要です。
そうした操作には、SSHなどのターミナルソフトを使います。
またEC2はデフォルトでは安全のため、全ての通信ができないように構成されています。
そのため、許可したい通信を許す設定も必要です。

##IPアドレスとDNS名
EC2インスタンスを起動すると、ネットワークと通信するためのIPアドレスやDNS名が割り当てられます。
IPアドレスは10.20.30.40のような数値の値、DNS名はec2-10-20-30-40.ap-northeast-1.compute.amazonaws.comのようなドメイン名で構成される値です。
これは、このEC2インスタンスに接続するときの接続先として指定する値となります。
IPアドレス、DNS名には、それぞれパブリックとプライベートがあり、インターネットから接続するときにはパブリックIPまたはパブリックDNSを使います。

１、パブリックIP・パブリックDNS
インターネット側から接続するときの接続先です。
デフォルトのサブネットのように、インターネットに接続可能なサブネットに配置したときだけ割り当てられます。
一度割り当てられたパブリックIPアドレスは停止するまで、同じ値が使い続けられますが、停止してから起動すると値が変わります。
つまり再起動では変わりませんが、一度停止させれば変化するので注意してください。
EC2インスタンスにWebサーバー機能をインストールしてアクセスする場合などには、このパブリックIPやパブリックDNSを使います。
つまり、例えば、パブリックIPアドレスが10.20.30.40、パブリックDNSがec2-10-20-30-40.ap-northeast-1.compute.amazonaws.comであるならば、ブラウザにhttp://10.20.30.40やhttp://ec2-10-20-30-40.ap-northeast-1.compute.amazonaws.comのように入力することで接続します。

２、プライベートIP・プライベートDNS
サブネット内での通信で使われる接続先です。
プライベートIPはサブネットとして割り当てたIPアドレスの一部が自動的に割り当てられます。
先頭から４つのIPアドレスと末尾は予約されており、使えません。
例えば、172.31.0.0〜172.31.255.255の範囲に設定されたサブネットにEC2インスタンスを置いたときは、172.31.0.4から順にプライベートIPアドレスが割り当てられます。
プライベートIPアドレスやプライベートDNSは、EC2インスタンスが起動するときに定まり、以降はEC2インスタンスを破棄するまで変わることはありません。

##EC2にリモートで接続して操作する
起動したEC2インスタンスには、ソフトウェアをインストールしたり、各種設定を変更したりするなどの操作が必要です。
こうした各種操作をするには、EC2インスタンスにリモートで接続して操作します。
接続先は、パブリックIPアドレスまたはパブリックDNSです。
接続して操作する方法は、インストールしたOSによって異なりますが、Linux環境の場合は、SSHを使ってネットワーク越しに操作します。

SSHを操作するには、ターミナルソフトやSSHクライアントと呼ばれるソフトウェアが必要です。
例えば、Windowsの場合はPuttyやTera Termなどがあります。
Macの場合は、標準でSSHコマンドが含まれています。

##認証に使うキーペア
リモートから操作する場合、誰もが利用できてしまうのはセキュリティに問題があるので、限られたユーザーしか利用できないよう、ユーザーの認証機能があります。
EC2インスタンスにSSHを使って接続する場合は、公開鍵認証という方式を使います。
公開鍵認証はパスワードで認証するのではなく、秘密鍵と公開鍵という２つの対となる鍵ファイル（データ）を作り、公開鍵をEC2インスタンスに配置しておき、秘密鍵をSSHクライアントから送信することで、それが対になっているかを確認することで正当性を確認する方法です。
この秘密鍵と公開鍵はキーペアというファイルとして、EC2インスタンスを作成するときに生成（または既存のものを利用）します。

##通信の許可・拒否を設定するセキュリティグループ
それぞれのEC2インスタンスとネットワークとの間には、どのような種類の通信を許すのかを設定するファイアウォール機能があります。
この機能のことをセキュリティグループと言います。
セキュリティグループでは、EC2インスタンスに入ってくるデータとEC2インスタンスから出て行くデータの2方向を制御します。
前者はインバウンド、後者はアウトバウンドと言います。
デフォルトでは、アウトバウンドは無制限の通信を許可、インバウンドは全ての通信を禁止です。
インバウンドの設定を変更して、EC2インスタンスが受信したい通信サービスを許可しないと、外からの通信が通りません。
設定が必須なのは、SSHです。
SSHの通信を許可しないと、リモートからの操作ができなくなってしまいます。
またWebサーバーを構成する場合は、HTTPとHTTPSという通信も許可しなければなりません。

###pingは通らない
ネットワークの疎通確認の際、しばしばpingコマンドやtracerouteコマンドを使うことがありますが、EC2インスタンスに対して、pingやtracerouteを実行しても応答を返しません。
これはpingやtracerouteコマンドで使っているICMPプロトコルが、セキュリティグループで拒否されているためです。
もし、pingやtracerouteコマンドを使いたいのなら、セキュリティグループの設定でICMPプロトコルを追加する必要があります。



###ボリュームタイプ
・汎用SSD
一般的なSSDです。

・プロビジョンドIOPS SSD
汎用SSDに比べてアクセス速度が速いSSDです。
IOPSと呼ばれるアクセス速度の基準が保証されます。

・マグネティック
磁気ディスク（ハードディスク）です。
速度が遅い代わりに安価です。

#まとめ
・EC2は仮想サーバー機能を提供するアンマネージドサービスです。

・構築した仮想サーバーのことを、EC2インスタンスと呼びます。

・EC2インスタンスは、どこかのVPCならびにサブネットに配置します。

・デフォルトのVPC、デフォルトのサブネットに配置するとインターネットに接続可能になります。

・EC2のAMIを選ぶことで、OSが決まります。

・ストレージはEBSで作成します。

・EC2の料金は、インスタンスの資料量＋EBSの費用＋通信費＋その他オプションです。

・EC2の性能は、インスタンスタイプとインスタンスサイズで決まります。

・開発やテスト目的ならT2またはT3タイプ、本番ならM5またはM4タイプを使うのが一般的。
EC２インスタンスにはパブリックIP（パブリックDNS）とプライベートID（プライベートDNS）が割り当てられます。
インターネットから接続するときは前者の値を使います。

・ウェブサーバーとして使うには、Apacheなどのウェブサーバーソフトのインストールが必要です。

・EC2インスタンスは、SSHなどを使ってリモートから操作します。

・EC2インスタンスにソフトなどをインストールするときは、yumコマンドを使います。