ITインフラストラクチャ

#ソフトウェア化するインフラストラクチャ

##IT インフラ

道路や鉄道、電気や電話、病院や学校など、私たちの生活や社会を維持する基盤を**インフラストラクチャ（インフラ）**、プログラムを実行するサーバ、データを保管するストレージ、通信を担うネットワーク機器やネットワーク回線、これらを設置するデータセンターなどは**IT インフラ**という。

IT インフラは、従来、**必要に応じて個別に機器を調達し構築するもの**でしたが、これでは変化の激しくなった時代には対応できない。また、不確実なビジネスの先行きを見通すことも難しく、必要な機器や規模を予測することも困難だ。**需要が読めないままの調達・構築は、大きなリスクを伴うようになってきた**。

##仮想化

**この状況を打破する技術が「仮想化」**。仮想化とは、**基準的な構成のハードウェアをあらかじめ用意しておき、そこから必要となるシステム資源（CPU処理能力、ストレージ容量、ネットワーク機能など）をWebやコマンドラインから指定すれば、調達や構成ができるハードウェア技術**のことだ。

インフラを構成するハードウェアに「仮想化」を適用し、運用管理や構築を自動化してくれるソフトウェアを組み合わせれば、システム資源の調達に際して、「CPUの個数」や「ネットワークの回線数」といった物理的要件ではなく、**「処理能力」や「セキュリティ・レベル」、「ネットワークのサービス・レベル」といったポリシー（目標値・制約事項など）を指定できるようになり、インフラについての専門知識がなくてもシステム資源を調達できるし、監視や運用管理を自動化できる**。

##SDI（Software-Defined Infrastructure）

このように**「ソフトウェアでシステムの機能や性能を調達、設定、管理できるインフラ」を「SDI（Software-Defined Infrastructure）」と呼んでいる**。
SDIを使えば、**アプリケーション・エンジニアは、インフラの専門知識を持つエンジニアの手を煩わせることなく、自分たちでインフラの調達ができ、アプリケーションをテストできるようになるので、開発やテスト、本番システムへの移行のスピード・アップが図れる**。一方、インフラの運用管理を担う**インフラ・エンジニアは、その作業の多くをシステムに任せられるようになり運用管理負担を軽減でき、安定稼働や安全性の向上、利便性の改善に時間をさけるようになる。また、ハードウェアを標準化し、まとめて調達できることでコストや時間を削減できる**。

#仮想化の本当の意味

##「仮想」の意味
日本語の「仮想」という言葉を聞くと、「虚像の」、「実態のない」という意味を思い浮かべてしまう。ところが、この言葉の元となった英語の「Virtual」は、そのような意味ではない。正しくは、**「本物ではないが、本物と同じ」**という意味。また、ラテン語の語源を見ると「力のある」と記されている。
辞書を引くと英語の文例には、次のような記述がある。

> It was a virtual promise.
（実際には約束も同然だった。）

> He was the virtual leader of the movement.
（彼はその運動の事実上の指導者だった。）

>He was formally a general, but he was a virtual king of this country.
彼は公式には「将軍」ではあったが、彼はこの国の事実的国王だった。）

##IT用語の「仮想」の意味

このように見ていくと、私たちがITの用語として使っている「仮想化＝Virtualization」は、次のような意味として理解するのが自然かもしれない。

###「物理的実態とは異なるが本物と同じ機能を実現する仕組み」

仮想化は決して、「虚像で実体のないシステムを作り出す仕組み」ではないということになる。つまり、**「サーバやストレージ、ネットワークの物理的な構成とは異なる形態をしているが、実質的には、本物と同様の役割を果たす仕組みを実現する技術」**と考える方が、現実的に即しているといえるだろう。

私たちは、目に見える物理的な実態がそこになければ、その存在を認めにくいもの。しかし物理的実態がどうであれ、必要な機器構成や機能、性能と同等のものが「実質的に」使えるのならば十分なわけだ。「仮想化」とは、まさに物理的なシステム資源とは異なるが、「実質的」には、**物理的なシステム資源と同じ扱いができるものを実現し、ユーザーに提供する仕組みである**といえるだろう。

#仮想化の3タイプ

「物理的実態とは異なるが、本物と同じ機能を実現する」ソフトウェア技術である。「仮想化」には、次の3つのタイプがある。

##パーティショニング（分割）

**1つのシステム資源を、複数の独立した個別の資源として機能させる。**
例：1台のサーバを10台の個別・独立した本物と同じサーバが存在しているかのように機能させる場合など。

この方法を使えば、**1ユーザーだけでは能力に余裕のある物理サーバ上に、見かけ上複数のサーバを稼働させ、複数のユーザーが、それぞれ自分専用のサーバとして扱える。また、システム資源を余らせることなく有効活用できる**。

##アグリゲーション（集約）

**複数のシステム資源を、1つのシステム資源のように機能させる。**
例：複数の異なるストレージを、1台の本物と同じストレージに見せかける場合など。

この機能を使わなければ、ユーザーは、別々のストレージの存在を意識し、煩雑な操作や設定を行わなければならない。しかし、この機能により、**物理的な構成や個別の設定、さらにメーカーや機種も意識することなく。1つのストレージとして扱えるので、利便性は大いに高まる**。

##エミュレーション（模倣）

**あるシステム資源を、異なるシステム資源として機能させる。**
例：PC上で、スマートフォンの基本ソフトウェアを、本物と同じスマートフォンが稼働しているように画面を表示させ、その機能を使える。

これを使えば、**スマートフォンにはない大きな画面とキーボードを使えるので、アプリケーション開発やテストの利便性を向上させることができる**。ユーザにとっては、物理的な実態はどうであろうと、必要な機能や操作が本物と同じであればいい。

このようなことをソフトウェアで実現する技術の総称が、「仮想化」である。

#IT インフラの歴史的変遷

##1950年代

コンピュータがビジネスで使われるようになったが、非常に高価で個人が占有して使うことはできなかった。
そこで大型コンピュータ（メインフレーム）を共同利用するために、**「バッチ」処理が登場する**。バッチは処理ごとの**「プログラムとデータのひとかたまり（ジョブ）」を逐次処理するのだが、前の処理が終わるまで次の処理を始められなかった**。

##1960年代

**「タイムシェアリング（時分割）」**が考案された。これは**CPU処理時間を細かく分割し、短時間でユーザーを切り替えることで、見分け上同時に複数ユーザーが使えるようにする**もの。

1960年代後半には、分割された処理単位ごとにハードウェア機能の割り当てや設定を切り替えることで、**1台のハードウェアで複数のハードウェアが同時に動いているように機能させる「仮想化」**が登場する。

##1980年代

PCやミニコン、オフコンといった安価なコンピュータが登場したことで、**制約の多いメインフレームの仮想化ではなく、目的に応じて個別に導入して使う機運が高まる**。その結果、企業が抱えるコンピュータ台数は増え、**バージョンアップやトラブル対応。維持管理に関わる手間やコストが膨れ上がった**。

##2000年代

この事態に対処するため、**複数のハードウェアを集約できる「仮想化」が再び注目**される。
この仮想化されたコンピュータやストレージなどのシステム資源を運用管理して、**インターネット越しに貸し出すクラウド・サービス（IaaS）が2006年に登場**した。

ただ、仮想化されたコンピュータは、それぞれにOSやファイルを持ち、CPUやメモリなどのシステム資源も本物と同じだけ消費する。**そこでOSの中核（カーネル）を共有し、一方で「仮想化」同様にユーザーごとに隔離されたアプリケーション実行環境、すなわち他のプログラムによる影響を分離することや、離・独自のシステム管理とユーザーグループを持つための「コンテナ」が登場する**。コンテナを使えば、同じシステム資源であっても、仮想化に比べて何倍もの「隔離されたアプリケーション実行環境」を動かせる。また、自社所有やクラウドと区別することなく、**インフラをまたがる実行環境の移動や、規模の拡張・縮小などが容易になることから、コンテナを利用するケースが増えている**。

#サーバ仮想化

##サーバの機能

サーバとして使われるコンピュータは、プロセッサ、メモリ、ストレージといったハードウェアによって構成されている。
このハードウェアを、オペレーティング・システム（OS）といわれるソフトウェアが制御し、業務を処理するアプリケーションやデータを管理するデータベース、通信制御やユーザー管理を行うシステムなど、様々なプログラムにハードウェア資源を適宜割り当て、ユーザーの求める処理を効率よく確実に実行できるように機能する。このOSにはWindows ServerやLinuxなどがある。

##サーバ仮想化とは

「サーバ仮想化」は、**このハードウェアに搭載されているプロセッサ、メモリの使用時間やストレージの容量を細かく分割し、複数のユーザーに割り当てる。ユーザーは割り当てられたシステム資源を、それぞれ占有使用することができる**。

この仕組みにより、**物理的には1台のハードウェアであるにも関わらず、自分専用の本物と同じ（＝仮想の）サーバがユーザーごとに提供されている**。この見かけ上の1つ一つのサーバを「仮想サーバ」または「仮想マシン」といい、これを実現するソフトウェアは、**ハイパーバイザ（Hypervisor）**と呼ばれている。VMwar ESXiやMicrosoft Hyper-v、LinuxのKVMといった製品が使われている。

##仮想サーバの利点

仮想サーバは、実際の物理的なサーバと同様に振る舞い機能する。そのため、仮想サーバごとに独立したOSを載せ、個別にアプリケーションを実行することができる。**ユーザーは、まるで専用のハードウェアを与えられたような自由度と利便性を享受しつつ、全体としては、ハードウェアの使用効率を高めることができる**。

また、同じハイパーバイザが動く物理サーバやクラウド・サービスであれば、**仮想マシンの設定情報を記載した「設定ファイル」をコピーすれば、同じ仮想マシンをそこで生成し動かすことができる**。これによってインフラをまたがり「同じ条件の本番環境とテスト環境を構築する」「災害時に備えたバックアップ環境を用意する」「システムの負荷の増減に合わせてシステム資源をスケール（増減）する」など、**運用の自由度を高めることができる**。

#「サーバ仮想化」がもたらす3つのメリット

##物理マシンの集約

仮想化されていない機械は、持っているの力が最大限に使われることはあまりなく、使用率にもばらつきがあるのが一般的です。そんなサーバを束ねて集約し、その能力を無駄なく使えば**使用率は高まり、機械の台数を減らせる。また、使用率が高い旧式機械をその機械の何台もの能力を持つ新しいものに置き換えて集約すれば、さらに台数を減らすことができる。機械の台数が減れば、個人費用を抑え、電気代やCO2、データセンターの使用率を削減できる**。

##ソフトウェア定義

**配置や配線などの物理的作業を行わずに、機能や性能の調達、構成の変更をWeb画面のメニューやコマンドからできる**。もちろん、使用しようとしている能力の合計が、物理マシンの能力の上限を超えないことが前提だが、その範囲内であれば、**仮想サーバの調達や構成変更が柔軟、迅速に、しかも稼働中にできるようになり、運用管理業務の作業効率を高めることができる**。

##ライブ・マイグレーション

仮想サーバの実態は、「設定ファイル」に書き込まれた情報。ここにはCPUコア数、メモリ容量、ネットワーク・アドレスなどの情報が書き込まれ、これをハイパーバイザに読み込ませると、物理マシンから指定された機能や性能を取り出し、仮想サーバを生成する。

この設定ファイルを2台の物理ファイルで共有し、お互いの稼働状況を監視させておけば、**一方が障害で停止しても、動いている物理マシンが停止したほうの設定ファイルを読み、その仮想サーバを立ち上げてくれる。これにより、利用者は生涯を受けることなく仮想サーバを利用し続けることができる**。

また、ある物理マシンの負荷が高まってくるとそれを検知して、**余裕のある物理マシンに負荷の高い仮想マシンの一部を、稼働させたまま移動させることで、負荷の平準化が図れる**。さらに、物理マシンを停止させての機器の修理や点検に際し、**仮想マシンを稼働させたまま他の物理マシンに移動させ、作業が終わったらまた元の物理マシンに戻すこともできるようになり、システム停止の影響を受けずに使い続けることができる**。

#サーバ仮想化とコンテナ

##サーバ仮想化とコンテナの目的と違い

**「サーバ仮想化」による仮想マシンの利用目的**は、「隔離されたアプリケーション実行環境」すなわち**アプリケーションがクラッシュしてもほかに影響を与えない、アプリケーションごとに独自のシステム管理とユーザーグループを持つことができるようにすること**。

同様の目的を実現する手段として、「コンテナ」がある。**コンテナは**「隔離されたアプリケーションの実行環境」という点では仮想マシンと同じだが、**仮想マシンとは異なり、1つのOS上で複数のコンテナを動かすことができる**。
仮想マシンは、**本物と同じサーバとして機能するので、それぞれにOSが稼働し、CPUやメモリ、ストレージなども本物と同じだけ消費する**。
一方、コンテナは、**1つのOS上で動くためシステム資源のオーバーヘッド（重複して表皮される資源や能力）が少なくて済み、ストレージ使用量も少なく、同じ性能のハードウェアであれば、仮想マシンより多くの数のコンテナを実行できる**。

##サーバ仮想化の利点/コンテナの制約

**コンテナはどれも同じOSにしなければいけない**ことが、制約になることがある。
**仮想マシンならそれより一段下のレベル、つまりハードウェアのサーバと同じ振る舞いをするので、仮想マシンごとに別々のOSを稼働させることができ**る。ただ、本番でアプリケーションを稼働させる場合、仮想マシンが異なっても、管理負担軽減のために同じOSに統一するころも多く、制約になるケースは限られている。

##コンテナの利点/サーバ仮想化の制約

1つのコンテナは、OSから見ると1つのプロセス。プロセスとは、プログラムが動いている単位。そのため、**他のサーバにコンテナを移動させて動かすにも、OS上で動く1つのプログラムを移動させるのと同様に、ハードウェアの機能や設定に影響を受けることがない**。
仮想マシンなら、**仮想マシンごとの機能や構成に関わる設定情報も引き継がなければならない**が、コンテナではその必要がなく、異なるサーバ間で実行環境を簡単に移動できる。

#コンテナ管理ソフト「Docker」

##コンテナ管理ソフト

「コンテナ」を実現するのが「コンテナ管理ソフトウェア」。サーバが変わっても、**この「コンテナ管理ソフトウェア」が同じであれば、その上で動くコンテナはどこのサーバでもそのまま動くことが保証される。そのため、OSやハードウェアの違いを意識することなく、アプリケーションをどこででも動かすことができる**。

運用管理者は、「コンテナ管理ソフトウェア」を自分たちのインフラ環境で安定稼働させることを保証しておけば、これまでのようにアプリケーションごとに、開発者が運用管理や本番環境への移行について個別に相談し、対応してもらわなくても、開発者は自分で移行できるようになる。

つまり、**開発者は迅速にアプリケーションを開発・変更してユーザーに提供でき、運用管理者はインフラを安定稼働させるといった、それぞれの責任を独立して果たすことができるようになる**。この結果、本番環境へのデプロイメント（移行作業）は、迅速、頻繁に行えるようになり、アプリケーション開発や変更に伴うメリットを、ユーザーが直ちに享受できるようになる。

##Docker

この「コンテナ管理ソフトウェア」の1つとして広く使われているのが、Docker社が提供する「Docker」。
Dockerが注目されるようになったのは、コンテナを生成する設定を「Dockerfile」として公開し、それを他のユーザーと共有できる仕組みを設けた点にある。これによって、**他のユーザーが作ったアプリケーションと、それを動かすソフトウェア構築プロセスをそのままコンテナに格納して他のサーバーで実行できるようになった**。これにより、物理マシンを仮想マシンを使う場合のように、**アプリケーションを稼働させるためにOSをインストールして、設定・テストなどの作業が不要となり、本番移行の手順と時間が大幅に短縮できるようになった**。

Dockerは、AWSやGoogleなどのクラウド・サービス・プロバイダーをはじめ、EMC VMware / Dell、IBM、RedHatなどの大手ITベンダーが採用している。また、Microsoftも自社のクラウド・サービスであるAzureやWindows Serverで採用しているなど、広く普及している。昨今ではDocker以外にもcontainered、rkt、cri-oなども登場し、多様化が進んでいる。

#コンテナを一元管理する「Kubernetes」

##複数台のサーバーにまたがりコンテナの数を増やしたい！

コンテナ管理ソフトウェアであるDockerは、1台のサーバ上でコンテナを作成し、その実行を管理する。しかし、ネットワークにつながる複数のサーバで稼働するコンテナを、横断的に管理する機能はない。たとえば、アプリケーションを利用するユーザーが増え、複数台のサーバーにまたがりコンテナの数を増やさなければならない場合、Dockerだけでは、この状況に対処してスケールアウト（サーバ台数を増やして処理の力を拡張）させることができない。

この問題を解決してくれるのが、Kubernetes。Kubernetesは、ギリシャ語で「人生の道標」という意味があり、「クバネティス / クバネテス / クーベネティス」と読む。

##Kubernetesの利点

Kubernetesによって、**複数台のサーバから構成される実行環境を、あたかも1台の実行環境によって扱うことができる**。たとえば、コンテナを起動する際は、イメージと台数を指定するだけで良く、そのサーバにどのようにコンテナに配置するかは、Kubernetesに任せられる。また、コンテナに必要とされる**システム資源（CPU、メモリ、記憶領域など）が足りなくなった場合には、既存のサービスに影響を与えることなく、自動で拡張してくれる**。

また運用管理者が、**そのコンテナを何台起動するかといった情報をKubernetesに教えると、空いているシステム資源を見て、配置を決定し、それに伴いコンテナを起動してくれる**。仮に稼働中のコンテナに不具合があり、**サービスがダウンした場合も、自動でこの事態を察知し、必要に応じてコンテナを再起動してくれる**。

他にも、「関連するコンテナのグルーピング」「コンテナに割り振られたIPアドレスの管理」「コンテナに割り当てるストレージの管理」などを行う。

Kubernetesが管理する基本単位は、Podと呼ばれるコンテナの集まり。また、コンテナ管理システムであるDockerが稼働しているサーバの単位はNodeと呼び、そのNodeの集まりの単位をClusterと呼ぶ。さらに、Pod、Node、Clusterを管理するものをMaster、Masterへの指示や設定のことをマニフェスト（Manifest）と呼ぶ。

Kubernetesは、このようにコンテナの配置や実行、スケーリング、および管理を自動化するソフトウェアなのだ。

#仮想化の種類

「サーバ仮想化」は、サーバに関わるシステム資源を仮想化し、利用効率を高めたり、可搬性を高めることに使われているが、他にもシステム資源を仮想化する技術がある。

##デスクトップ仮想化

**ユーザーの使用するPC（パーソナル・コンピュータ：個人が占有し利用するコンピュータ）を、共用コンピュータであるサーバの上で「仮想PC」として動かし、そのディスプレイ、キーボード、マウスをネットワーク越しに使えるようにする**。ユーザーは手元のPCを操作しながらも、実はサーバ上の仮想PCのプロセッサやストレージを使うことになる、ディスプレイ、キーボード、マウスそしてネットワーク接続など、最低限の機能に限定した「シンクライアント：Thin Client」と呼ばれるPCからも使える。「クライアント」とは、「サーバから提供されるサービスを提供する」コンピュータという意味だが、ここでは「一時点で1人のユーザーが所有して使用するコンピュータ」と理解しておけばよい。

##アプリケーション仮想化

MicrosoftのWordやExcelといった、**本来ユーザーPC上で稼働するアプリケーション・プログラムをサーバ上で動かし、ネットワークを介して複数のユーザーで共同使用する**もの。デスクトップ仮想化と同様、シンクライアントから使うこともできる。

##クライアント仮想化

1台のPCでWindowsやMac OSなど**異なるOSを同時に稼働させ、ユーザーの利便性を高める**。

##ストレージ仮想化

ストレージ（記憶装置）といわれる、**データやプログラムを格納しておく装置を複数のコンピュータで共有し、利用効率や利便性を高める**。

##ネットワーク仮想化

ネットワークの接続ルートやQoS（Quality of Service：スループットやレスポンス、セキュリティなどの水準）、ルーターやスイッチなどのネットワーク機器の構成を**ネットワークの設定だけで調達、変更できるようにする**。

#「デスクトップ仮想化」と「アプリケーション仮想化」

##デスクトップ仮想化

サーバの仮想化でも使われているハイパーバイザを使い、サーバ上にユーザーが手元に置いて使うPCの代わりとなる「仮想PC」を稼働させる。そのデスクトップ画面をネットワークを介し、手元のPCのディスプレイに転送・表示させ、キーボードやマウスなどの入出力装置を利用できるようにする技術で、VDI（Virtual Desktop Infrastructure）とも呼ばれている。

たとえば、仮想PCでWindowsを動かし、WordやExcelを使って作成した文章や表は、自分の仮想PCに割り当てられたサーバのストレージに保存する。ユーザーは、手元にあるPCのディスプレイに向かい、キーボードやマウスを操作するが、実際に使うプロセッサやストレージのもの。

##アプリケーション仮想化

PCの全機能だけではなく、特定のアプリケーションだけをサーバで動かし、ネットワークを介して利用できる技術。さらに、ネットワークが切れているときでも操作を継続できるようにしたソフトウェアも登場している。
どちらも管理されたデータセンターに設置されたサーバで動かすため、データの持ち出しは困難。盗難や置忘れでPCがなくなってしまっても、管理者がそのPCから仮想PCへのアクセスを遮断してしまえば、使えなくなる。

さらに、忘れがちなバックアップやセキュリティ対策などを、運用管理者が一括してできることから、安心安全の担保、運用管理負担の軽減にも役に立つ。また、自宅で仕事をする際、自宅のPCからネットワークを介し、会社の仮想PCのデスクトップを呼び出せば、会社と同じPC環境をそのまま使える。災害や事故でPCが破損してしまっても、仮想PCにアクセスすれば、これまでのPC環境をそのままに使用できることから、事業継続の観点からも注目されている。

一方で、本人であることを証明する多面の認証を厳密に行う仕組みが必要なことや、ネットワークスピードが遅く、レスポンスが悪くなったり、ばらついたりすることで、作業への集中が途切れてしまうといった課題もある。

#シンクライアント

「デスクトップ仮想化」と「アプリケーション仮想化」は、ともに手元のPC側にOSやアプリケーションを導入する必要はない。ならば、ネットワークに接続でき、画面表示や入出力操作の機能を動かせるだけの必要最低限のメモリやプロセッサでも十分だ。プログラムや作成した文章や表などのデータをPC側に保管する必要がないため、ストレージも不要。

そこで、**「デスクトップ仮想化」と「アプリケーション仮想化」の使用を前提に、機能を最小限に絞ったクライアントPCが作られた。これをシンクライアント（Thin Client）という**。Thinは、「やせた」という意味。ちなみに、通常のPCを、Fat（太った） Clientと呼ぶことがある。最近では、タブレットやスマートフォンのアプリで、シンクライアント機能を実現しているものもある。

シンクライアントは、高い処理能力や大容量のストレージを搭載している一般のPCに比べて安価だ。**ユーザー個別の設定やアプリケーション、データは、サーバ側で管理しているので、仮に機械が故障しても、手持ちのPCを取り換えるだけで使用を再開できるので、管理負担も少なくて済む。また、シンクライアントにはストレージはなく、データは保管できないので、盗難にあっても、管理者がサーバーとの接続を遮断すれば、データが盗まれる危険はない。**

「シンクライアント」は、このような機能を絞り込んだPCの名称として使われている。さらに、「シンクライアントが利用できる仮想化方式」すなわち、「デスクトップ仮想化」と「アプリケーション仮想化」の総称としても、使われる場合がある。

#クライアント仮想化

クライアント仮想化は、**1つのクライアントPC上に複数の異なるオペレーティング・システムを同時に稼働させる技術**。

本来1人のユーザーに占有使用されるクライアントPCに、複数の仮想マシンを動かし、異なるOSを稼働させるのは、プログラムやデータの互換性を確保するためだ。。

たとえば、Windows10には「クライアント Hyper-V」と呼ばれるクライアント仮想化の機能が搭載されている。サーバ用のOSであるWindows serverに搭載されている仮想化のためのハイパーバイザ「Hyper-V」を、クライアントPC用に作り直したもの。この機能は、Windows10以前のバージョンであるWindows7やWindows8を動かすことができる仮想PCを、Windows10の中に作る。この機能により、**1台のPCの上で、Windows10と旧バージョンのWindowsを同時に稼働させることができる**。

この機能が必要になるのは、旧バージョンのWindowsでは動くけれど、Windows10では動かないソフトウェアがあるからだ。Windows10の導入に伴ってアプリケーションを移行するとなると、プログラムの修正やテストが必要となり、購入したパッケージ・ソフトウェアであれば、有償でバージョンアップする必要があるかもしれない。そのための作業の手間や費用は、台数が多ければ多いほど大きな負担となる。しかし**この機能を使えば、旧バージョン用として開発、購入したソフトウェアをそのまま使うことができる**。

また、AppleのMac OS上でWindowsを動かすクライアント仮想化のソフトウェアもある。これを使えば、1台のMacでMac OSとWindowsを同時に動かすことができる。そのため、それぞれでしか動かないアプリケーションを使うために、2つのマシンを用意する必要がなくなる。

#ストレージ仮想化

ストレージ仮想化は、**ハードウェアの物理的な制限・制約から解放するために使われる技術**。
ストレージの容量は、使っている / いないに関わらず、例えば、「128GB」というように物理的に決まってしまっている。複数サーバを使っている場合には、これをサーバ個別に固定的に割り当て、そこでしか使えないのでは、非効率的だ。そこで、**複数ストレージを1つにまとめ、複数サーバから共用し必要な容量だけを割り当てることで、使用効率を高めることができる**。また、シン・プロビジョニングや重複排除という技術で、使用効率や、利便性を高めることができる。

##シン・プロビジョニング

シン・プロビジョニングとは、**物理ストレージの容量を、実際より多くあるようにサーバ上のOSに見せかける技術**。これまでなら、物理ストレージの容量が変われば、サーバのの設定変更が必要だった。しかし、この技術を使えば、**サーバOSには、最初から十分に大きな要領で設定しておき、実際にはその時点で使う容量だけを用意し、足りなくなった容量を物理的に補充することができる**。そうすれば、**手間のかかる設定の変更が不要になり、運用負担が軽減されるとともに、物理的なストレージの容量を節約できる**。

##重複排除

重複排除は、**データの重複している部分を削減し、ストレージの使用効率を高める技術**。たとえば、電子メールでファイルを添付して、同時に複数の人に送信すると、同じファイルのコピーがいくつも作られてしまう。この**重複データを削除してデータ容量を削減する一方で、ユーザーには、これまでと変わらず複数のファイルがそこにあるかのように見せかけることができる。このように、ユーザーに認識させず、ストレージの容量を減らすことができる**。

ビッグデータの時代となり、ストレージの需要が高まる中、効率よくストレージを利用し、運用や管理の負担を軽減することへのニーズは、高まっている。

#SDIを容易に実現するハイパーコンバージド・インフラストラクチャ

インターネットに繋げば、いつでもどこでも望む情報が手に入り、アプリケーション・サービスを利用できるようになった。その結果、**必要となるシステム資源は、質的にも量的にも従来とは桁違いの規模となり、これが継続的に増大する状況が生まれている。これを「Webスケール」と呼んでおり、パブリック・クラウドは、このWebスケールに対応する必要がある**。

そのためには、CPUやメモリ、ストレージなどのハードウェア技術をそれぞれ個別に増強する「スケールアップ」では、大変な手間がかかるだけではなく、物理的な能力の上限に達してしまい、対応できなくなる。そこで、**同様のハードウェアを並列に追加し、規模を拡大して能力を増強させる「スケールアウト」での対応が一般的だ**。

##ハイパーコンバージド・インフラストラクチャ（HCI）

このやり方を、**自社内のインフラで実現しようという製品が「ハイパーコンバージド・インフラストラクチャ（HCI：Hyper-Converged Infrastructure）」**だ。**ラックの棚2つ分（2U）のケースにCPU、ネットワーク、ストレージが標準化されたシステム構成で収められており、ケース単位で増設すれば、搭載されている仮想化ソフトウェアがこれらを統合し、1つのインフラとして機能するよう、自動で設定してくれる**。そんなHCIの導入により、**導入や拡張に伴う作業負担が大幅に削減されるようになった**。

基本機能を1つの筐体に収め、システムの接続や基本的な設定をあらかじめ済ませて出荷する「コンバージド・システム」と呼ばれる製品もあるが、最初の導入は容易でも、構成が固定的で、規模や構成を変えないことを前提に使うにはいいが、拡張したくても容易にできないとい課題を抱えていた。一方でHCIは、**標準化されたシステム構成のモジュールを追加すれば、能力をスケールアウトに拡張でき、その設定も自動のため、拡張を迅速かつ段階的に行うことができる**。

##HCIの課題

そんなHCIの課題は、**標準システム単位でしか拡張できず、例えば、ストレージ容量のみを追加したくても、それができないことだ**。**これに対処すべく登場したのが、「コンポーザブル・インフラ」。例えば、ストレージを個別に導入しても、ソフトウェアが自動的に統合し、運用管理も自動化してくれる**。今後、HCIも進化し、HCIとコンポーザブル・インフラの境界があいまいになることが予想されている。


#ネットワーク仮想化

##SDN（Software-Defined Networking）

従来、ネットワークの構築は異なる役割や機能を持つ多数の機器をケーブルで接続し、それぞれ個別に手間のかかる設定が必要だった。この常識を変えたのが、**SDN（Software-Defined Networking）**。これは、ルーターやスイッチなどの**ネットワーク機器の構成や接続ルートなどを、ソフトウェアによる設定だけで実現する技術の総称のことだ**。

##SDNを導入すると

例えば、異なる複数企業のシステム機器が混在しているデータセンターの場合、従来は独立性を保証するため、それぞれに機器もネットワークも物理的に分離して別々に構築・管理しなければいけなかった。しかしSDNであれば、**すべてを1つの物理的なネットワークに接続したうえで、設定だけで個別に独立したネットワークとして、分離して機能させることができる**。また、従来は、ルーターやスイッチなど、機能の違う機器も必要だったが、**設定だけで必要とする機能構成をソフトウェア的に実現することができるNFV（Network Functions Virtualization：ネットワーク機器の仮想化）も使われている**。

##ポリシー

さらに、「ポリシー」に応じて、ネットワークの特性を制御できるようになった。**ポリシーとは、どのように扱うのかの方針や制約条件を定めた規範のこと**。例えば、「負荷を分散させたい」「音声や映像は途切れないように優先的に処理したい」といった**アプリケーションに応じたポリシーを設定し、それに応じてネットワーク全体の挙動を制御できるようになった**。

従来は、運用管理者がポリシーに応じて手作業でネットワーク機器個別に設定を行っていたが、**SDNにより、これらの作業をネットワーク全体に対して一括して、あるいはアプリケーションからの要求に応じて、自動で対応できるようになった。その結果、ネットワークの運用管理負担が軽減されるとともに、アプリケーションの変更やトラフィック（ネットワークを流れる通信量）の変化にダイナミックに対応できる、柔軟なネットワークが実現した**。

すでに解説したSDN（Software-Defined Networking）の一部として、また俊敏かつ柔軟なITインフラの構築や運用の基盤として、重要な役割を担っている。

#WANのソフトウェア化を実現するSD-WAN

##SD-WAN

**これまでの広域ネットワーク（WAN：Wide Area Network）は、専用回線、IP、VPN、インターネットVPN、4Gなど、帯域が制限され、品質が固定的なネットワークを使ってきたため、「変化に迅速、柔軟に対応できない」という課題があった**。この状況を変えようというのが、SD-WAN（Software-Defined WAN）。

**SD-WANは拠点間をつなぐ複数の異なる回線を統合・一括管理し、1つの仮想的なネットワークにすることで、課題を解決しようとしている。「利用するアプリケーションを識別して、ユーザーが設定したポリシーに基づき、WANのトラフィックをコントロールする技術」**といえるだろう。

これまで多くの企業は、アプリケーションを自社データセンターで一元に運用し、専用回線や閉域網を介して、各拠点にサービスとして提供してきた。そのため、インターネットを介し外部のクラウド・サービスを使うにも、ここを経由しなければならなかった。**しかしクラウド・サービスの普及と共に、データセンターにトラフィックが集中してボトルネックになり、レスポンスの低下、さらにはセキュリティ上の制約などもあって、とても使いづらいものになっている**。そこで、SD-WANを使い、この課題を解決しようとしている。SD-WANを使うと、以下のようなことができる。

##SD-WANを使うとできること

- 「アプリケーションの違い」「モバイルや業務拠点の違い」「トラフィック量の違い」「音声や動画など、低遅延時間をシビアに求められるサービスと、そうではない一般的な業務システムの違い」など、**様々な違いに応じて最適な回線に自動で切り替え、サービス品質の最適化や回線料金を削減できる**

- **ネットワークの接続方法が異なる複数のパブリック・クラウドと、自社所有のシステムを連携させる場合のネットワークを、一元に管理できる**

- **わかりやすいGUI（Graphical User Interface）でネットワークの状況を把握できるようにし、設定変更も容易に行えるため、ネットワーク機器設定の知識を持たない人でも、仮想ネットワークを構築・運用できる**

昨今、働き方改革の一環として、クラウド・サービスやリモート・ワークへの対応が求められ、多様なネットワーク利用に対処しなければならないことから、注目されている。

#ゼロトラスト・ネットワーク・セキュリティ

##従来の境界防衛型セキュリティ

「いつでも、どこでも働ける」環境を整えることは、今や働き方改革の1つの要件となっている。そうなると、社外に持ち出したデバイスで、社内システムやクラウドを活用して仕事をするのは当たり前となり、ネットワークにおける社内と社外の境界は意味を持たなくなる。また、ウイルスに感染したパソコンが社内ネットワークを介し感染を非とげ被害をもたらす事故や、内部の悪意のあるユーザーが機密所法を漏らすといった事件も後を絶たない。**「社内は“善”、社外は“悪”」という前提に立ち、ファイヤーウォールなどの「ゲートウェイで境界を守る」というこれまでの「境界防衛型セキュリティ」は、もはや役に立たなくなってしまった**。

##ゼロトラスト・ネットワーク・セキュリティとは？

このような状況を踏まえ、**「すべてのアクセスを信頼せず（ゼロトラスト：zero trust）、すべてを検査する」ことを前提に、ユーザーがアプリケーションやサービスにアクセスするごとに、そのユーザー（ID）およびデバイスに対する認証を行い、アクセス権限があるか否かを認証することでセキュリティを守るのが「ゼロトラスト・ネットワーク・セキュリティ」**。

具体的には、IDやデバイスに対するアクセス権認証をその都度行い、さらに以下の対策を実施する。

- **メールからの保護**：標的型メールの検出と排除

- **デバイスの保護**：PCへの侵入検知・隔離

- **IDの保護**：なりすまし検知・防止（クラウドとオンプレミス）

- **機密情報の保護**：自動的な分類・保護・未許可アプリや不正な操作の監視 

物理的なネットワークの境界で脅威を防ぐのではなく、**IDごとあるいはアクセスごとに、検知と対策をきめ細かく行うことで、驚異の影響範囲を限定し何らかの脅威があっても停止させるのは一部に留め、事業そのものは継続できるようにする**。それでも外部からの脅威の侵入を完全に防ぐことはできない。そこで、**問題の発生をリアルタイムに検知し、自己につながる予兆をいち早く発見し、事前に対処する仕組みも組み込める**。

これからはPCばかりではなく、**ネットに直接さらされるタブレットやスマホ、IoTデバイスについても同様の対策が求められる**。また、**これらの対応をユーザーに意識させることなく、負担をかけないように行うことも、大切な要件となる**。

#サイバー攻撃への対策を担う中核組織：CSIRT

##CSIRTとは？

サイバー攻撃は、巧妙化の度合いを増している。そのためどんなに堅牢に防御しても、セキュリティ事故（セキュリティ・インシデント）を完全に防ぐことはできない。そこで**「インシデントは必ず起こるもの」という前提で備えておくことが求められる。このような情報セキュリティ対応の中核を担う組織 / チームが、CSIRT（Computer Security Incident Response Team：シーサート）**だ。
CSIRTは、**自社へのサーバ攻撃を検知し、セキュリティ事故が発生すれば直ちに緊急対応する**。「火消し役」と考えるとわかりやすいかもしれない。そんなCSIRTの主な役割は、次の3点だ。

##CSIRTの役割

- **社内対応：セキュリティ情報の提供や指示・命令系統の整備・管理**

- **社外対応：社外からの問い合わせやインシデント対応についての統一した対外窓口（POC：Point of Contact）**

- **情報連係：外部のセキュリティ組織や他社のCSIRTと連係し、セキュリティに関する情報を共有**

インシデントに対応するには、セキュリティ対策を施したシステムの構築や運用管理、セキュリティに関する啓蒙活動や制度上の整備などが不可欠だが、対策に完全はない。そのために、**インシデントが発生すれば、直ちにそれを検知し対策を講じる組織であるCSIRTが必要となる**。

##CSIRTの情報連係

**CSIRTは恒常的な部門として組織されることもあるが、そのための要因やスキルを維持するのは容易ではない。そこで必要に応じて召集される組織にする場合もある**。前者は「消防署」、後者は「消防団」のような組織に例えるとわかりやすいかもしれない。また、**社内の要因だけでは、日々高度化、巧妙化するサイバー攻撃に対抗することは困難なので、セキュリティ対策の専門企業や、情報を共有あるいは対策を支援してくれる外部組織などの連携も欠かせない**。

セキュリティ・インシデントは、高度化、巧妙化するとともに、増え続けている。この事態に対応するために、**企業はCSIRTを設置し、適切に機能させることで、たとえインシデントが発生しても被害を最小限に食い止め、再発防止に努めることが求められる**。