Amazon EC2で爆速WEBサーバ作成

Tech DivのJ.YAMAGUCHIです。
前回はLamdaについて書きましたが、今回はAWSの中でも基本サービスになるEC2について書きたいと思います!

書きたいこと

  • EC2インスタンスを新規で作成してみる
  • ELBでロードバランシングしてみる

今回やりたいことの全体図

VPCの作成

それでは早速VPCの作成から入っていきたいと思います。
VPCダッシュボードの「VPCウィザードの起動」からVPCを作成していきたいと思います。

VPCの設定画面では、いくつかのパターンでVPCとサブネットを作成することができます。
今回は全体図に近い「1個のパブリックサブネットを持つVPC」で作成していきたいと思います。

入力項目は下記のようにしました。

  • IPv4 CIDRブロック:10.0.0.0/16(デフォルト入力)
  • IPv6 CIDRブロック :IPv6 CIDRブロックなし(デフォルト入力)
  • VPC名:任意のVPC名
  • パブリックサブネットのIPv4 CIDR:10.0.0.0/24
  • アベイラビリティゾーン:ap-northeast-1a(もう一つサブネット作るときは別のアベイラビリティゾーンを指定します。)
  • その他入力項目任意

入力が完了したら「VPCの作成」を押してVPCを作成します。

VPCとパブリックサブネットが作成できたら、もう一つサブネットを作成していきます。
サブネットの作成」を押します。

入力項目を入力していきます

  • 名前タグ:任意
  • VPC:先ほど作成したVPC
  • アベイラビリティゾーン:ap-northeast-1c(ELBでバランシングさせたいので先ほど作成したアベイラビリティゾーンとは別のものを選択)
  • IPv4 CIDRブロック :10.0.1.0/24 ※任意。CIDRがあまりわかっていないので適当です!

入力が完了したら「作成」を押します。

これで一つのVPCと二つのサブネットが作成されました!!

できた2つのサブネットを1つのルートテーブルに紐づけます。

また、ルートテーブルの編集からインターネットゲートウェイを追加します。(igw-のものを選択)
※ここを追加しないとEC2にログインできなくなります。

EC2インスタンスの作成

次にEC2インスタンスを作成していきます。

EC2サービスの画面から「インスタンスを起動」を押して進めていきます。

1. AMIの選択
  ここでサーバのイメージを選択していきます。

2.インスタンスタイプの選択
 ここでインスタンスのCPU、メモリ、ストレージを選択していきます。

3.インスタンスの設定
 ここでインスタンスの詳細な設定を行います。
 ネットワーク:先ほど作成したVPC
 ネットワーク:先ほど作成したap-northeast-1aのサブネット
 自動割り当てパブリックIP:有効
 その他入力項目:デフォルト

高度な詳細をクリックしユーザデータを入力すると便利です!
WEBサーバのように毎回インスタンスを作成するときに定型的なコマンドをここに入力しておくと、自動的にインスタンス作成時にコマンドを流してくれます。
私の場合はapacheのインストールコマンドを入力しました!

#!/bin/bash
# サーバーの設定変更
sed -i 's/^HOSTNAME=[a-zA-Z0-9\.\-]*$/HOSTNAME=hoge-bash/g' /etc/sysconfig/network
hostname 'hoge-bash'
cp /usr/share/zoneinfo/Japan /etc/localtime
sed -i 's|^ZONE=[a-zA-Z0-9\.\-\"]*$|ZONE="Asia/Tokyo"|g' /etc/sysconfig/clock
echo "LANG=ja_JP.UTF-8" > /etc/sysconfig/i18n
# アパッチのインストール
sudo yum update -y
sudo yum install httpd -y
sudo service httpd start
sudo chkconfig httpd on

 4.ストレージの追加
  ここではストレージのサイズやボリュームタイプを選択します。

5.タグの追加
 ここではインスタンスに付与できるタグを追加します。
 私は名前タグだけ付けました。

6.セキュリティグループの設定
 ここではインスタンスのトラフィックを制御するルールの設定を行います。
 デフォルトではSSHのみですが、WEBサーバなのでHTTPとHTTPSを追加します。

7.確認
 ここでは今まで設定してきた内容の一覧を確認します。
 問題がなければ「起動」を押します。
 起動を押すとキーペアの確認が出てきます。EC2にログインするために必要なpemファイルのダウンロードができるのでここで「新しいキーペアの作成」で作成しておきます。
 それが終了するとインスタンスの作成ができます!

実際にログインしてみましょう!!
Tera Termでのログイン方法を書いておきます。
接続の画面で
ホスト(T):EC2インスタンスの「IPv4 パブリック IP」の値
サービス:SSH
を選択してOKを押します。
次に
ユーザ名(N):ec2-user
パスフレーズ (P):なにも入れない
RSA/DSA/ECDSA/ED25519鍵を使う:インスタンス作成時に作成したpemファイルを指定
そのほかはデフォルトでOKを押します。

ログインすることができました!!

/var/www/html配下に
に下記内容でindex.htmlを作成します。
バランシングした際にわかりやすい名前にしました。

<html><h1>Hello CCI! ap-northeast-1a</html></h1>

ブラウザからIPアドレスでアクセスしてみましょう!!

先ほど作成したHTMLが返却されていますね!

同様の手順でもう1つインスタンスを作成していきましょう!!
先ほどと異なるところの注意点を下記に書いておきます。
3.インスタンスの設定
 サブネット:ap-northeast-1c(もう一つのほうを選択)
6.セキュリティグループの設定
 既存のセキュリティグループを選択するから先ほどインスタンスを作成したときに作成したセキュリティグループを選択
7 . 確認
 キーペアは既存のキーペアを選択

こちらもサーバにログインしてHTMLファイルを作成しましょう
内容はわかりやすいように下記にしました。

<html><h1>Hello CCI! ap-northeast-1c</html></h1>

こちらもHTMLが返却されました!!これでEC2インスタンスの準備は完了です。

ELBでバランシングしてみる

EC2のロードバランサー画面から「ロードバランサーの作成」を押して、ロードバランサーを作成していきます。

今回はApplication Load Balancer(ALB)を選択します。

1.ロードバランサーの設定
 下記を入力していきます。
 名前:任意
 スキーム:インターネット向け
 IPアドレスタイプ:ipv4
 ロードバランサーのプロトコル:デフォルト(HTTP)
  ※HTTPSを追加すると次のセキュリティ設定の構成で証明書等を入力しないといけないので面倒です。
 VPC:先ほど作成したVPC
 アベイラビリティゾーン:先ほど作成したap-northeast-1aと ap-northeast-1cをチェック

2.セキュリティ設定の構成
 HTTPのみの場合は特に設定する項目はありません。

 3.セキュリティグループの設定
 先ほどEC2インスタンス作成の時に作成した、セキュリティグループを選択します。

4.ルーティングの設定
 名前だけ任意の入力をし、他項目はデフォルトでOKです。

5.ターゲットの登録
 先ほど作成したEC2インスタンスが2つ出てくるので、選択して「登録済みに追加」を押して追加します。

これでALBの作成は完了です。作成が完了したら、DNS名をコピーしてブラウザから確認してみましょう!!反映までに少し時間がかかるかもしれないです。

同じURLから二つのEC2インスタンスに配置したHTMLの内容が返却されて、バランシングされていることがわかりますね!
これで完成です!!!

まとめ

VPCの作成~EC2インスタンスの立ち上げとELBによるバランシングでWEBサーバを構築してみました。
セキュリティのことを何も考えなければ30分~1時間くらいで構築ができると思います。お手軽ですね。
 (私はブログを下記ながら+EC2インスタンスに入れなくて〇時間かかりましたが。。)
次回のブログにも乞うご期待ください!!(ソリューションアーキテクトとりたいな)