ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

ニフティクラウド探検隊 3層モデルのシステムを簡単に構築したい!

こんにちは。

ニフティでインフラを守るお仕事をしている五月女です。

00_ss 最近は、パソコンやスマートフォンの利用が当り前となり、利用者の環境毎に個別にアプリケーションを作って配布するのではなく、プラウザ経由で利用する、いわいる「ウェブアプリケーション」を利用する機会が増えつつあると思います。

スケジュール管理やWebメール、ドキュメント管理など企業活動に必要なもの。
他にも、ブログやECサイト、オンラインバンク、ソーシャルゲームといった多くのサービスがウェブアプリケーションとして提供されています。
実際、ウェブアプリケーションの作成が必要になる機会も増えているのでは無いでしょうか。

こうしたアプリケーションを作成する際のシステム構成としては、「ウェブサーバ」「アプリケーションサーバ」「データベースサーバ」にて構成される「3層モデル」が用いられる事が多いです。
ところが、実際に構築してみると、構成に合わせたネットワークの設計やアクセス制御の設定が必要になったりと、意外と手間がかかり面倒な事が分かります。

特に、サーバの増減が自由自在なクラウドの恩恵を最大限活用するためには、アクセス規模に合わせてシステム構成を刻々と変化させる必要があり、毎回設定を変更する事が、煩わしく感じるかもしれません。
しかし、ニフティクラウドには、そういった面倒で煩雑な手間を省き、専門的な操作無く実現する機能がちゃんと用意されています。

今回は、ニフティクラウドのファイアウォール機能を利用して「簡単に3層モデルを実現する方法」を紹介します。

※内容は、2012年02月現在時点の情報です。
※ニフティクラウドで提供されている「CentOS 5.6 64bit Plain」を対象とした記事です

「3層モデル」とは

ウェブアプリケーションのシステム構成としてよく利用される「3層モデル」は、他にも「3層構成」や「3層アーキテクチャ」等と言われ、こうした構成をまとめて、多層アーキテクチャと呼んだりします。

ウェブアプリケーションの3層モデルは下記3層を指す事が多いです。

  • ウェブサーバ
  • アプリケーションサーバ
  • データベースサーバ

01_3layerstructure 具体的なソフトウエアと結びつけると、各層は下記の様な構成になるのではないでしょうか。

  • ウェブサーバ(以下 WEBサーバ)
    • Apache HTTP Server、Microsoft Internet Information Services(IIS)、Nginx、lighttpd 等
  • アプリケーションサーバ(以下 APLサーバ)
    • Apache Tomcat、JBoss、WebSphere Application Server(WAS)、ASP、PHP、Ruby、Perl 等
  • データベースサーバ(以下 DBサーバ)
    • MySQL、PostgreSQL、Oracle Database Server、MongoDB 等

動作を簡単に表すと次の様になります。

  1. サービスの利用者が、WEBサーバへアクセスし入力を受付
  2. WEBサーバがAPLサーバに利用者への情報表示に必要な処理を依頼
  3. APLサーバが必要な情報をDBサーバに要求して取得
  4. APLサーバがDBサーバより取得した情報より、必要な処理を実施
  5. APLサーバがWEBサーバへ返却
  6. WEBサーバが利用者へデータをお届け

では、具体的にニフティクラウドでこの「3層モデル」を実現する方法を確認していきます。

ニフティクラウドの機能の確認

3層モデルの実現方法の前に、ニフティクラウドの機能についておさらいします。

ニフティクラウドのネットワーク

標準の状態にて、ニフティクラウドから各サーバへ提供されるネットワークは2つあります。
一つが「グローバルネットワーク」。
もう一つが「プライベートネットワーク」です。

図にしてみると大体こんな感じです。
02_niftycloudnetworks それぞれのネットワークの特徴は下記の通りです。

  • グローバルネットワーク
    • グローバルIPが割り当てられる
    • 自身の管理下のサーバも含め、ニフティクラウドの他のユーザと共有
    • インターネットに直結
  • プライベートネットワーク
    • プライベートIPが割り当てられる
    • 自身の管理下のサーバも含め、ニフティクラウドの他のユーザと共有
    • 超高速!(*1)

ニフティクラウドのファイアウォール

ニフティクラウドのファイアウォールは、一般的なファイアウォールとしての機能を一通り備えており、
さらに、コントロールパネルから簡単に設定したり、APIから制御し、設定を自動化するといった事が可能です。

ファイアウォール

お客様のサーバーへの通信を、あらかじめ定義されたルールに従ってフィルタリングする機能です。
サーバーより上位のレイヤーでフィルタリングを行うことで、複数のサーバーに一括でファイアウォールを適用することができます。
設定と管理は、コントロールパネルやAPIで行うことができ、お客様の運用効率が飛躍的に向上します。
http://cloud.nifty.com/service/fw.htm

ファイアウォール機能の紹介は「中の人」が書いた下記記事が、実例を交えており詳しいですので、合わせてご覧ください。

さて、各機能の詳細な説明は公式サイトに任せるとして、
ここでは、ファイアウォールの持つ重要な機能の説明をします。

一つが「グループ」で、もう一つが「接続元種別」です。

「グループ」機能

ニフティクラウドのファイアウォールでは、フィルタリングルールを「グループ」という単位で管理します。
グループ毎に個別のフィルタリングルールを作成し、特定のグループにサーバを追加する事でフィルタリングルールを適用します。

特徴として、同一グループ内の通信はIN/OUT共に制限なく利用出来ます。
そして、インターネットを含む、グループ外との通信について制御する事が可能です。

03_firewallgroup 図中、同一グループ「GroupA」に属するサーバ(1)サーバ(2)の間は制限無く通信出来ますが、
「GroupA」に属するサーバ(1)と「GroupB」に属するサーバ(3)の間は通信が制限された状態です。

グループ外とのフィルタリングルールに利用出来る要素は、「プロトコル種別」「宛先ポート」「IN/OUT種別」「接続元種別」が利用出来ます。

05_firewallsettingwindow

「接続元種別」機能

接続元種別として選択可能な対象に「グループ」があります。

例えば、ファイアウォールグループ「GroupA」にて次の様な設定を入れます。

インターネットを含むすべてのネットワークから、80番ポートに対するTCP通信を許可する

06_firewallsettingsgroupa 次にファイアウォールグループ「GroupB」にて次の様な設定を入れます。

「GroupA」に属するサーバからのみ、8080番ポートに対するTCP通信を許可する

07_firewallsettingsgroupb すると、次の様な通信制御されたネットワークが構成されます。

04_firewallaccessroute この通信経路を展開すると、仮想的に下記の様になり、仮想的に2層構造が実現出来た事が分かります。

08_firewallaccsessroutelogicalexpan この様に、ニフティクラウドのファイアウォール機能では、接続元種別とグループ化されたフィルタリングルールを組み合わせる事で、仮想的にネットワークを構成する事が可能です。(*2)

ニフティクラウドで3層モデルを実現する

実際に、ニフティクラウドを使ってウェブアプリケーションを提供する事を想定し、ファイアウォール機能を利用して3層モデルを作っていく過程を考えてみました。

最小構成からのスタート

クラウドによるコストの最適化を最大限に活用するため、ウェブアプリケーションをスモールスタートで開始します。
最初はWEBサーバ、APLサーバ、DBサーバを同一のサーバに同居させる事でコストを最小限に抑えます。

09_smallstart

WEB/APL/DBサーバの分離

公開後、提供を開始したサービスは順調にアクセスを伸ばしてきました。
今後の、アクセス増を見越し、拡張可能な構成にすべく、WEBサーバ、APLサーバ、DBサーバを分離させます。

10_webapldbseparation
分離させる作業は簡単です。
既存のファイアウォールグループ「WEBandAPLandDB」を「WEB」に名称変更し、新規に「APL」「DB」というファイアウォールグループを作成します。
そして、新しく作成したAPLサーバ、DBサーバを、それぞれ各グループに追加すれば完了です。
コントロールパネルからの操作すれば、5分とかからない操作です。(*3)

以上の操作で、ニフティクラウド上で3層モデルが実現出来ました。
あっけないほど簡単です。

11_webapldbseparationlogicalexpansi

スケールアウトを考慮した3層モデルへ

WEBサーバ、APLサーバ、DBサーバが分離出来ればあとは、アクセス増減に応じて、WEBサーバ、APLサーバを柔軟に増減させて対応可能です。
増減に伴うネットワークの設定は、各ファイアウォールグループへサーバを追加・削除すればOKです。

12_3layerstructurescaleout
アクセスが多い時、多くの処理を捌きたい時は各グループへ作成したサーバを追加し、アクセスが少ない時、負荷の低い時はサーバを削除すればあとはファイアウォールグループが自動的に設定したフィルタリングルールを適用してくれます。
13_3layerstructurescaleoutlogicalex

もっと便利に使ってみる

グローバルIPの削除

論理ネットワークとして、インターネット側のネットワークが不要なサーバが考えられます。

例えばインターネットへのアクセスを必要としない、APLサーバやDBサーバについては、インターネット側のグローバルIPを削除してしまっても良いでしょう。
削除する事で、万が一ファイアウォールグループへの追加を忘れてしまったりした際も安心ですし、サーバ代金が減額されます。

14_deleteglobalip

VPNの利用

全サーバのグローバルIPを削除してしまい、Virtul Private Network(VPN)経由でのアクセスのみを許可する事も出来ます。

ニフティクラウドのVPN接続サービスを利用する際は、プライベートLANオプションの申し込みが必須です。
このため、プライベートLAN利用開始時にプライベートネットワークが、他のニフティクラウドの利用者から独立します。
さらに、全サーバのグローバルIPを削除する事で、インターネットから直接サーバへアクセスする事を出来なくします。

その上で、VPN経由の接続をする事で、インターネットに生のデータを漏らす事無くサーバとデータのやり取りが可能になります。
そしてここでもファイアウォール機能を利用する事で、部署やチーム毎にアクセス出来るサーバ範囲を限定したり、流れるデータを見えなくするといった事が実現出来ます。

15_vpnaccess
ここまで出来ると、オフィスにあるサーバと遜色なく利用出来るのではないでしょうか。
さらに、操作のわかりやすいコントロールパネルとAPIを利用して、無尽蔵のサーバパワーを従量課金で、利用したい時に利用したい分だけ利用する事が出来ます。
この様にVPNとファイアウォールを併用する事で、ニフティクラウド上に仮想的な自社センターを確保する事も可能です。

まとめ

以上、簡単ではありますが、ウェブアプリケーションの3層モデルを例に、ニフティクラウドのファイアウォールを紹介しました。
この機能の魅力が少しでも伝わっていれば幸いです。

ファイアーウォールを利用した際に気になるのは、未利用時とのオーバーヘッドですが、ニフティクラウドのファイアウォールは自分が試した限り、サーバ自体の負荷は全然無く、ネットワークのオーバーヘッドも殆ど感じられません。
また、初期状態で2件まで無料で使え、有料版に切り替えれば最大55グループまで設定する事が可能です。

そして、ここで紹介したニフティクラウドのファイアウォール機能はAPI経由で実行出来ますので、構成変更作業自体を自動化する事だって可能です。
オンプレミス環境下で物理サーバを用いてシステム構築をしていたときの苦労が嘘の様な簡単さですね。
そういう意味で、寂しく感じる今日このごろです(´・ω・`)ウゥ

今回はファイアウォール機能や3層モデルの実現方法等を例を交えて簡単にまとめさせて頂きました。
さらに詳しい解説につきましては、2012/02/20発売のニフティクラウド解説本、
『ニフティクラウド IaaSによるシステム構築/活用入門』に上手くまとめられています。

本ブログにも登場する、石田さんと吉田さんが書かれた「ニフティクラウドによるシステムインテグレーション」(3層モデルの話)と、「ニフティクラウドのセキュリティ」(ファイアウォールの話)では、この記事では省略した内容を含めてとても詳しく解説されていますので、興味のある方は是非ご覧ください。

著者石田健亮、岸本康二、仲山昌宏吉田雄哉渡辺一宏/ニフティ株式会社(監修)
書籍名ニフティクラウド IaaSによるシステム構築/活用入門
発売日2012年2月20日(月)
定価3,129円(税込)
出版翔泳社
ページ数336ページ

*1: 1サーバで6Gbpsとか出る!!
*2: 説明の都合、細かな所は端折りましたが、おおよそこんな感じ。
*3: ファイアウォールグループの名称は適当に決めてください。