【VPC内でサンプルWebアプリを構築してみる】
今回は前回で構築したWebアプリケーションをベースとしてVPC構築を試みます。
多少は手を加えるかもしれませんが、同様レベルのものが済みであることを前提としています。
また、既に学習済みの儀実部分についてはさらっと流し気味にしますが過去記事参考です。
Webアプリの構築は以下で実施済みです。
www.wantanblog.com
VPCについて
Amazon Virtual Private Cloud (Amazon VPC) とは
VPC (Amazon Virtual Private Cloud)は、仮想ネットワーク内にAWSのリソースを起動して使用することのできるネットワークサービス。
ネットワーク要件に基づいたIPアドレス範囲の選択や、サブネットの作成や仮想ルータによるルーティング機能、ゲートウェイの設定などの機能を使ってクラウド上に任意のネットワークを構築することができる。
また、オンプレのデータセンタともVPN接続を行えるようにすることも可能で、AWSの各サービスをデータセンタから利用できるようにすることも可能らしい。
構築するもの(全体設計)
負荷分散を想定してELBを設置してELBから2台のEC2に接続する構成にします。
RDSも本来であれば冗長構成にすべきですが一旦は一台構成とします。
また、各サービスはそれぞれセキュリティグループが設定されているものとします。
ちなみにネットワーク機器の設定とかはやったことはありません。ネットワーク知識はネスペを受験するときに勉強したものが残っている分だけ。
VPC仮想ネットワークの構築
VPCの新規作成
マネージメントコンソールのサービス一覧からVPCを選択してスタートです。
VPCダッシュボードからメニューのVPCを選択します。
多分デフォルトのもの??が既にありますが、VPCの作成を押下。
名前タグとIPV4に任意の入力を行い、作成を押下
他は利用しないOR利用用途が分からない場合はデフォルトのままでいいでしょう。
まずはこれだけでVPCが作成できるようです。
【追記】
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-サブネットの作成。
メニューからサブネットを選択します。
デフォのサブネットはそのままにサブネットの作成を押下。
サブネットの作成画面で以下のように入力し、作成を押下。
項目名 | 設定値 |
---|---|
名前タグ | 任意の名前 |
VPC | 先ほど作成したVPCを指定 |
アベイラビリティゾーン | ap-northeast-1a |
IPv4 CIDR ブロック | 10.0.0.0/24 |
アベイラビリティゾーンはこれでなくてもいいですがこの後に作成するものと合わせればいいのでしょう。
作成を押下するとすぐにできるので、他のものも同じ要領で作成していきます。
【追記】
EC2にSSH接続を行いたい場合は、
EC2のサブネットについては「パブリック IPv4 アドレスの自動割り当て」を「はい」に設定しましょう。
EC2にパブリックIPが割り当てられていない場合、インターネットから接続できないためです。
ただEC2インスタンス作成時に有効を選択できる気もするのでなくても大丈夫かもしれない。
仮想ルータの作成
ゲートウェイの作成
インターネット接続のためにゲートウェイを作成します。
メニューからインターネットゲートウェイを選択します。
インターネットゲートウェイの作成を押下。
作成画面で名前タグを入力して作成を押下。
作成できてます。
VPCへのアタッチ
作成した段階では何も情報がないので作成済みのVPCにアタッチを行います。
今作成したゲートウェイを選択して、アクションから「VPCにアタッチ」を選択。
アタッチ画面でVPCに先ほど作成したVPCを割り当てます。
AWSコマンドラインは現時点ではよく分からないのでスルーします。必要なら後から戻ってきます。
ルートテーブルの作成
VPCの場合はルートテーブルによって、経路の制御を行います。
メニューからルートテーブルを選択。
ルートテーブルの作成を押下。
名前タグに任意の入力、VPCに先ほど作成したVPCを選択して、作成を押下。
ルーティングを行うためにルートテーブルを選択し、下部のルートメニューを選び「ルートの編集」を押下。
編集画面でルートの追加を押下。
新しいルートが表示されたら送信先に「0.0.0.0/0」を設定。
ターゲットにインターネットゲートウェイを選択して先ほど作成したものを選択します。
ここまでいったらルートの保存を押下。
この設定でVPCへの接続がゲートウェイに集約されることになります。
これは確かにゲートウェイだ。
--追記
ルートテーブルとサブネットの関連付けを行います。
これをやっておかないとVPC外から接続ができないようです。
各サービス(サーバ)の設定
セキュリティグループの設定
セキュリティグループについてはこれまでいくつか作成して使用してきたので新しく作らなくていいかと思いましたが、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からのインスタンス生成方法は過去記事参照。
インスタンスの詳細設定はネットワークとサブネットを指定するところは過去記事と違いますね。
冗長構成にする場合は2つのインスタンスをここで生成します。
ELBの生成と設定
ELBの作成を行います。
ロードバランサの作成する場所を今回作成したVPCにします。また、今回はTomcatの使用ポートである8080をリスナーに指定しておきます。
サブネットはELB用に作成したものを指定して次へ。
セキュリティグループやEC2インスタンスに先ほど設定したものを指定してOK。
RDSの生成と設定
RDSインスタンスは既に生成されていることを前提としていますが、対象のVPCではなく別のVPCに存在しているという想定です。
RDSがまだ生成できていない場合や新しいRDSを構築する場合は以下のサブネットグループを設定してから生成すればよいでしょう。
サブネットグループの設定
RDSの場合はVPCのサブネットの他にEDS用のサブネットグループを設定する必要があるようです。
RDSのメニューからサブネットグループを選択します。
DBサブネットグループの作成を押下。
サブネットグループの詳細
名前、説明の任意の入力を行い、VPCに先ほど作成したVPCを設定する。
サブネットの追加
対象のアベイラビリティーゾーンを選択。
RDS用に作成した二つのサブネットを選択し、「サブネットを追加します」する。ここまでやったら作成を押下。
DBのサブネットグループ変更
対象のデータベースを選択し、変更ボタンを押下。
ネットワーク & セキュリティ部分でサブネットグループとセキュリティグループを今回作成したものに変更する。
DBインスタンスの変更を行う。
ここまでで一旦の設定が完了。動作確認します。
動作確認
ELBから接続を行うためELBの「DNS名」に接続します。
実際に接続したいのはアプリなので私の場合は以下に接続を行いました。
http://[ELBのDNS名]:8080/todoMyBatis/userList/list
接続確認できました。登録、削除等の操作も問題ないみたいなのでDB接続まで問題ないようです。
構築したものを流用してるせいでなんかごちゃちゃした感じになりましたが、とりあえずVPC構築してアプリが動作していることを確認できました。
が、単なるサンプルアプリを試してみる程度だといまいちVPCを構築した効果とか実感が湧きにくいですね。
もっとなんかできないか考え中。