Webサーバーを構築(AWS、EC2)

内容

EC2でWebサーバーを構築する

基礎知識

  • EC2(Elastic Compute Cloud)
    AWSクラウド上の仮想サーバー
    インスタンスとはEC2から立てられたサーバーのこと
  • AMI(Amazon Machine Image)
    インスタンス起動に必要な情報が入ったOSのイメージ、サーバーのテンプレートのようなもの
  • インスタンスタイプ
    →サーバーのスペックを定義したもの
    →アクセス数等に応じて必要なスペックのタイプを選択し、スペックにより料金が異なる
  • ストレージ
    →サーバーにくっつけるデータの保存場所
    →EC2のストレージには、EBS(Elastic Block Store)とインスタンスストアの2種類ある
  • Elastic IP
    AWSから割り振られた固定の「パブリックIPアドレス」のこと
    →このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動・停止にかかわらず常に同じIPアドレスで通信をすることが可能となる
  • SSH
    →サーバーと自分のパソコンをセキュアに繋ぐサービスのこと(EC2にログインする時はSSHを使用する)
    →通信内容が暗号化された遠隔ログインシステム
  • ポート番号
    →プログラムのアドレスで、同一コンピューター内で通信を行うプログラムを識別する時に利用される(住所でいう部屋番号みたいなもの)
  • ウェルノウンポート番号
    →代表的なプログラムが使うポート番号で、0〜1023までの整数値をとる
    例)SSHは22番、SMTPは25番、HTTPは80番、HTTPSは443番
  • 動的に決まる番号
    →49142〜65535までの整数値をとる
  • ファイアウォール
    →ネットワークを不正アクセスから守るために、「通してよい通信だけを通して、それ以外は通さない」機能の総称
    AWSでは、セキュリティグループがファイアウォールの役割を担っている
  • yumコマンド
    Linuxにおけるソフトウェア管理の仕組みで、MacOSにとってのhomebrewと同じ役割を果たす
    yumコマンドを利用することで、yumの管理下にあるプログラムのバージョンを管理したり、一括でアップデートしたりできる
  • パッケージ
    →LinuxOS下におけるある役割/機能をもったプログラムの集合のことで、「ソフトウェア」や「ライブラリ」とも呼べる
  • -yワイオプション
    yum install などのコマンドでは、本当にインストールして良いのか [y/n](「Yes or No」の意味)が問われるので、あらかじめオプションで「-y」を設定する事で「すべての問いにYesで自動的に答える」という設定してコマンドを実行している

Webサーバーの構築

1. EC2インスタンスを設置

  • EC2を開き、インスタンスを選択
  • インスタンスを起動
  • AMIを選択→クイックスタートからAmazon Linux 2を選択
  • インスタンスタイプの選択→無料利用枠のt2.microを選択
  • インスタンスの詳細の設定→ネットワークは設定したpvc、サブネットはpublic、自動割り当てパブリックIPは有効、キャパシティの予約はなし、ネットワークインターフェイスのプライマリIPを設定したIPアドレスの範囲内で設定
  • ストレージの追加
  • タグの追加→キーを「Name」、値を任意で設定
  • セキュリティグループの設定→セキュリティグループ名を先ほど設定した値とする→確認と作成
  • インスタンス作成の確認→起動
  • キーペアを作成→新しいキーペアの作成からキーペア名を任意でを設定→キーペアのダウンロード→インスタンスの作成

2. Elastic IPを作成

さきほど作成した「EC2インスタンス」には作成時にIPアドレスが自動で割り振られている、これを「パブリックIP」と言う
しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点を持っていて、IPが変わってしまうと、設定ファイル等をその都度書き換えなければならない
これを解決してくれるのが「Elastic IP」
インスタンスが停止していても、Elastic IPアドレスが複数存在する場合は料金が発生するため、インスタンスを停止するときには、そのインスタンスと紐づいているElastic IPアドレスも解放する必要がある

  • Elastic IPタブを開き、Elastic IP アドレスの割り当てをクリック
  • AmazonIPv4 アドレスプールにチェックが入ってることを確認後、割り当てをクリック
  • 取得したElastic IPアドレスとEC2インスタンスを紐付け→右上にあるアクションをクリックし、Elastic IP アドレスの関連付けを選択
  • インスタンスにチェックが入っていることを確認→インスタンスの入力欄をクリックし、表示されたインスタンスIDを選択→関連付けるをクリック
  • Elastic IPが設定されているか確認

3. ファイアウォールを設定

  • 現状SSH以外ではWebサーバーにアクセスできない
  • EC2ダッシュボードのインスタンス→セキュリティ→セキュリティグループ→インバウンドルールの編集
  • ルールの追加→タイプ「HTTP」、ソース「0.0.0.0/0」と「::/0」→保存

4. Apacheをインストール

  • SSHでサーバーにログイン

ターミナル

% cd ~

% mkdir ~/.ssh
# .sshというディレクトリを作成
# File existsとエラーが表示されたとしても、.sshディレクトリは存在しているのということなので、そのまま進む

% mv Downloads/ダウンロードした鍵の名前.pem .ssh/
# mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動する
# 「ダウンロードした鍵の名前」の部分は、Finderでダウンロードフォルダから「〜.pem」というファイルを探し、「〜」の部分の名前に置き換える

% cd .ssh/

% ls
# pemファイルが存在するか確認

% chmod 600 ダウンロードした鍵の名前.pem
# 「ダウンロードした鍵の名前」はFinderのダウンロードフォルダから探す

% ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスに紐付けたElastic IP
# 「作成したEC2インスタンスに紐付けたElastic IP」は自身のものに編集
  • Elastic IPを設定していない場合は以下の通りパブリック IPv4 アドレスをコピーして記述する
  • マネジメントコンソールでEC2ダッシュボードのインスタンスを選択
  • 作成したインスタンスのパブリック IPv4 アドレスをコピー
  • 初めてログインするサーバーの場合信頼できるかyes/noで聞かれるため、yesとうつ
    ssh接続は、一定時間操作をせずにいるとタイムアウトしてしまう、その場合は「ssh -i 〜」のコマンドを再度実行することでサーバーに接続できる
  • 何も作業がない時は「exit」でログアウトしておく
  • 再度ログイン(ssh -i 〜)
  • sudo lsof -i -n -Pコマンドで右端のNAME欄で、LISTENを書かれているものが受け入れているポート番号
  • Apacheをインストール

ターミナル

# パッケージをアップデート
[ec2-user@ip-10-0-10-10 ~]$ sudo yum update -y

# Apacheをインストール
[ec2-user@ip-10-0-10-10 ~]$ sudo yum -y install httpd

# Apacheを起動
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl start httpd.service

# 起動しているか確認
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl status httpd.service

# その他の確認方法
[ec2-user@ip-10-0-10-10 ~]$ ps -axu

# サーバー起動時にApacheも起動されるように設定
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl enable httpd.service

# 自動起動できているか確認
[ec2-user@ip-10-0-10-10 ~]$ sudo systemctl is-enabled httpd.service

以上でWebページを表示するところまで実装

5. 使用しない時は無料枠を超えないように設定変更

次回

ドメインを登録