AWSについて学習したこと<その2>

f:id:endoakak:20200807190651j:plain

AWSでのwebサーバーの構築について勉強したことを、メモのような形で残しておきます。初心者がちょっと勉強しただけなので、正確ではないかもしれません。

AWSについてと言いつつ、AWSの使い方というよりは用語の意味やどういうことをしているのかをざっくり理解することを重視しています。

Webサーバー構築

Webサーバーとは

そもそもサーバーはコンピューターのことで、そのサーバーがどういう役割を持っているかで呼び方が変わる。つまり、Webページをやり取りするような機能を持たせたサーバーならWebサーバー、データベースを配置したサーバーならデータベースサーバー。

AWSでwebサーバーを構築するには

ざっくり流れとしては、

EC2インスタンスを作成

SSHでログイン

Apacheをインストール

ファイアウォールの設定

という感じ。

EC2インスタンス

EC2

Elastic Compute Cloudの略。AWSの仮想サーバーを作成するサービス。個々のサーバーのことをEC2インスタンスと呼ぶ。インターネットで接続できるようにするために、パブリックIPを割り当てておく。

AMI

EC2インスタンスを作成する時のテンプレートのようなもの。諸々の設定などが決めてある。Rubyでいうクラスみたいなものかなと思ってる。

いろいろ種類があってカスタマイズとかもできるけど、初心者のうちはAmazon Linux 2を使っておけば良さそう。

EBS

サーバーに置くストレージ。AMIを使えば勝手に作ってくれるし、追加する必要がなければ特に考えなくて良さそう。

一応書いておくと、これ以外にインスタンスストアというのもある。StopやTerminateをしたときにデータがクリアされるから、キャッシュとか消えてもいいデータを保存するらしい。

SSHでログイン

SSH

自分のパソコンから離れたサーバーに安全にアクセスするためのシステム。通信内容を暗号化している。公開鍵認証を行なってログイン。

公開鍵認証

公開鍵暗号を用いる認証システムで、パスワードを入力するよりも安全性が高い。

クライアントからサーバーへSSHログインのリクエストが届く

サーバーが公開鍵を使って作成した暗号をクライアントへ返す

クライアントが秘密鍵を使って複合してサーバーへ返す

サーバーはその複合が正しいかを判断してログインを許可する

という流れ。

またSSHログインのリクエストは、ポート番号22のsshdというプログラムへ送られて処理される。

ポート番号

IPアドレスがサーバーの住所を表すのに対し、ポート番号はサーバー内のプログラムの場所を表す。

よく使われるものの番号はあらかじめ決められている。例えばSSHは22、HTTPは80、HTTPSは443など。

EC2にSSHでログイン

EC2インスタンス作成時にキーペアというものを作成し、その時にpemファイル形式の秘密鍵をダウンロードする。

ターミナルで以下のコマンド。

chmod 600 作成したキーペア.pem

詳しくはわからないけど、秘密鍵を所有者だけが使えるように権限を厳しくしている。

ssh -i 作成したキーペア.pem ec2-user@パブリックIP

その秘密鍵を使って、そのパブリックIPに対して、ec2-userというユーザー名で、SSHログインをするためのコマンド。

初回のログイン後はとりあえずyumのアップデート。

Apacheのインストール

Apache

EC2インスタンスをWebサーバーとして動かすために必要なツール。HTTPリクエストにたいしてHTTPレスポンスを返す。

ファイアウォールの設定

ファイアウォール

ネットワークを不正アクセスから守るための機能。許可された通信だけを通し、それ以外は遮断する。

セキュリティグループ

AWSファイアウォールの役割を担うもの。EC2インスタンスに対して設定する。どこからどのようなアクセスが来たときは通信を許可する、ということを設定しておくと、そのEC2インスタンスにアクセスできるようになる。

例えば、任意の場所(::/0)からHTTPのアクセスを許可、のような感じ。