見出し画像

元オンプレのインフラエンジニアがAWSを触ってみた_Webサーバ(Apache)編

■筆者について
Webエンジニアへの転職を目指して、Node.js、AWSの学習をしています。
インフラは2年、バックエンドは1年6ヶ月業務経験を積んでいます。
インフラではサーバとネットワーク設計/構築/テスト/監視の業務を幅広くやっております。バックエンドでは、PHPとMySQLを使った設計/構成/テストをやってきました。バックエンドエンジニアを目指して、転職活動中です。

■扱うサーバについて
 ・Webサーバ(html, css, jsなどをブラウザに返す。)
 ・APサーバ(ブラウザとDBサーバ間のデータのやり取りを担うサーバ
  バックエンドエンジニアがコードを書くサーバ)
 ・DBサーバ(システムに入力されたデータを登録/編集/削除/閲覧する
  ためのサーバ)

■扱わなサーバについて
 ・メールサーバ
 ・NTPサーバ
 ・Zabbixサーバ
 。Fileサーバ 

■読者に対する注意
この記事はドラフト版です。実際にサーバを構築しながら手順を説明していますが、まだまだ内容的に足りない箇所がある為、近々大幅に内容を書き換える可能性があります。また、必要最低限度の内容しか盛り込んでいない為、開発環境構築という観点ではまだまだ完成していません。上記注意事項をご了承の上拝読願います。

■初めに
インフラ構築や開発環境構築時にAWSを触る人に向けて、1つのサーバに3つのミドルウェアをインストール、セットアップできることを目標にします。
この記事の内容を何周かすれば、他のWebシステムのインフラも同様の手順で、構築と確認ができるようになるはずです。操作内容をざっと説明する記事を作り、別記事で細かな内容を説明します。ゆっくり学びながら、全ての記事を読むのもよし、サクッとメインの記事だけ読んで構築してから、後で、詳細を読むのもよしといった形で学べるように記事を作っています。

以下のミドルウェアを1つのサーバにインストール、コンフィグレーション
していきます。(バージョン不定)
 ・Apache
 ・PHP
 ・MySQL

AWSマネージメントコンソールにアクセスします。
EC2をクリックする。

画像1

キーペアーをクリックする。

画像2

キーペア作成をクリックする。

画像4

今回は比較的新しい暗号化形式の「ED25519」を選択する。キーペアの名前は「test」とする。「キーペアを作成」ボタンをクリックする。

画像5

一覧画面で先ほど作成したキーペア「test」が作成されていることを確認する。また、「test.pem」という公開鍵が、ダウンロードできていることを確認する。左側のメニューの「インスタンス>インスタンス」をクリックする。 

画像4

右側のオレンジ色のボタン「インスタンスを起動」ボタンをクリックします。

画像6

使用するマシンイメージ(OS)は「Amazon Linux 2」を選択する。
画面を下にスクロールします。「選択」ボタンをクリックする。

画像7

インスタンスのタイプ(マシーンのグレード)を選択します。今回は無料枠で利用できる「t2.micro」を選択しました。そのまま画面を下にスクロールする。

画像8

「確認と作成」ボタンを押下する。

画像9

作成するインスタンスの条件を確認する。特に「セキュリティグループ」を確認すると、どのIPアドレスからでもSSH接続(TCP/22)で接続できることを確認する。

画像10

「インスタンスの詳細」と「ストレージ」を確認する。「起動」ボタンを押下する。

画像11

ポップアップ画面が立ち上がり、「キーペア」を選択することができる。
「キーペアの選択」にて先ほど作ったキーペアの「test」を選択する。
「インスタンスの作成」ボタンをクリックする。

画像12

少し待つとインスタンスの設定が登録できる。「作成ログの表示」をクリックして、インスタンスの作成状況を確認する。「インスタンスの表示」ボタンをクリックする。

画像13

仮想マシーンが作成されていることを確認する。AWSのEC2インスタンスの「パブリックIPv4アドレス」は再起動するたびに、IPアドレスが変わるため、IPアドレスを固定する設定を施す必要がある。開発時には開発環境のURLをブラウザでブックマークしたり、Putty等のSSHツールにて、接続情報を保存する際に、IPアドレスを固定で割り当てると便利なので、固定でIPアドレスを割り当てられる「Elastic IP」を設定していく、左側のメニューの「ネットワーク&セキュリティ>Elastic IP」をクリックする。

画像14

「Elastic IP アドレスの割り当て」ボタンをクリックする。

画像15

IPアドレスはIPv4を指定する。「割り当て」ボタンをクリックする。

画像16

作成された「Elastic IP アドレス」をクリックする。「アクション」ボタンをクリックする。

画像17

「Elastic IP アドレスの関連付け」を選択する。

画像18

先ほど登録したElastic IPアドレスの詳細画面が表示されるので、「Elastic IP アドレスの関連付け」ボタンをクリックする。

画像19

リソースタイプに「インスタンス」を指定する。インスタンスは先ほど作った「test_server」を入力し、選択する。

画像21

メニューの「インスタンス>インスタンス」クリックする。先ほど作ったインスタンスを選択する。インスタンスに紐づいているパブリックIPアドレスに「Elastic IP」のIPアドレスが表示されることを確認する。パブリックIPv4アドレスは後でSSH接続する際に利用するので、メモを取っておく。

画像25

次にSSH接続するために、マシーンの設定をする。まず、以下のように「~/.ssh」フォルダー(「.」は隠しファイルを示す。)を作成する。
フォルダーのアクセス権限が「drwx------」となっていることを確認する。

画像22

以下の手順で、公開鍵を配置する。
・「~/.ssh」に移動
・カレントディレクトリーの確認
・「test.pem」のアクセス権限確認「600」であればOK
 →もし「600」でなければ以下のコマンドを実行し、再度「ls -l」で
  確認する。「./」はカレントディレクトリーを示す。
  chmod 600 ./test.pem

画像24

先ほど「Elastic IP」で割り当てたIPアドレスの値を元に、SSHで接続して
いく、コマンドの意味について軽く捕捉する。
ssh -i ~/.ssh/test.pem -l ec2-user <IPアドレス>
 ・「-i」は公開鍵を使ってSSH接続する際に指定するオプション
 ・「~/.ssh/test.pem」は公開鍵の配置場所(フルパスともいう)
 ・「-l」はSSH接続する際に利用するアカウント名を指定するオプション
 ・<IPアドレス>は接続しにいくマシーンのIPアドレス(住所的な物)
なお、上記コマンドでログインできない場合「-v」オプションを「ssh」と「-i」オプションの間に入れて、エラーの内容を表示させ問題解決に当たること

画像25

LinuxとUnix(Mac)ではコマンドの使い方を「man」や「help」を使ってみることができる。cd,mv,sshなどOSをインストールした際に一緒に入るコマンドは「man」コマンドでリファレンスを確認できる。その他、git,nodeなど後でインストールが必要なものは「help」または「-h」で使い方を確認できる。manでリファレンスを見る際は「less」コマンドを使っているので、「less」コマンドの操作方法も併せて把握しておくと良い

yumコマンドを利用して、Apacheをインターネットにあるリポジトリーサーバからダウンロードするのだが、下準備として、以下2つを実施する。
 ・インターネットに接続できるか確認
 ・yumのインストール一対象のパッケージ更新

まず、インターネットに接続できるか確認していく、以下のコマンドを
実行する。
 ping yahoo.com
これで、yahoo.com (ドメイン)がどのIPアドレスになっているか確認できた場合(DNSサーバで名前解決できる場合)インターネットに繋げられることを確認できるので、上記実行して確認する。以下の実行内容を見ると、「yahoo.com」にpingを送って届いたこと、「yahoo.com」が名前解決されていることを確認できる。

画像26

次に、yumのインストール一対象のパッケージ更新をする。
「Amazon Linux 2」で利用できるパッケージマネージャー(コマンドやミドルウェアをインストール、アンインストールする際に使用するマネージャー)である「yum」コマンドをまずアップデートする。アップデートをすることで、古すぎるバージョンのコマンドやミドルウェアをインストールしなくなるので、何かインストールする際は、インストールパッケージのアップデートをお勧めする。管理者ユーザー遷移して、

yum update -y
コマンドの内容について軽く説明する。
・「update」はインストール対象リストを更新するためのオプション
・「-y」はコマンドの実行中に許可を求められたら、yesと自動で
 返答するオプション

画像27

以下の画面はyumを使って、(Apache)httpdをインストールした例である。実行コマンドは以下の通りである。
yum install httpd
コマンドの内容について説明する。
 ・「install」はリポジトリーサーバ(コマンドやミドルウェアが保管され
  ているサーバ)からパッケージを取得する。
 ・「httpd」はインストール対象のパッケージ名

画像28
画像29
画像30

Apache(httpd)がインストールされていることを確認する。インストールされている場合、バージョン情報が取得できるので、以下のコマンドでバージョン情報を確認することで、インストール確認とする。
httpd -v

画像31

Webサーバとして利用するためには一般的に以下の4つの条件を満たす必要がある。
 1)サーバのOS上のFireWallでミドルウェアのリッスンポート(tcp/80)が空い
  ている事
 2)ミドルウェア(Apache)が起動していること
 3)ネットワーク上にあるサーバにクライアントから疎通が可能であること
  NATやルーティングが適切になされてること
 4)ネットワーク上にあるFireWall(関所の役割を持つ)でクライアントから   
  サーバへhttpプロトコルの通過を許可してること
上記1)から4)の条件で、考慮する必要があるもの、考慮が不要な物を振り分ける。まず、1)に関しては、「Amazon Linux 2」でFireWallが有効になってないので、考えない。次に、3)に関しても、すでに「SSH接続」という別のプロトコル(コンピュータ同士が通信する規約)でアクセスできることを確認したので、不要である。残りの2)と4)に関しては、作業が必要になる。

「2)ミドルウェア(Apache)が起動していること」に関する設定に関して、
3つのコマンドを実行する。
systemctl enable httpd
systemctl start httpd
systemctl status httpd
コマンドのオプションの意味を説明する。
 ・「enable」はサーバを再起動した際にサービスを自動的に起動するよう 
  にするサブコマンド
 ・「start」はサービスを起動するサブコマンド
 ・「status」はミドルウェアの状態を確認するサブコマンド
 ・「httpd」(Apache)は今回指定するサービス
※以下差し替え

スクリーンショット 2021-09-19 21.01.23
スクリーンショット 2021-09-19 21.03.02

最後に「4)ネットワーク上にあるFireWall〜」では、AWSコンソールで、
「インバウンドルール」にて、httpとsshを許可する設定を作成する。
左側のメニューで「ネットワーク&セキュリティー>セキュリティーグループ」をクリックする。「セキュリティグループを作成」ボタンをクリックする。

画像34

インバウンドルールは、クライアント(我々の手元にあるマシーン)からサーバ(AWSのインスタンス)の向きで、どのようなプロトコル(通信のお約束)を通過させるか、通信を許可するクライアントのIPアドレスをどう制限するかを決めることで、通信の制御をかけている。今回は下の図のように設定する。各設定項目の中身を見ていプロトコルは通信のお約束で、TCPという物を使用する。ポートはSSHで利用する22番とhttpで利用する80番を設定する。なお、どのマシーンからでもアクセスできるように「0.0.0.0/0」としている。SSHの公開鍵がああれば誰でもログインできるので注意すること…

画像35

そのまま下にスクロールして、「セキュリティグループを作成」ボタンをクリックする。

画像36

セキュリティグループ画面に遷移して、セキュリティーグループが作成されていることを確認する。

画像37

左側のメニューで「インスタンス>インスタンス」をクリックする。
作成したインスタンス「test_server」をクリックして、下側にある。「セキュリティー」をクリックする。「インバウンドルール」の箇所を見ると、プロトコルがTCPでポートが22番の通信がサーバ側に届くように設定されている為、SSH接続しか現状できない。「test_server」に先ほど作成したポリシーグループを適用する。
画面右上にある「アクション」をクリックする。さらに、「セキュリティ>セキュリティグループを変更」を押下する。

画像38

画面遷移して、検索窓をクリック、先ほど作成したセキュリティグループ「test_group」を入力して、一覧から選択する。「保存」ボタンをクリックする。

画像39

2つ上のキャプチャーと同じ項目を開き「インバウンドルール」にSSH(TCP/22)とHTTP(TCP/80)が許可されていれば、いよいよWebサーバにアクセスする。まずはブラウザを立ち上げて、Welcomページが表示されることを確認する。以下の手順で確認する。
 1)インスタンスのパブリックIPv4のアドレス(Elastic IP)をコピー
 2)ブラウザを立ち上げて、URLバーに以下を入力
  http://<1)のIPアドレス>※
 3)エンターを押下して、以下の画面に遷移することを確認する。
※httpsで接続するやり方は別途記事を作成します。

画像40


いいなと思ったら応援しよう!