RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【AWS入門】webサーバー構築

アイキャッチ画像

目次


はじめに

初めましてこんにちは!新卒1年目のkirrksです。今回は、一度は耳にしたことがあるクラウドサービス「AWS」に フォーカスし、Webサーバーの構築を通してAWSの主要サービスはそれぞれどのような使い方をするのかをざっく りと学べる内容となっております。AWSってどんなのも?」「AWSを利用してサーバ構築をしてみたい」という 方々のお力になれればと思います。今回は初めてAWSに触れる方向けの内容となっておりますので、「Webサーバ ーの構築方法を知りたい!」という方は目次から飛んでいただければと思います。


AWSとは

AWS(Amazon Web Services)とはクラウドコンピューティングサービスの一つです。クラウドコンピューティング サービスを簡単に言えば、サーバーやネットワークなどをインターネット経由で貸してくれるサービスで、いつで もどこからでも始めることができます。Amazon S3Amazon VPCという言葉を耳にしたことがあるのではないで しょうか?これらはAWSが提供しているサービスの名前です。AWSではさまざまなサービスを組みあわせることによって、あらゆるアプリケーションやインフラを実現することができます。また、バラバラの事業者からそれぞれ借りなければならなかったインフラを、一括で借りれること、OSやWebサーバー、データベースサーバーなどに必要なソフトウェアまで丸ごと手配することができます。


AWSの主要なサービについて

ここではAWSでよく使われる主要サービスについて、特徴や利用用途などを踏まえながら紹介していきます。

Amazon VPC

Amazon VPC(Amazon Virtual Private Cloud)とは、AWSの提供するAWSアカウント専用の仮想ネットワークです。ネット ワークやサブネットの範囲、ルートテーブルやネットワークゲートウェイの設定など、仮想ネットワーキング環境を設定できます。

Amazon EC2

Amazon EC2(Amazon Clastic Compute Cloud)とは、AWS上でコンピューティングキャパシティーを提供するサービスです。 サーバに必要なものを一式で借りることができます。

Amazon S3

Amazon S3(Amazon Simple Storage Service)とは、AWS上でデータをオブジェクト単位で管理する形式のオブジェクトストレージ サービスです。大きな特徴としては、多機能であることです。誰でも簡単に利用できるようさまざまな機能が用意されています。

Amazon RDS

Amazon RDS(Amazon Relational Database Service)とは、AWS上でリレーショナルデータベースである6種類の製品を、最適な動作条件で利用できるサービスです。具体的にはAmazon AuroraPostgreSQLMySQLMariaDBOracle Database、 SQL Serverに対応しています。

Amazon Route53

Amazon Route53とは、AWS上のDNSドメインネームサービス)です。DNSとはWebブラウザに入力したURLを「IPアドレス」変換する 仕組みです。これを名前解決といいます。

ELB

ELB(Elastic Load Balancing)とはAWSが提供するロードバランサーです。ロードバランサーとは、サーバーに集中するアクセス(トラフィック) を、複数のサーバやネットワークに振り分けるしくみです。1つのサーバにかかる負荷を分散させるので、負荷分散装置ともいいます。

CloudWatch

CloudWatch(Amazon Cloud Watch )とは、AWS内部のリソースを監視するためのツールです。基本的に無料で利用することができます。 また、マネージドサービスとして動作しているため、CloudWatch自身を監視する必要はありません。

Billing and Cost Management

Billing and Cost Managementとは、AWS料金見積ツールで、見積もりや予算に関連する機能を提供しています。AWSのアカウントの作成や ログインは不要で、誰でも無料で利用することができます。


環境準備

では実際にAWSのサービスを利用してWebサーバーを構築するための準備を行っていきます。

AWS登録

以下のリンクからAWSへの登録をお願いします。 AWSにログインする際は、ルートユーザーではなく、IAMユーザでログインしましょう。
aws.amazon.com


Webサーバーの構築

ではこれからAWS上にWebサーバの構築を行っていきます。
手順としては以下のようになります。

  1. 仮想ネットワーク作成(AWS)
    1. VPC作成
    2. サブネット作成
    3. インターネットゲートウェイ作成
    4. ルートテーブル作成
    5. セキュリティグループ作成

  2. Webサーバーを用意 (AWS)
    1. キーペア作成
    2. EC2インスタンス作成
    3. SSH接続
    4. Apacheインストール
    5. HTMLファイル配置

  3. ロードバランサーを用意(AWS)
    1. ターゲットグループ作成
    2. ロードバランサー作成

  4. 独自ドメインとDNSを用意(AWS)
    1. ドメイン名取得
    2. パブリックDNSにリソース追加
    3. SSLサーバー証明書を発行


1. 仮想ネットワーク作成(AWS

ここからAWSのリソースを作成していきます。 まず、インフラの管理者が自由に様々なサービスを構築できるようAWS上に仮想ネットワーク作成します。

1-1. VPC作成

それでは、AWSマネジメントコンソールからVPCを作成していきます。
f:id:kirrks:20211011113249p:plain

まず、AWSコンソール画面の左上にある「サービス」メニューから、VPCダッシュボードを開き、[VPCを作成]をクリックします。 f:id:kirrks:20211020103526p:plain

VPC作成」画面が表示されるので、以下のように入力/選択します。 f:id:kirrks:20211018081938p:plain

入力/選択が終わったら、一番下の[VPCを作成]をクリックします。
f:id:kirrks:20211018081949p:plain

これでVPCが作成されました。

1-2. サブネット作成

今回は冗長化のために2つのwebサーバをAWS上に構築予定なので、アベイラビリティーゾーンとパブリックサブネットも2つ作成していきます。
作成するサブネットの情報は以下のようになっています。

パブリックサブネット1
VPC ID : VPCのID
サブネット名 : web-test-subnet-public01
アベイラビリティーゾーン : ap-northeast-1a
IPv4 CIDRブロック : 10.0.0.0/20

パブリックサブネット2
VPC ID : VPCのID
サブネット名 : web-test-subnet-public02
アベイラビリティーゾーン : ap-northeast-1c
IPv4 CIDRブロック : 10.0.16.0/20

それでは、AWSマネジメントコンソールからサブネットを作成していきます。 VPCダッシュボードから「サブネット」を開き、[サブネットを作成]をクリックします。
f:id:kirrks:20211020104057p:plain


「サブネット作成」画面が表示されるので、以下のように入力/選択します。
入力/選択が終わったら、一番下の[サブネットを作成]をクリックします。 f:id:kirrks:20211018082816p:plain f:id:kirrks:20211018082825p:plain


これでパブリックサブネット1が作成されました。
同じ手順でパブリックサブネット2の作成も行ってください。 f:id:kirrks:20211018083004p:plain

2つのサブネットが作成されているのを確認します。
f:id:kirrks:20211018083014p:plain

1-3. インターネットゲートウェイ作成

ここではインターネットとVPC内のリソースが相互に通信するために、インターネットゲートウェイを作成します。
それでは、AWSマネジメントコンソールからAWS上にインターネットゲートウェイを作成していきます。
VPCダッシュボードから「インターネットゲートウェイ」を開き、[インターネットゲートウェイの作成]をクリックします。
f:id:kirrks:20211020103656p:plain

「インターネットゲートウェイ作成」画面が表示されるので、以下のように入力します。
入力/選択が終わったら、一番下の[インターネットゲートウェイを作成]をクリックします。 f:id:kirrks:20211018083548p:plain

これでインターネットゲートウェイが作成されました。
次に作成したインターネットゲートウェイVPCにアタッチします。
作成したインターネットゲートウェイの右側にある「アクション▼」から「VPCにアタッチ」を選択します。
f:id:kirrks:20211020104000p:plain

次にアタッチするVPCを選択します。
選択が終わったら、[インターネットゲートウェイのアタッチ]をクリックします。
f:id:kirrks:20211018084004p:plain
これでインターネットゲートウェイVPCにアタッチされました。
f:id:kirrks:20211020103704p:plain

1-4. ルートテーブル作成

ここではAWS上のサブネット間通信経路を設定するために、ルートテーブルを作成します。
作成するパブリックサブネット用ルートテーブルの情報は以下のようになっています。

名前タグ : web-test-rt-public
VPC : 先ほど作成したもの

それでは、AWSマネジメントコンソールからルートテーブルを作成していきます。
VPCダッシュボードから「ルートテーブル」を開き、[ルートテーブルを作成]をクリックします。
f:id:kirrks:20211020104501p:plain

以下のように設定が終わったら、[作成]をクリックします。
f:id:kirrks:20211018084939p:plain

これでパブリックサブネット用ルートテーブルが作成されました。
次にルートテーブルの設定を行います。
作成したルートテーブルにチェックをし、「ルート」タブを選択して[ルートの編集]をクリックします。
f:id:kirrks:20211020104209p:plain

「ルートの編集」画面が表示されるので、以下のように入力/選択します。
入力/選択が終わったら、一番下の[変更の保存]をクリックします。
f:id:kirrks:20211018085108p:plain

次にルートテーブルが属するサブネットを指定します。
「サブネットの関連付け」タブを選択して、「サブネットの関連付けの編集」をクリックします。 f:id:kirrks:20211020104651p:plain


以下のように関連付けるサブネットにチェックを入れたら、[保存]をクリックします。
f:id:kirrks:20211018085125p:plain

これでパブリックサブネット用ルートテーブルが完成しました。

1-5. セキュリティグループ作成

ここでは外部からのアクセスに制限をつけるために、AWS上にセキュリティグループを作成します。
作成するセキュリティグループの情報は以下のようになっています。

セキュリティグループ名 : wet-test-sg-elb
説明 : for load balancer
VPC : 先ほど作成したVPC
インバウンドルール : (タイプ)HTTP   (ソース)0.0.0.0/0
                   (タイプ)HTTPS  (ソース)0.0.0.0/0
                   (タイプ)SSH    (ソース)マイIP

それでは、AWSマネジメントコンソールからセキュリティグループを作成していきます。
VPCダッシュボードから「セキュリティグループ」を開き、[セキュリティグループを作成]をクリックします。
f:id:kirrks:20211020104725p:plain

「セキュリティグループ作成」画面が表示されるので、以下のように入力/選択します。
入力/選択が終わったら、一番下の[セキュリティグループを作成]をクリックします。
f:id:kirrks:20211018085801p:plain f:id:kirrks:20211020104850p:plain

これでセキュリティグループが作成されました。
以上で仮想ネットワーク作成が完了しました。


2. Webサーバーを用意 (AWS

ここではブラウザからリクエストを受けて、Webページを返すためにAWS上にWebサーバを作成します。

2-1. キーペア作成

まず、SSH接続を行うときに必要となるキーペアの作成をします。
それでは、AWSマネジメントコンソール画面の左上にある「サービス」メニューから、EC2ダッシュボードを開きます。
そこから「キーペア」の画面を開き、[キーペアを作成]をクリックします。
f:id:kirrks:20211018090219p:plain

「キーペア作成」画面が表示されるので、以下のように入力/選択します。
入力/選択が終わったら、一番下の[キーペアを作成]をクリックします。
f:id:kirrks:20211018090230p:plain

これでキーペアが作成されました。そのときキーペアがタウンロードされているのを確認してください。 f:id:kirrks:20211018090240p:plain


2-2. EC2インスタンス作成

次に、AWSマネジメントコンソールからEC2(インスタンス)を作成していきます。
まず、AWSコンソール画面の左上にあるサービスメニューから、EC2のダッシュボードを開きます。
そこから「インスタンスを起動」をクリックします。
f:id:kirrks:20211018091931p:plain


「ステップ1:Amazonマシンイメージ(AMI)」という画面が表示されます。
ここでは「Amazon Linux 2 AMI (HVM), SSD Volume Type」を選択します。
f:id:kirrks:20211018091945p:plain


「ステップ2:インスタンスタイプの選択」という画面が表示されます。
今回は無料枠対象の「t2.micro」を選択し、[次のステップ]をクリックします。 f:id:kirrks:20211018091958p:plain


「ステップ3:インスタンスの詳細の設定」という画面が表示されます。
以下のように入力/選択します。
ネットワークでは先ほどVPC作成時に一緒に作成したものを選択してください。
自動割り当てパブリックIPも有効に変更してください。
その他の設定に関しては、今回は変更せず、[次のステップ]をクリックします。
f:id:kirrks:20211018092121p:plain


「ステップ4:ストレージの追加」という画面が表示されます。
今回はデフォルトのままで問題ないので、[次のステップ]をクリックします。
f:id:kirrks:20211018092138p:plain


「ステップ5:タグの追加」という画面が表示されます。
「タグの追加」をし、[次のステップ]をクリックします。
f:id:kirrks:20211018092149p:plain


「ステップ6:セキュリティグループの設定」という画面が表示されます。
[既存のセキュリティグループ]を選択し、先ほど作成したセキュリティグループにチェックを入れ、[確認と作成]をクリックします。
f:id:kirrks:20211020104941p:plain


「ステップ7:インスタンス作成の確認」という画面が表示されます。
内容に誤りがないことを確認後、[起動]をクリックします。
f:id:kirrks:20211018092334p:plain


SSH接続の際に使用する、キー選択画面が表示されます。
先ほど作成したキーペアを選択/チェックし、[インスタンスの作成]をクリックします。 f:id:kirrks:20211018092345p:plain


これでWebサーバー用のインスタンスAWS上に作成されました。
WebサーバーはAWS上に2つ作成するので、2つ目(web-test-02)も同じ手順で作成してください。

2-3. SSH接続

ここではWebサーバ用インスタンスSSH接続を行います。
今回はログインユーザ名を「ec2-user」とする必要があるので注意してください。(rootユーザではログインできません)
また、ダウンロードしたキーペアを登録します。(キーがないとログインできません)
以下のように接続できれば成功です。
f:id:kirrks:20211020101743p:plain

2-4. Apacheインストール

SSH接続することができたので、ここではWebサーバにミドルウェアApache」をインストールしていきます。
まず、ユーザをrootに切り替えます。

#sudo su -

ミドルウェアアップデートをして脆弱性の排除を行います。

# yum check-update 
# yum upgrade

Apacheをインストールします。

# yum install httpd

Apache自動起動する設定に変更しておきます。
enabledになっていれば自動起動設定になっています。

# systemctl enable httpd.service
# systemctl list-unit-files | grep httpd.service

Apacheを起動してステータスを確認します。 Activeがactive(runing)になっていれば、起動しています。

# systemctl start httpd.service
# systemctl status httpd.service

2-5. HTMLファイル配置

こちらのコマンドで最初に表示されるwebページのファイルを作成します。

# vi /var/www/html/index.html

簡単ではありますが、以下のようなHTMLを記載します。

<!DOCTYPE html>
<html lang="ja"> 
  <head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta name="description" content=""> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title>DNS TEST</title> 
  </head> 
  <body> 
    <h1>Successful Access!</h1> 
  </body> 
</html>

これでHTMLの作成・配置が完了しました。


3. ロードバランサーを用意(AWS

ここではWebサーバに対するリクエストの分散とSSL処理を実現するためにAWS上にロードバランサーを作成します。

3-1. ターゲットグループ作成

まず、AWS上でロードバランサーからWebサーバにアクセスするときに関係する設定を行うターゲットグループの作成をします。
それでは、AWSマネジメントコンソール画面の左上にある「サービス」メニューから、EC2ダッシュボードを開きます。
そこから「ターゲットグループ」の画面を開き、[Create target group]をクリックします。
f:id:kirrks:20211018111125p:plain

「ターゲットグループ作成」画面が表示されるので、以下のように入力/選択します。
入力/選択が終わったら、一番下の[Next]をクリックします。
f:id:kirrks:20211018111137p:plain f:id:kirrks:20211018111149p:plain f:id:kirrks:20211018111202p:plain

「ターゲット登録」画面が表示されるので、作成したEC2にチェックをいれ、「Include as pending below」をクリックします。
すると、登録済みターゲットにインスタンスが追加されます。
(先ほど作成した2つ目のインスタンスも追加してください)
f:id:kirrks:20211018111212p:plain

正しく追加したら、[Create target group]をクリックします。
f:id:kirrks:20211018111228p:plain

これでターゲットグループが作成されました。

3-2. ロードバランサー作成

ターゲットグループが作成できたので、ロードバランサーの作成をします。
EC2のダッシュボードから「ロードバランサー」を開き、[ロードバランサーの作成]をクリックします。
f:id:kirrks:20211018105449p:plain

ロードバランサーの種類選択画面が表示されます。
ここではHTTP/HTTPS通信に特化したロードバランサーを選択するために、Application Load Balancer の[Create]をクリックします。 f:id:kirrks:20211018105503p:plain


ロードバランサー作成」画面が表示されるので、以下のように入力/選択します。
f:id:kirrks:20211019084145p:plain

サブネットには先ほど作成した2つを選択します。
f:id:kirrks:20211019084153p:plain

セキュリティグループには先ほど作成したものを追加します。
f:id:kirrks:20211019084200p:plain

ターゲットグループには先ほど作成したものを選択します。
f:id:kirrks:20211019084208p:plain

概要が間違っていなければ、[Create load balancer]をクリックします。
f:id:kirrks:20211019084215p:plain

これでロードバランサーが作成されました。


4. 独自ドメインDNSを用意(AWS

ここではAWS上でIPアドレスを人間にわかりやすい表現にしたドメイン名の作成、暗号化された通信(HTTPS)を行うためのSSL証明書を発行していきます。

4- 1. ドメイン名取得

それではAWSマネジメントコンソール画面の左上にある「サービス」メニューから、Route53のダッシュボードを開きます。
そこから「登録ドメイン」の画面を開き、[ドメインの登録]をクリックします。
f:id:kirrks:20211018114544p:plain

次にドメイン名を選択します。
AWSドメイン名を選択するときは、固有の名称+トップレベルドメインTLD)という組み合わせになります。
今回は以下のようなドメインを取得します。
f:id:kirrks:20211019084631p:plain

チェックをクリックし、指定したドメインが取得可能であれば、[カートに入れる]をクリックし、最後に[続行]をクリックします。
f:id:kirrks:20211018114639p:plain

次に、ドメインの連絡先を登録します。
「プライバシーの保護」を有効化することによって、本来公開される連絡先の情報を非公開にできるので、忘れないようにしてください。
入力に誤りがないことを確認後、[続行]をクリックします。
f:id:kirrks:20211018114647p:plain

初めてAWSドメインを取得する場合、以下のダイアログが表示されることがあるので、[同意します]をクリックします。
f:id:kirrks:20211018114832p:plain

最後に連絡先の詳細の確認画面が表示されるので、以下のように設定後、[注文を完了]をクリックします。
f:id:kirrks:20211018114841p:plain

ドメインの取得が完了するまでは、注文したドメインはRoute53のダッシュボードの「保留中のリクエスト」で確認できます。
f:id:kirrks:20211018114849p:plain

購入手続きが完了すると、Route53のダッシュボードの「登録済みドメイン」で確認できます。
f:id:kirrks:20211018114855p:plain

4-2. パブリックDNSにリソース追加

Route53経由でドメインを取得すると、自動的に取得したドメインを管理するパブリックDNSが作成されます。
ここではパブリックDNSに、外部から直接アクセスされるリソース情報(ロードバランサー)を追加します。
それではAWSマネジメントコンソール画面の左上にある「サービス」メニューから、Route53のダッシュボードを開きます。
そこから「ホストゾーン」の画面を開き、ドメインの選択後、[詳細を表示]をクリックします。
f:id:kirrks:20211018115817p:plain

「ホストゾーン」の詳細画面が表示されるので、[レコードを作成]をクリックします。 f:id:kirrks:20211018115824p:plain


まず、追加するルーティングポリシーを以下のように選択し、[次へ]をクリックします。
f:id:kirrks:20211018115830p:plain

次にレコード設定画面が表示されるので、[シンプルなレコードを定義]をクリックします。
f:id:kirrks:20211018115837p:plain

「シンプルなレコードを定義」という画面が表示されるので、以下のように入力します。
ここでは先ほど作成したロードバランサーを選択しています。
設定が終わったので、[レコードを作成]をクリックします。
f:id:kirrks:20211020105828p:plain

これでロードバランサーの情報をパブリックDNSに追加できました。

4- 3. SSLサーバー証明書を発行

最後にSSL証明書を発行します。
それではAWSマネジメントコンソール画面の左上にある「サービス」メニューから、AWS Certificate Managerのダッシュボードを開きます。
そこから「証明書のプロビジョニング」の[今すぐ始める]をクリックします。
f:id:kirrks:20211018121457p:plain

次に取得するSSLサーバー証明書の種類を選択します。
ここではインターネットで公開するドメインのため、「パブリック証明書のリクエスト」をチェックし、[証明書のリクエスト]をクリックします。
f:id:kirrks:20211018121506p:plain

次に、証明書で証明するドメイン名を指定します。ここで注意することとして、証明するドメインは、実際にブラウザで入力するドメイン(FQDN)です。
先ほどホストゾーンに登録したロードバランサーの名前を追加し、[次へ]をクリックします。
f:id:kirrks:20211018121513p:plain

次にドメインの検証方法を指定します。
これはAWSがどのようにドメインの申請者を検証するかということです。
今回はRoute53を使ってDNSサーバを作成しているので、「DNSの検証」を選択して[次へ]をクリックします。
f:id:kirrks:20211018121521p:plain

タグは、追加する必要がないので、そのまま[確認]をクリックします。 f:id:kirrks:20211018121532p:plain

最後に入力の確認を行い、誤りがなければ[確定とリクエスト]をクリックします。
f:id:kirrks:20211018121714p:plain

DNSの検証」を選択したので、具体的な検証方法が表示されます。
Route53の場合は「Route53でのレコードの作成」が用意されているので、こちらをクリックします。 f:id:kirrks:20211018121722p:plain


Route53に対する設定内容がダイアログで表示されるので、問題がなければ[作成]をクリックします。
f:id:kirrks:20211018121730p:plain

これでSSL証明書の申請が終了しました。しばらくは「状況」欄に「検証中」と表示されますが、約5~10分で「発行済み」なります。 f:id:kirrks:20211018121738p:plain


次にAWS上で発行したSSLサーバー証明書を使って、HTTPSで待ち受けをするリスナーをロードバランサーに追加します。
AWSマネジメントコンソール画面の左上にある「サービス」メニューから、EC2ダッシュボードを開きます。
そこから「ロードバランサー」の画面を開き、先ほど作成したロードバランサーを選択します。
そして「リスナー」タブを選択し、[リスナーの追加]をクリックします。
f:id:kirrks:20211018121954p:plain

次にリスナーの設定を以下のようにします。
すべての設定が終わったら、[リスナーの追加]をクリックします。
f:id:kirrks:20211018122007p:plain

これでリスナーの追加が完了しました。


動作確認

最後にwebページが正常に表示されるか確認します。
URL入力欄に「https://{作成したFQDN}」を入力します。
無事表示されました!
f:id:kirrks:20211020100849p:plain


終わりに

長くなりましたが、簡単にAWS上でWebサーバの構築・Webページの公開ができたのではないでしょうか。
今回はシンプルにAWSでwebサーバを作成しましたが、
・プライベートサブネット
・NATゲートウェイ
・踏み台サーバー
・RDS
・S3
など、よりセキュリティーを高めたり、拡張したりすることもAWSではできます。
AWSでは他にも様々なことが出来るので、興味がある方はぜひ挑戦してみてください。


参考文献

中垣健志(2021)「AWSではじめるインフラ構築入門」翔泳社
小笠原種高(2021)「AWSのしくみと技術がしっくりわかる教科書」技術評論家者


  • エンジニア中途採用サイト
    ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
    ご興味ありましたら是非ご確認をお願いします。
    20210916153018
    https://career-recruit.rakus.co.jp/career_engineer/

  • カジュアル面談お申込みフォーム
    どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
    以下フォームよりお申込みください。
    forms.gle

  • イベント情報
    会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください! rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.