LoginSignup
13
1

More than 3 years have passed since last update.

初めてAWSを利用したサーバー構築をやってみた

Last updated at Posted at 2020-12-14

概要

こんにちは! Diverse株式会社のgataponです!
今年もアドベントカレンダー書きます!お願いします!

今年は、担当しているサービスがオンプレミスからAWSに置き換わりました。少しずつAWSの機能には慣れていきつつあるのですがAWSを使ったサーバー構築をしたことがないため、まだまだわからないことがたくさんです。
今回はAWSを使ってイチからサーバーを構築してインフラ周りの理解も深めることにしてみました。

AWSの機能や役割などメインにサーバー構築の流れざっとを書いていきます。

利用させてもらった書籍はAmazon Web Services 基礎からのネットワーク&サーバー構築です。

277900_thumb_pc.jpg

構築したサーバーは以下のようになります。

AWS基礎からのネットワーク&サーバー構築.png

VPC内にパブリックサブネットとプライベートサブネットを用意しました。前者にはインターネットに公開されたアプリケーション(本書ではWordpress)とNATゲートウェイを配置。後者にはデータベースを配置しています。プライベートサブネットの配置されたインスタンスはNATゲートウェイを利用してのみインターネットにアクセスすることができます。

VPC

まずは、Amazon VPCを利用して隔離されたネットワークを構築します。構築したネットワークには任意のネットワーク設定ができ、ルーターなどの仮想的なネットワーク機器も配置できます。VPCで利用するプライベートIPアドレスの領域は10.0.0.0/16としました。

サブネット

VPCで割り当てたネットワークを更に分割して利用します。ここで2つのサブネットを作成し、プライベートIPアドレスの領域も割り振ります。

  • パブリックサブネット(10.0.1.0/24)
  • プライベートサブネット(10.0.2.0/24)

どうしてサブネットを分割するのか

サブネットを分割するのには2つの利点があります。

  • 分割しておくことで万が一どちらかが障害を起こしても、片方に影響が出にくくなる
  • それぞれのサブネットに対して別のネットワーク設定ができる
    • パブリックサブネットは外部からの接続を許し、プライベートサブネットは外部からの接続を遮断できる

このように設定することで、アプリケーションは外部の人から見ることができ、かつデータベースへの直接のアクセスは遮断できます。

AWS基礎からのネットワーク&サーバー構築 (1).png

インターネットゲートウェイ

インターネットゲートウェイとはVPCとインターネットの接続を可能にする役割を担っていあす。作成したVPCとサブネットをインターネットに接続するためにはこちらを作成し、まず該当するVPCにリタッチする必要があります。しかし、それだけではインターネットに接続はできません。ルートテーブルの設定が必要になります。

ルートテーブル(ルーティングテーブル)

 「TCP/IP」プロトコルでは、データを細切れにした「パケット」という単位でデータが送受信されます。その中にあるヘッダー情報の一つに「宛先IPアドレス」があります。TCP/IPでは、ネットワーク機器である「ルーター」が確認しながら目的地まで転送します。
 その役割を担うルートテーブルにIPアドレスの扱いを登録しなければいけません。 しかし、AmazonVPC作成時のデフォルトのルートテーブルは以下になっています。

送信先 ターゲット
10.0.0.0/16 local

これはVPC構築時に設定したプライベートIPアドレス領域で、このままではVPC内の通信のみが扱われ、それ以外の宛先のものは破棄されてしまいます。新しくルートテーブルを作成し、パブリックサブネットに割当て、新しく転送先に0.0.0.0/0(転送先が設定されていないときの、デフォルト転送先)、ターゲットに作成したインターネットゲートウェイを追加します。これでパブリックサブネット内からインターネットにアクセスできるようになります。

Webサーバー(EC2)

次に、パブリックサブネット内のEC2インスタンスを起動しssh接続します。
作成したVPC内のパブリックサブネットにインスタンスを作成します。プライベートアドレスは10.0.1.10としました。
EC2インスタンス生成時に生成されるペアキーを利用し、ssh接続ができるようになるのでapacheなどのインストールが行えるようになります。

サーバーの設定が完了したらセキュリティグループの設定を行います。

セキュリティグループ

セキュリティグループはAWSにおけるファイヤーウォールの役割を担っており、インスタンスに対して設定することが出来ます。
EC2インスタンスの作成時にセキュリティグループの設定が可能です。
既存のEC2インスタンスのセキュリティグループではインバウンドルールがssh接続しか設定されていません。
設定されていないIPアドレスを送信元やポート接続を除外するようになっています。
ポート80を開放してブラウザでサイトが確認できるようにします。

タイプ プロトコル ポート範囲 ソース 説明
カスタムTCP TCP 80 0.0.0.0/0 -

設定が完了したら、EC2インスタンスのパブリックIPアドレスをブラウザに叩くとapacheのデフォルトページが表示されます。

DBサーバー(EC2)

次に構築したVPC内のプライベートサブネットにMariaDB用のEC2インスタンスも立ち上げます。
自動で割り当てられるパブリックIPアドレスは無効にしておきます。プライベートIPアドレスは10.0.2.10です。
ペアキーはWebサーバーと同じものを利用します。

セキュリティグループはデフォルトで設定されているsshプロトコルの他に、MariaDBの通信も許したいので通信ポート「3306」を追加します。

タイプ プロトコル ポート範囲 ソース 説明
MYSQL/Auror TCP 3306 0.0.0.0/0, ::/0 -

ここではNAT構築し、そこからアクセスする例を示すため、WebサーバーのIPアドレスだけに制限しないようにしています。

DBサーバーにsshで接続する

DBサーバーにMariaDBをインストールするためにsshログインする必要があります。
しかし、プライベートサブネットは割り振られたパブリックIPアドレスがないので、Webサーバーを踏み台にして
プライベートサブネットのDBサーバーにssh接続する必要があります。
そのためにlocalからWebサーバーにssh接続するために利用しているpemファイルをサーバーに持っていきます。

scp -i my-key.pem my-key.pem [WebサーバーパブリックIPアドレス]:~/

これでWebサーバーからDBサーバーにssh接続ができるようになります。

NATゲートウェイ

プライベートサブネットに構築したサーバーはインターネットから接続できないので安全ですが、このままでは
インターネット通信が一切できないためソフトウェアのインストールが出来ません。
DBサーバーにMariaDBをインストールするためにもインターネット通信が必要になります。

この問題はパブリックサブネット内にNATを構築することで解決します。
NATとはIPアドレスを変換する装置で、インターネット接続が可能なパブリックIPアドレスとプライベートサブネットに接続するようのプライベートIPアドレスを併せ持っています。プライベートサブネット内のサーバーがインターネットに送信しようとした時にNATはそのパケットにあるヘッダーの送信元アドレスを自身のパブリックIPアドレスに書き換えて、インターネット接続を行います。インターネットからの応答パケットはNATに戻ってき、宛先を送信元のIPアドレスに書き換えてプライベートサブネットのサーバーに返します。

image.png

AWSにはNATゲートウェイという機能が提供されているので、非常に簡単にNATを利用することが出来ます。

Elastic IP

Elastic IPは「静的で固定なパブリックIPアドレス」が利用できるAWSの機能の一つです。NATゲートウェイ構築にはamazonサービスのElastic IPを利用して構築していきます。EC2インスタンスなどでデフォルト割り振られるようなパブリックIPアドレスでは、起動・停止する度にアドレスが変わってしまうので、こちらを利用してみます。
NATゲートウェイ作成時に同時に設定することが可能です。

ルートテーブルの変更

最後にプライベートサブネットからインターネットに対して通信する時に、NATゲートウェイを介するようにします。

送信先 ターゲット
0.0.0.0/0 作成したNATゲートウェイ

デフォルトのルートテーブルを上記のように設定を追加すると宛先IPが未定義だった場合にNATゲートウェイに転送されるようになります。
DBサーバーにssh接続してMariaDBインストールがし、各種設定を行えばDBサーバー作成は完了です。

任意のアプリケーションやフレームワークをWebサーバーに乗せ、DB接続の設定を行えば図の完成になります。
AWS基礎からのネットワーク&サーバー構築.png

まとめ

何度かインフラやAWS周りの勉強はしてきましたが、今回利用させてもらったAmazon Web Services 基礎からのネットワーク&サーバー構築はコンパクトでありながらAWS、インフラ、ネットワークの勉強になりました。実際に構築しながら学ぶことが出来たので、身についた感があります。
一日あれば終わるぐらいの簡潔な内容なのでとても良かったです。

13
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
1