SEワンタンの独学備忘録

独学した内容や資格試験に対する取り組みの備忘録

【AWS】入門その⑨ VPC内でサンプルWebアプリを構築してみる

【VPC内でサンプルWebアプリを構築してみる】

今回は前回で構築したWebアプリケーションをベースとしてVPC構築を試みます。
多少は手を加えるかもしれませんが、同様レベルのものが済みであることを前提としています。

また、既に学習済みの儀実部分についてはさらっと流し気味にしますが過去記事参考です。

Webアプリの構築は以下で実施済みです。
www.wantanblog.com

VPCについて

Amazon Virtual Private Cloud (Amazon VPC) とは

VPC (Amazon Virtual Private Cloud)は、仮想ネットワーク内にAWSのリソースを起動して使用することのできるネットワークサービス。

ネットワーク要件に基づいたIPアドレス範囲の選択や、サブネットの作成や仮想ルータによるルーティング機能、ゲートウェイの設定などの機能を使ってクラウド上に任意のネットワークを構築することができる。

また、オンプレのデータセンタともVPN接続を行えるようにすることも可能で、AWSの各サービスをデータセンタから利用できるようにすることも可能らしい。

構築するもの(全体設計)

f:id:wantanBlog:20190922014731p:plain

負荷分散を想定してELBを設置してELBから2台のEC2に接続する構成にします。
RDSも本来であれば冗長構成にすべきですが一旦は一台構成とします。
また、各サービスはそれぞれセキュリティグループが設定されているものとします。

ちなみにネットワーク機器の設定とかはやったことはありません。ネットワーク知識はネスペを受験するときに勉強したものが残っている分だけ。

VPC仮想ネットワークの構築

VPCの新規作成

マネージメントコンソールのサービス一覧からVPCを選択してスタートです。

VPCダッシュボードからメニューのVPCを選択します。

f:id:wantanBlog:20190922015940p:plain

多分デフォルトのもの??が既にありますが、VPCの作成を押下。

f:id:wantanBlog:20190922020127p:plain

名前タグとIPV4に任意の入力を行い、作成を押下
他は利用しないOR利用用途が分からない場合はデフォルトのままでいいでしょう。

f:id:wantanBlog:20190922020451p:plain

まずはこれだけでVPCが作成できるようです。

f:id:wantanBlog:20190922020612p:plain


【追記】

VPCを作成したら「DNS ホスト名」を有効にしておいた方がよいでしょう。
作成したVPCを選択して「アクション>DNS ホスト名の編集」で有効化しておきます。


サブネットマスクの作成

ここでは、各サービスに適用するサブネットを作成します。
サブネットの範囲はもちろん任意ですが、今回はVPCで設定した範囲内になるように以下の通りとします。

・ELB-サブネット 10.0.0.0/24
・EC2-サブネット 10.0.1.0/24
・RDS-サブネット 10.0.100.0/24
・RDS2-サブネット 10.0.200.0/24

※RDS2はRDSのサブネットグループを作成するために複数のサブネットが必要なのでここで作成します。なおこのサブネットについては別のアベイラビリティーゾーンになるようにします。

まずはELB-サブネットの作成。
メニューからサブネットを選択します。

f:id:wantanBlog:20190922021935p:plain

デフォのサブネットはそのままにサブネットの作成を押下。

f:id:wantanBlog:20190922022108p:plain

サブネットの作成画面で以下のように入力し、作成を押下。

f:id:wantanBlog:20190922022450p:plain

項目名 設定値
名前タグ 任意の名前
VPC 先ほど作成したVPCを指定
アベイラビリティゾーン ap-northeast-1a
IPv4 CIDR ブロック 10.0.0.0/24

アベイラビリティゾーンはこれでなくてもいいですがこの後に作成するものと合わせればいいのでしょう。


作成を押下するとすぐにできるので、他のものも同じ要領で作成していきます。

【追記】

EC2にSSH接続を行いたい場合は、
EC2のサブネットについては「パブリック IPv4 アドレスの自動割り当て」を「はい」に設定しましょう。

EC2にパブリックIPが割り当てられていない場合、インターネットから接続できないためです。
ただEC2インスタンス作成時に有効を選択できる気もするのでなくても大丈夫かもしれない。

仮想ルータの作成

ゲートウェイの作成

インターネット接続のためにゲートウェイを作成します。

メニューからインターネットゲートウェイを選択します。

f:id:wantanBlog:20190922024027p:plain

インターネットゲートウェイの作成を押下。

f:id:wantanBlog:20190922024130p:plain

作成画面で名前タグを入力して作成を押下。

f:id:wantanBlog:20190922024325p:plain

作成できてます。

f:id:wantanBlog:20190922024438p:plain

VPCへのアタッチ

作成した段階では何も情報がないので作成済みのVPCにアタッチを行います。

今作成したゲートウェイを選択して、アクションから「VPCにアタッチ」を選択。

f:id:wantanBlog:20190922025119p:plain


アタッチ画面でVPCに先ほど作成したVPCを割り当てます。
AWSコマンドラインは現時点ではよく分からないのでスルーします。必要なら後から戻ってきます。

f:id:wantanBlog:20190922025358p:plain

ルートテーブルの作成

VPCの場合はルートテーブルによって、経路の制御を行います。

メニューからルートテーブルを選択。

f:id:wantanBlog:20190922030119p:plain

ルートテーブルの作成を押下。

f:id:wantanBlog:20190922030450p:plain

名前タグに任意の入力、VPCに先ほど作成したVPCを選択して、作成を押下。

f:id:wantanBlog:20190922030309p:plain

ルーティングを行うためにルートテーブルを選択し、下部のルートメニューを選び「ルートの編集」を押下。

f:id:wantanBlog:20190922030855p:plain

編集画面でルートの追加を押下。

f:id:wantanBlog:20190922030959p:plain

新しいルートが表示されたら送信先に「0.0.0.0/0」を設定。
ターゲットにインターネットゲートウェイを選択して先ほど作成したものを選択します。
ここまでいったらルートの保存を押下。

f:id:wantanBlog:20190922031448p:plain


この設定でVPCへの接続がゲートウェイに集約されることになります。
これは確かにゲートウェイだ。


--追記

ルートテーブルとサブネットの関連付けを行います。
これをやっておかないとVPC外から接続ができないようです。

f:id:wantanBlog:20190923021957p:plain

各サービス(サーバ)の設定

セキュリティグループの設定

セキュリティグループについてはこれまでいくつか作成して使用してきたので新しく作らなくていいかと思いましたが、VPCごとに必要なのですね。サブネットごとに新しく作り直します。

・ELB用セキュリティグループ

タイプ プロトコル ポート範囲 ソース
カスタム TCP ルール TCP 8080 自分のIP

・EC2用セキュリティグループ

タイプ プロトコル ポート範囲 ソース
カスタム TCP ルール TCP 8080 ELB用セキュリティグループ
SSH TCP 22 自分のIP

・RDS用セキュリティグループ

タイプ プロトコル ポート範囲 ソース
MYSQL/Aurora TCP 3306 EC2用セキュリティグループ
EC2インスタンスの生成と設定

既にEC2インスタンスを生成済みで適切なVPCに生成できていないというだけなら既存のEC2からカスタムAMIを生成しそこからインスタンスを生成すればよいでしょう(私はこれ)。
ない場合は素直に新規作成しましょう。

カスタムAMIの生成方法やAMIからのインスタンス生成方法は過去記事参照。

www.wantanblog.com

インスタンスの詳細設定はネットワークとサブネットを指定するところは過去記事と違いますね。

f:id:wantanBlog:20190923013505p:plain


冗長構成にする場合は2つのインスタンスをここで生成します。


ELBの生成と設定

ELBの作成を行います。

ロードバランサの作成する場所を今回作成したVPCにします。また、今回はTomcatの使用ポートである8080をリスナーに指定しておきます。

f:id:wantanBlog:20190922235058p:plain

サブネットはELB用に作成したものを指定して次へ。

f:id:wantanBlog:20190922235505p:plain


セキュリティグループやEC2インスタンスに先ほど設定したものを指定してOK。

RDSの生成と設定

RDSインスタンスは既に生成されていることを前提としていますが、対象のVPCではなく別のVPCに存在しているという想定です。
RDSがまだ生成できていない場合や新しいRDSを構築する場合は以下のサブネットグループを設定してから生成すればよいでしょう。


サブネットグループの設定

RDSの場合はVPCのサブネットの他にEDS用のサブネットグループを設定する必要があるようです。
RDSのメニューからサブネットグループを選択します。

f:id:wantanBlog:20190923180439p:plain

DBサブネットグループの作成を押下。

f:id:wantanBlog:20190923180811p:plain


サブネットグループの詳細
名前、説明の任意の入力を行い、VPCに先ほど作成したVPCを設定する。

f:id:wantanBlog:20190923180926p:plain

サブネットの追加
対象のアベイラビリティーゾーンを選択。

RDS用に作成した二つのサブネットを選択し、「サブネットを追加します」する。ここまでやったら作成を押下。

f:id:wantanBlog:20190923181313p:plain


DBのサブネットグループ変更

対象のデータベースを選択し、変更ボタンを押下。

ネットワーク & セキュリティ部分でサブネットグループとセキュリティグループを今回作成したものに変更する。
DBインスタンスの変更を行う。


ここまでで一旦の設定が完了。動作確認します。

動作確認


ELBから接続を行うためELBの「DNS名」に接続します。
実際に接続したいのはアプリなので私の場合は以下に接続を行いました。

http://[ELBのDNS名]:8080/todoMyBatis/userList/list

f:id:wantanBlog:20190923204944p:plain


接続確認できました。登録、削除等の操作も問題ないみたいなのでDB接続まで問題ないようです。



構築したものを流用してるせいでなんかごちゃちゃした感じになりましたが、とりあえずVPC構築してアプリが動作していることを確認できました。
が、単なるサンプルアプリを試してみる程度だといまいちVPCを構築した効果とか実感が湧きにくいですね。

もっとなんかできないか考え中。