こんにちは、岩橋聡吾です。最近のAWSは、次から次に新たなサービスを展開し、その勢いは留まることを知リません。今やITと切っても切れない関係と言っても過言ではないでしょう。

そこでこの度、複数回に渡ってAWS上でのWebアプリ向けのサーバー環境構築について記事にしてみたいと思います。

今回構築するサーバー環境は、
◉VPC(Virtual Private Cloud:土地全体)の構築
◉AZ(Availability Zone:建造物エリア)、サブネット(:建造物を設置するための基礎)の構築
◉WEBサーバーの設置(EC2)
◉ロードバランサー(ELB:玄関)の設置
◉ステップサーバー(EC2:裏口玄関)の設置
◉DNSの設定(Route53:住所登録)
◉データベースの設置(RDS)
◉KVSの設置(ElastiCache)
 …etc を想定しており、最終的には以下のようなイメージになります。

第1回では、後述するVPCとAvailability Zone (以下AZ)と呼ばれる設定とその動作確認までを行います。何事も下準備が大切です。

VPCを作成してみる

まず最初にVPCを作成するのですが、そもそもVPCとは何でしょうか?

VPCとはAWSアカウント上に複数作成することが出来るプライベートなネットワークの単位です。一軒家を建てる為の土地全体といったところでしょうか。

VPCの配下には、AZがあり、その配下にはサブネットがあります。またAZは1つ以上のサブネットを保持することができます。AWS上で初めてネットワークを構築するときは最低でも1つのVPC、1つのAZ、1つのサブネットを作成する必要がします。

AZは建造物エリア、サブネットは建造物を設置するための基礎といったイメージです。

AZは互いに影響を受けないように場所やネットワークが分離されており、これらが専用の高速回線で相互接続されています。サブネットを複数個作成してそれぞれが別々のAZを使用する設定を行うことで、1つのAZがダウンしてもサービスの継続性には問題が生じない設計にすることができます。

一方のAZ内に建てられた家が火事になっても、もう一方のAZ内の家には影響がないという訳です。

また、特別な設定をしない限りは複数のVPC間での通信は出来ませんが、サブネット間の通信は必要に応じて通過させることができます。

それでは、以下の手順でVPCとAZをそれぞれ1つずつ作成してみましょう。

※ AWSコンソールのデザインが最近変わりましたが、今回は以前のインターフェースを使って行きたいと思います。

VPCウィザードを開始しましょう。

最上位の「1個のパブリックサブネットを持つVPC」を選択します。この設定で作成したVPCはElasticIPを直接割り当てることでインターネットに接続することになります。より厳格に通信をコントロール可能なインフラを構築する場合は、1つ下の「パブリックとプライベートサブネットを持つVPC」を使用することになると思います。

次の画面で、作成するVPCの詳細設定をします。
先ずは、IP CIDR(サイダー)ブロックを設定します。ここでは適当に「/16」の大きさを確保することにします。

CIDRとは…

先ずはプライベートIPについておさらいしましょう。

IPアドレスは、「ネットワーク部」と「ホスト部」から成ります。ネットワーク部が短いほど・ホスト部分が長いほど大きなネットワークの構築が可能です。またネットワーク部とホスト部の構成には規格(クラス)があります。

  • クラスA:10.0.0.0/8 = 10(ネットワーク部)+ 0.0.0(ホスト部)
         大きいネットワークを作る場合(最大16,777,216個のアドレス配布が可能)
  • クラスB:172.16.0.0/16 = 172.16(ネットワーク部)+ 0.0(ホスト部)
         中くらいのネットワークを作る場合(65,536個のアドレス配布が可能)
  • クラスC:192.168.1.0/24 = 192.168.1(ネットワーク部)+ 0(ホスト部)
         小さいネットワークを作る場合(256個のアドレス配布が可能)

上記クラスのIPアドレスのお尻に着く「/8」「/16」「/24」はCIDR表記と呼ばれ、ネットワーク部の長さを示す値で、IPアドレスを2進数表記にした場合の先頭から桁数になります。例えば「10.0.0.0(/8)」を2進数表記すると「00001010.00000000.00000000.01111001(/8)」になります。ネットワーク部はこの数字の羅列の先頭から「8」桁まで、つまり「00001010」を指します。このようなプライベートIPを「クラスフル」と呼びます。

さて本題のCIDRですが、これは「Classless Inter-Domain Routing」の略です。つまり「クラスレス」なので上のような規格に当てはめることなく自由なサイズのネットワークの構築が可能になります。仮に、257個のアドレスが必要なネットワークを構築したい場合、「クラスフル」だとクラスB、CIDR表記で「/16」のネットワークサイズ(最大65,536個のアドレス)を選択することになり、無駄が多くなります。一方「クラスレス」ですと、CIDR表記で「/23」のネットワークサイズ(最大512個のアドレス)を選択できるので無駄の少ないネットワークサイズ構築が可能になります。

上記のような、自由なサイズのネットワークの構築をする仕組みをCIDRと呼びます。

VPC名には半角英数字でお好みで設定しましょう!

次にパブリックサブネットを設定します。

ここでは、IP CIDRブロックで確保した大きなIPアドレスの塊を使いやすいように分割します。サブネットで分割されたネットワークは必ず1つのAZに属します。

分割の粒度はインフラの設計要項によっても異なってくるのですが、ここでは分かりやすく「/24」で分割することにします(最大256個のアドレスの配布が可能)。

以下の設定はデフォルトのままVPCを作成します。

VPCの作成と、それに付随した設定が自動的に行われます。

VPCが正常に作成完了しました。このウィザードを完了した結果、VPCの他にサブネット・ルートテーブル・インターネットゲートウェイ・DHCPオプションセットも自動的に作成されました。

EC2インスタンスを立ち上げてみる

では作成したVPC上にEC2インスタンスを配置して、VPCが正常に設定できたか確認してみましょう。

画面中央の「インスタンスを作成」ボタンを押してインスタンス作成ウィザードを始めます。

最も一般的なAmazon Linuxを選択します。

インスタンスタイプを選択します。今回は無料利用枠対象である t2.micro を選択し、次の手順に進みましょう。

ローンチするインスタンスの詳細設定を行います。

立ち上げるインスタンス数が1つ。使用するVPC・サブネットが先程作成したものであることを確認し、自動割当パブリックIPが有効であることを確認します。自動割当がされない場合は、Elastic IPを割り当てることでインターネットアクセスを確保する必要があるのですが、今回は確認用のため自動割当で済ませます。

問題なければ次の手順に進みます。

ストレージが8GB確保されていることを確認して次の手順に進みます。

これから立ち上げるインスタンスを区別できる名前を付け、次の手順に進みます。

セキュリティーグループを設定します。ここで特定のネットワークトラフィックのみを通過させるようにすることで不正アクセスのリスクを低減させます。今回はHTTPとHTTPSは全許可とし、SSHは自宅からのみを許可する設定としました。

設定が終わったら「確認と作成」を押します。

これまでの設定内容が確認画面に表示されますので、内容に問題がなければ「作成」ボタンを押します。

これから作成するインスタンスにアクセスするためのキーファイルを紐付けます。
今回の記事作成向けに新しくキーファイルを作成します。(次回以降にインスタンス作成する際は、このキーファイルを再利用します)

「新しくキーペアを作成する」を選び、キーペア名を入力したらキーペアをダウンロードします。ダウンロードするのを忘れてしまうとこのインスタンスにアクセスすることはできませんのでご注意を。。

ダウンロードが確認できたら「インスタンスの作成」を押しましょう。

EC2インスタンス一覧画面を覗いてみましょう。先程作成したインスタンスがリストアップされていますので、SSH経由で接続してみましょう (Windows環境の場合は接続手順が異なりますのでご注意ください)。

まずはインスタンスのIPアドレスを控えておきます。

ターミナルを起動し、以下のようなコマンドを入力しましょう。

以下のように表示されたら ec2-user ユーザーのログインに成功していることが確認できます。

$ chmod 600 [ダウンロードしたキーファイルのパス]
$ ssh -i [ダウンロードしたキーファイルのパス] ec2-user@[IPアドレス]
The authenticity of host ‘52.199.68.44 (52.199.68.44)’ can’t be established.
RSA key fingerprint is 72:83:d2:19:b2:fb:bf:08:5b:9b:4f:6b:3d:5c:63:63.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘52.199.68.44’ (RSA) to the list of known hosts.

__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/
[ec2-user@ip-10-0-0-23 ~]$

第1回目の最後に

今回は記事都合上ウィザードを使用する形となりましたが、AWS上で基本的なVPCとAZの設定を行いました。立ち上げるだけであればあっさりと設定できてしまうので、ネットワークに苦手意識があるような方でも詰まることなく設定出来るのではと思います。
しかし今回ご紹介した内容だけではまだまだ実用的なインフラとは言えませんので、次回以降このインフラの設定を詰めて行きたいと思います。
ご清覧頂きありがとうございました。
Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにきてください。

◉シリーズ
・やってみよう!AWSでWEBサーバー環境構築(シリーズ第2回)
・やってみよう!AWSでWEBサーバー環境構築(シリーズ第3回)
・やってみよう!AWSでWEBサーバー環境構築(Lambda|API Gateway|シリーズ第4回)

◉筆者のおすすめ記事
・【DB設計入門|ER図|MySQL】コンビニレシートから学ぶ!データモデリング手法
・【機械学習入門|Python|scikit-learn】結局何ができる?cheat-sheetから解説してみる篇

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る