AWS勉強④Webサーバーの構築~構築パート~
では、Webサーバーを構築するためにEC2インスタンスを設置します!
実装のゴールは
パブリックサブネットにEC2インスタンスを設置しインターネットへアクセスを可能とすること
実装の手順
①EC2インスタンスを設置
②Apacheをインストール
③ファイアウォールを設置
では①から!
インスタンス設置手順は前半でざっくりまとめましたのでその順番で進めます。
まずAMIを選択。今回はクイックスタートでAmazon Linux 2 AMI を選択。
これはAWSによってメンテナンスされているLinuxで、AWSの各サービスを連携するためのツールやライブラリが全て入っているためすぐに利用できるAMI。
インススタンスタイプにはt2.microを選択。無料利用枠で使用可能。パフォーマンスは低いが動作確認には十分。
次にインスタンスの詳細の設定。作成したVPCをネットワークに設定し、インターネットへアクセスしたいのでパブリックサブネットをサブネットに指定。自動割当パブリックIPは有効にすることでインターネットへアクセスが可能。
その他の設定は触りませんでした。
プライマリIPを設定しようと思い、10.0.10.10で設定するとエラーが発生。
調べてみるとパブリックサブネットのIPv4 CIDRの範囲を10.0.0.0/24に誤って設定していました(-_-;
プライマリIPは、パブリックサブネットのIPアドレスの範囲(10.0.10.0/24 は 10.0.10.0 ~ 10.0.10.255)で設定する必要あり。
IPv4 CIDRの範囲は後から変更できない?みたいなので再度パブリックサブネットを作成し、プライマリIPを設定。これを設定するメリットは、接続先を指定する時に毎回同じ指定先を指定すればOKになる。自動で設定すると指定するIPを書き直さないといけなくなります。
ストレージはデフォルトのルートのまま使用。
キーペアは新しいキーペアを作成しダウンロード。
作成したインスタンスの状態とチェックが問題なければインスタンス作成OK。
これで①は完了!
次に②を実装します。
立てたサーバーにログインし、ApacheをインストールしWebサーバーとして構築していきたいのですがそのためには「サーバーへSSHでログイン」する必要があります。
まずはターミナルを開き、ダウンロードしたpemファイルを自分以外が使用できないようにする設定を行います。
pemファイルを保存したディレクトリへ移動しターミナルで、
「chmod 600 ○○○.pem」と入力すれば設定OK。初めの1回のみこれを行う。
次に作成したインスタンスのIPv4パブリックIPをコピー。このIPアドレスに対してSSHでログインしていく。
ターミナルで以下のコマンドを実行。
「ssh -i ○○○.pem ec2-user@コピーしたパブリックIP」
-iは秘密鍵(pemファイル)を指定し公開鍵認証で接続できるようにする。
ec2-userはサーバーへログインする時のユーザー名。
まとめると、「指定しているEC2へ秘密鍵を用いて、ec2-userというユーザー名で指定したIPアドレスへ接続します」という意味。
それでは実行!すると以下のエラーが発生。
Warning: Permanently added '54.95.12.198' (ECDSA) to the list of known hosts.
ec2-user@54.95.12.198: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
解決策を調べてみると.sshという隠しディレクトリに移動し、ファイル指定をフルパスにしてみる方法があったので試してみます。
これで何とかEC2にログインできました。良かったε-(´∀`*)ホッ
ちなみにですが、.sshの隠しディレクトリに移動しなくてもファイル指定をフルパスにしているだけでもログインできました。
このままApacheをインストール!の前に...
ここで一度ポート番号を確認します。
SSHクライアント(自分)からSSHサーバーに対して送られるリクエストには
「IPアドレスは○○で、ポート番号は22番で接続したい」が含まれています。
この時SSHサーバー側にポート番号22番が設定されていれば、無事通信が成立します。
では、このことをサーバーへ確認してみましょう。
ターミナルで「sudo lsof -i -n -P」と入力。
この時Pは大文字なので気をつけましょう!(私は間違えたのでエラーが出ました。)
これは、どのポート番号でどのプログラムを待ち受けているかを確認するコマンド。
注目するのはLISTENと書かれているコード。
これは他のコンピュータから待ち受けているポートです。以下のコードを発見。
sshd 3203 root 3u IPv4 19250 0t0 TCP *:22 (LISTEN)
↑は、sshdというプログラムが22番で待ち受けていることを示しており、このおかげで自分のPCからssh通信が出来るという仕組み。
確認できたところで、いよいよApacheをインストールしていきます!
まずyumをアップデートし最新版にします。ターミナルで、
「sudo yum update -y」で入力。
sudoはルートユーザー権限で実行することを示す。
yumとはLinuxの管理パッケージツールをインストールやアンインストールする時にyumを使用(LinuxはサーバーのOS)。
-yはyesオプション。yesを自動で返す。
完了したら。以下のコマンドを実行。
httpdはApacheを構成する実行ファイルであり、これでインストールする。
「sudo systemctl start httpd.service」
systemctlは指定したアプリケーションを起動したり停止、再起動するコマンド。
これでApacheを起動することを表す。
「sudo systemctl status httpd.service」
起動状態を確認することができる。
Active: active (running) since〜となっていればOK。
この他にも確認する方法はあり、プロセスコマンドがある。
プロセスとは、そのサーバー上で実行中のプログラムのこと。
この中に「httpd」があれば起動していることが確認できる。
「ps -axu」か「ps -axu | grep httpd」を入力。
/usr/sbin/httpd -DFOREGROUNDがあれば起動OK。
ps -axu | grep httpdの縦棒はパイプラインといい、左側の出力結果を右側に渡す役割。
grepは検索して表示するコマンド。この場合左側の出力結果の中からhttpdという文字を検索して含まれているものだけ表示。
次に、サーバーが起動する時Apacheも自動で起動するように設定する。
※今のままだとサーバーが停止、再起動するとその都度Apacheを起動する必要あり。
以下のコマンドを実行。
「sudo systemctl enable httpd.service」
enableは自動起動設定する為のコマンド。
設定できたか確認。
「sudo systemctl is-enabled httpd.service」
enabledが返ってくればOK。
これで無事Apacheのインストールが完了。
次は③ファイアウォールの設定にいきます!
現段階では、まだWebページを表示できません。ファイアウォールによって通信がシャットダウンされてしまいます。
(試しにパブリックIPv4アドレスをコピーして検索するとアクセスできないことがわかります)
理由は現在パブリックサブネットに許可されている通信はポート番号22番のssh通信のみになっており、それ以外はファイアウォールによって遮断されているから。
AWSにおいては「セキュリティグループ」がファイアウォールの役割を担う。
インバウンド→サーバーへ入ってくる通信(ポートは必要なものだけ開ける)
アウトバウンド→サーバーから出ていく通信(ポートは全て開けることが多い)
インターネットからの通信を受け取るためにすることは、
セキュリティグループのポート80番を開けることです。
では、EC2のセキュリティグループを開き、アウトバウンドを確認。
上記の通り、ポート番号22番のSSH通信のみ通信を通していることがわかりました。
では、設定を変更して通信を通すようにします。
タイプはHTTP、ソースは任意の場所を指定し保存すればOK。
試しにパブリックIPv4アドレスをコピーして検索するとApacheのデフォルト画面が出現を確認できれば、正常に動いています。
これで③は完了!
最後に④を実装します。
その前にElastic IPアドレスについて軽く説明。
Elastic IPアドレスとは?
「インターネット経由でアクセス可能な固定グローバルIPアドレスを取得でき、
インスタンスに付与できるサービス」
なぜこれを設定するのか?
現状では、EC2インスタンスを起動や停止をする度に別のIPアドレスが自動で割り当てられます。これでは何かと不便な為、Elastic IPアドレスを使用することでIPアドレスを固定することが出来るから。
Elastic IPアドレスの注意点→料金について
Elastic IPアドレスをEC2インスタンスに関連付けてそのインスタンスが起動中であれば無料で使用可能だが、EC2インスタンスに関連付けていない時や、EC2インスタンスを使用すると料金発生。
Elastic IPアドレスを使用しない時は、Elastic IPアドレスを開放するようにする。
それでは、Elastic IPアドレスを紐付けていきましょう!
新しいアドレスの割当から、Elastic IPアドレスを作成。
それのアドレスの関連付けを選択。作成したインスタンスに紐付け、プライベートIPを選択で関連付け完了。設定したElastic IPアドレスをコピーして検索しページが表示されれば設定OK。
Elastic IPアドレスはインスタンスに紐付けていないと課金されるため、インスタンスを停止する場合は「アドレスの関連付けを解除」し、「アドレスを解放」することで料金の発生を防ぐことができます。
インスタンスを停止した場合は、Elastic IPアドレスの解放を忘れないようにしましょう!
以上でWebサーバーの構築が完了!
次は「Route 53」でDNSを設定していこうと思います。