はじめに
クラウドという言葉が世の中に出てきてから、ずいぶんと年月が経過しました。今日では、さまざまな企業システムがクラウド上で稼働しています。
クラウドが登場したころは、クラウドに積極的な企業や、ゲームやソーシャル系などのシステム利用が中心でした。しかし、今ではクラウドの多大なるメリットを活用するため、一般企業でも積極的な採用が進み、基幹業務系でもクラウドを使って新しい価値やサービスを提供する企業が増えてきました。
このクラウドは単なる技術要素ではなく、これまでの業務システム開発方法そのものや、これからのITエンジニアが持つべきスキルセットを大きく変えるものなので、アプリケーション開発者にとっては避けて通れないものになっています。
本記事では、インフラ構築の観点からクラウドとはどのようなものかを説明し、次回以降の記事では、企業システムのデファクトとなりつつあるAmazon Web Servicesが提供するクラウドサービスでシステムを構築する手順を紹介します。
対象読者
本記事は、次の方を対象にしています。
- クラウドシステムがはじめての人
- JavaによるWebシステムのプログラミングを行ったことがある人
- システム基盤について勉強したいと思っている人
企業システムに求められる要件
将来システムを作る仕事をしたいという学生の方に、「システムを作る仕事ってどんなことだと思う?」と聞くと、ほとんどは次のような答えが返ってきます。
- Androidなどのアプリをプログラミングする仕事
- ブラウザで動くWebアプリケーションをプログラミングする仕事
つまりその分かりやすさから、「SI業務=プログラミング」というイメージがあります。
一方、実際の業務システム開発の現場で考えてみると、例えば、ある会社の営業マンが顧客にセールスしたり会社に営業日報を報告したりするシステムを考えたとき、
- 月末/期末の売上集計を自動でできるようにしてほしい
- タブレットで分かりやすい見積を顧客に表示して、その場で商談を成立させたい
- 営業日報はパソコンやタブレットからいつでもできるようにしてほしい
- 顧客情報や売上情報などの機密情報は漏えいすると困る
- 営業活動に支障が出るので、停止時間は休日深夜の30分以内にしてほしい
- お客さんに見せるアプリ画面は、遅くとも1秒以内に表示してほしい
といった要件があがります。
この中で、実はプログラミングで実現できることは、次の2つだけです。
- 月末/期末の売上集計を自動でできるようにしてほしい
- タブレットで分かりやすい見積を顧客に表示して、その場で商談を成立させたい
残りの項目は、プログラミングだけでは実現できないため、+αを検討する必要があります。日報報告を行うにはセキュアなネットワークを敷設する必要がありますし、データの保存については、防犯/災害などにも耐えられる安全な場所を確保する必要があります。また、システムの停止時間が決まっているのであれば、もしサーバやネットワークに障害が発生したときに技術者がすぐに対処できるような運用方法を考えなければいけません。
そもそも、万が一どこかで障害が発生してもシステムを継続できるようなサーバ構成を考えたり、お客さんが求める性能が出るように、予算に応じてネットワークやサーバのスペックを選んだりする必要があります。これらの要件をまとめて「非機能要件」と呼びます。
一般的に、システムに求められる要件は大きく分類すると次の2つです。
機能要件(functional requirement)
システムの機能として求められる要件。システムやソフトウェアで何ができるのかをまとめたもので、プログラミングで解決することが多い。
非機能要件(non-functional requirement)
システムの性能や信頼性/拡張性/運用性/セキュリティなどの要件。機能要件以外の要件を指します。
非機能要件を満たすには、プログラミングの知識だけではなく、「システム基盤」の知識が必須になります。次は、このアプリケーション開発者には、なじみの薄いシステム基盤の観点から、システムの全体構成を見ていきます。
システム基盤とは
皆さんがJavaやPHPなどを使ってWebアプリケーションを作るためには、なにが必要だったでしょうか?
まず初めに、開発マシンとOSを準備します。次に、統合開発環境(IDE)やアプリケーションサーバ/データベースサーバをインストールします。短時間で作りたいときは、フレームワークや各種ライブラリを導入したりもします。単に設計やプログラミングをしていただけではありませんでしたよね。
では、アプリケーションを本番環境にリリースしてサービス化するにはどうすればよいでしょうか?
まず、サーバやネットワークを構築し、それらにOSやミドルウエアを導入して設定を行う必要があります。Webシステムは昼夜を問わずリクエストが上がるため、万が一サーバやネットワーク障害が発生したときにも、システムを停止させないような構成を考えなければいけません。
このように、作成したアプリケーションを、多くのユーザが24時間365日利用できるようにするための環境を下支えする技術要素を「システム基盤」と呼びます。
システム基盤には、ネットワークや空調といったインフラに加えて、APサーバ/HTTPサーバ/DBサーバ/監視サーバなどのサーバ群が含まれます。
これらのシステム基盤は「データセンター」という場所に配置し、運用しています。データセンターは、企業の業務システムを担うシステム基盤を配置する専用の場所です。空調や電力供給はもちろん、自然災害を受けにくい場所に立地されており、地震や火災にも耐えうる構造をしています。また、入退出にも厳重なセキュリティ管理がされており、人的な故意の事故を未然に防ぐ仕組みとなっています。
また、システム基盤を運用するには、サーバ群にインストールされているOSやミドルウエア/開発したアプリケーションのバージョンを適切に管理する必要があります。また、ハードウエアの障害やリソース低下を検知し、異常があればすぐに対処できるような基盤や体制を整える必要があります。
さらにインターネットをはじめとする外部ネットワークと接続する場合は、サーバなどのセキュリティバッチが最新かどうかを管理するだけでなく、各種ログを収集し、不正なアクセスがないかを監視することが大事です。