Microsoft Azureスマート解説【第4回】
ITインフラの新常識“Immutable Infrastructure”の先駆け、Azure クラウドサービス
既に4年前からImmutable Infrastructureを実現している「Microsoft Azure クラウドサービス」。インフラに依存しない/させない設計をすることで、クラウドのメリットを十分に活用することができる。
近年注目を集める“Immutable Infrastructure”
近年、“Immutable Infrastructure”と呼ばれる、新しいインフラの管理手法が注目を集めている。Immutable Infrastructureをテーマとしたイベント「Immutable Infrastructure Conference #1」には、定員150人に対して、400人の応募があった。
Immutable Infrastructureでは、名前の通り一度作成したインフラを不変なものとして扱う。すなわち、サーバの状態管理を行わず、アプリケーションをデプロイするたびに新しいインフラを構築する。そして、旧インフラについては、不要になり次第、破棄する。
従来のデプロイ方式では、既存のサーバへ上書きデプロイを行う。この場合、サーバの状態によってはデプロイに失敗してしまう。どんなにサーバの状態を管理していても、予期しない設定が原因で失敗することがある。そして失敗した場合、ロールバックは容易ではなく、ロールバック中はサービスが停止してしまう。また、本番環境と同じように開発環境を構築することが困難であり、両環境の差異がデプロイ失敗の原因になる場合がある。
これに対してImmutable Infrastructureでは、デプロイのたびに新しいインフラを構築するため、既存のサーバの状態によるデプロイの失敗が発生しない。また、サーバの状態管理が不要になるため、作業量を大幅に削減できる。そして、本番環境の状態が不変であるため、開発環境を本番環境に近づけることが容易である。
デプロイに失敗してもサービスを停止させないようにする「Blue Green Deployment」というデプロイ方式がある。この方式は、Immutable Infrastructureで活用できる。本方式では、現システムが稼働しているインフラとは別に、新システムを稼働させるインフラを新たに構築し、デプロイを行う。新システムの動作検証が完了し次第、ルータやロードバランサの宛先を新システムへ切り替える。もし新システムのデプロイが失敗しても、現システムには影響がないため、安全にシステムを切り替えることができる。
また、Immutable Infrastructureはシステムのスケーラビリティにも大きく貢献する。デプロイ時に自動でインフラを構築することになるため、サーバをスケールアウトさせるときのサーバ構築作業がほぼ不要になる。これにより、数十台規模のスケールアウトでも非常に小さい作業量で対応できる。そのため、使いたいときに使いたいだけコンピューティングリソースを使うことができる、というクラウドの利点を十分に活用できる。
しかし、メリットばかりではない。基本的に、Immutable Infrastructureを実現するためには、できるだけインフラ構成を静的にする必要がある。そして、その上で動作するアプリケーションはインフラ構成に依存しない/させないように設計する必要がある。つまり、アプリケーションアーキテクチャが制限されてしまう。
Immutable Infrastructureを実現しているMicrosoft Azureクラウドサービス
これまでの話を踏まえると、Microsoft Azureを知っている読者であれば、「Microsoft Azure クラウドサービス」がImmutable Infrastructureを実現していることに気付いたのではないだろうか。Microsoftが提供するPaaS(Platform as a Service)であるクラウドサービスは、2010年の「Windows Azure」サービス開始当初から提供されている。つまり、4年前から既にImmutable Infrastructureを実現していることになる。
ユーザーは、開発したアプリケーションと、インフラ設定(サーバ数、サイズなど)を含めたパッケージを、クラウドサービスへデプロイする。すると、Microsoftが管理するハイパーバイザー(Hyper-V)で、インフラ設定に従ってサーバ(Windows Server)が自動で作成され、作成後、デプロイしたアプリケーションが稼働する。サーバはパッケージをデプロイするたびに作成され、古いサーバは破棄される。
アプリケーションの開発環境については、Microsoftからエミュレータが提供されているため、本番環境との差異が極めて小さい環境で開発することができる。これにより、環境の差異によるデプロイ失敗の可能性を小さくすることができる。
デプロイ先としては、運用環境とステージング環境が存在する。運用環境はユーザーへ公開するための環境であり、ステージング環境は公開前に動作確認を行うための環境として利用する。両環境の入れ替えは、「VIPスワップ」という機能を利用する。この機能を利用すると、両環境のVIP(仮想IP)をダウンタイムなしで瞬時に入れ替えることができる。
サーバのスケールイン/アウトについては、管理ポータルの操作で簡単に行うことができる。また、サーバの負荷や、あらかじめ指定したスケジュールに応じて自動スケールさせることもできる。
サーバのOSがWindows Serverであるなど、インフラ構成がある程度固定されているため、アプリケーションアーキテクチャに制限はある。しかし、インフラ構成を静的にすることで、インフラを意識しない開発や、サーバの自由自在なスケールを実現している。インフラは稼働率99.95%がサポートされているため、ほぼ心配する必要はない。開発者はコードにだけ集中することができる。これにより、開発の高速化と、システムの品質向上を実現する。
クラウドサービスでの開発
クラウドサービスとは、名前の通り、複数のアプリケーションがクラウド上で稼働するサービスである。1つのクラウドサービスにつき、「運用」と「ステージング」の2つのデプロイメントを持つ。各デプロイメントは、アプリケーションの実行形態に当たるロールを複数持つ。ロールは「Workerロール」と「Webロール」の2種類が存在する。Workerロールはバッチ処理を行い、WebロールはWebアプリケーション/Web APIを動作させる。各ロールは、アプリケーションの実行サーバに当たるインスタンスを複数持つ。ロールに対する通信は、自動で構築されるロードバランサによって、各インスタンスに振り分けられる。
クラウドサービスへのアプリケーションデプロイは、サービス構成ファイル(.cscfg)とクラウドサービスパッケージファイル(.cspkg)を展開することで実現する。サービス構成ファイルは、インスタンスのOSファミリ、OSバージョン、インスタンス数、アプリケーション設定などを記述したものである。クラウドサービスパッケージファイルは、プログラムのソースコードとサービス定義ファイル(*.csdef)で構成される。サービス定義ファイルは、インスタンスサイズやエンドポイントなどを記述したものである(第3回「使い勝手はどんな感じ? 『Microsoft Azure 仮想マシン』を解説」を参照)。
クラウドサービスで稼働させるアプリケーションを開発するには、Microsoftから提供されている“Windows Azure SDK”を利用する必要がある。SDKはこのURLからダウンロードすることができる。
開発言語は.NETとJavaに、WebロールのみであればPHPに対応している。SDKを用いることで、アプリケーションのパッケージングとクラウドサービスへのデプロイが、IDE(Visual Studio、Eclipse)で可能になる。また、デプロイ自体は、管理ポータルでクラウドサービスパッケージとサービス構成ファイルをアップロードすることでも可能である。これにより、開発者からの本番環境へのデプロイを禁止にし、デプロイできるのは検証済みパッケージを受け取った運用管理者のみにする、といったデプロイ管理を厳密に行う運用が可能になる。
管理ポータルでは、クラウドサービスのパフォーマンス情報の確認や、インスタンス数の変更ができる。インスタンス数については、CPU負荷率や、参照しているキューのメッセージ数、スケジュールに応じた自動スケールを設定できる。
また、インスタンス起動時に実行するスクリプト(スタートアップタスク)を指定することで、OSの設定など、実行環境のカスタマイズができる。OSには、リモートデスクトップ接続でログインすることも可能である。これらにより、クラウドサービスの開発では、ミドルウェア以下の管理が不要である、というPaaSのメリットを享受しながら、実行環境のカスタマイズも可能である。そのため、アプリケーション開発の拡張性も十分持っているといえる。
クラウドサービスの開発には幾つかの注意点がある。デプロイのたびにインスタンスが再生成されるため、ローカルディスクに存在するファイルが消失してしまう。そのため、アプリケーションのログファイルなどはMicrosoft Azureストレージなどの外部に保存するべきである。
また、1つのロールにつき、インスタンスは2つ以上の起動が強く推奨されている。1つしか起動していない場合、稼働率99.95%が保証されない。クラウドサービスでは、インスタンスのOSに対して自動的にパッチが適用されるが、その際にインスタンスの再起動が発生する。2つ以上起動している場合は、必ず1つ以上のインスタンスが起動しているように、段階的にパッチが適用されるため、サービスが停止することはない。しかし、1つしか起動していない場合はそれができず、数分程度であるが停止してしまう。サービスの停止が許されないシステムであれば、各ロールのインスタンス数を2つ以上にする必要がある。
クラウドサービスの活用シーン
クラウドサービスの活用シーンとして、処理要求量が大量かつ動的に変化する分散コンピューティングシステムや、ユーザーアクセス数が予測しづらく、急増する可能性があるキャンペーンサイトなどが挙げられる。
活用シーンの例として、ユーザーのリクエストに応じて、比較的負荷の高い処理が行われるWebアプリケーションでの活用を紹介する。もしWebアプリケーション側で負荷の高い処理を行うと、ユーザーリクエスト数が突発的に急増した場合にコンピューティングリソースが足りなくなり、レスポンスをさばききれなくなる。最悪、サーバがダウンしてリクエストがロストする可能性がある。
そこで、クラウドサービスのWebロールおよびWorkerロールを活用する。ユーザーからのリクエスト受付はWebロールに、負荷の高い処理はWorkerロールに行わせるようにする。分離した2つのロールの連携は、Microsoft Azureストレージの「キュー」を用いて行う。
リクエストを受けたWebロールは、「キュー」にリクエスト情報を含めたメッセージをエンキューする。エンキューされたメッセージは、バックグラウンドで稼働するWorkerロールでデキューして処理する。「キュー」を使うことにより、処理の非同期化を実現している。
もしリクエスト数が突発的に急増しても、Webロールでは負荷の高い処理を行わないため、ダウンせずさばき切ることができる。リクエストは、既定で3本のディスクに複製して管理されている「キュー」に投入しているため、ロストする心配がない。
Workerロールはたまっているリクエスト数に応じて、自動的にスケールイン/アウトさせることができる。そのため、無駄なコストを掛けず、効率的に処理することが可能だ。また、Workerロールでの処理が成功した場合にのみ、リクエストをキューから削除できる。よって、万が一処理に失敗した場合も、リクエストがロストすることはない。
このアーキテクチャは、処理データをロストすることが許されないエンタープライズシステムで活用することができる。
Webサイトとの使い分け
本連載の第2回「IaaSとの違いは? Microsoft AzureのWebサイト実行基盤を解説」で説明した通り、「Microsoft Azure Webサイト」はクラウドサービスと同じPaaSである。そして、このWebサイトとクラウドサービスのWebロールは、“Webサイト/アプリケーション実行基盤”として用途が同じである。この2つの違いは、アプリケーションアーキテクチャに対する制限の違いである。
クラウドサービスがデプロイ時にサーバを新規作成するのに対して、WebサイトはMicrosoftが提供する既存のWebサーバ(IIS)にサイトを新規作成する。クラウドサービスではスタートアップタスクなどでOSやWebサーバ(IIS)の設定を変更することが可能であるが、WebサイトではOSどころか、Webサーバの設定をすることさえ困難である。
しかし、クラウドサービスがデプロイに5~10分程度要するのに対して、Webサイトはサーバを新規作成する手間がないため、数秒でデプロイすることができる。また、サイトのスケールイン/アウトも数秒で完了する。つまりWebサイトは、より徹底して手軽さや高速なスケール能力を追求したPaaSといえる。
どちらのサービスを用いるかは、開発するWebシステムに応じて決定する必要がある。OSやミドルウェアの拡張を要する高度な要件のWebシステムであればクラウドサービスを、ミドルウェア以下に依存する必要のないWebシステムであればWebサイトを用いるのが良いだろう。
クラウドのメリットを十分に活用できるPaaS
もしインフラに依存せざるを得ないWebシステムであれば、IaaS(Infrastructure as a Service)である仮想マシンを利用する必要がある。
しかしその場合、インフラ構築/管理作業が発生し、PaaSと比べるとサーバのスケールイン/アウトを行う際の作業が大きく発生し、自由自在にスケールすることが困難になってしまう。
使いたいときに使いたいだけコンピューティングリソースを使うことができる、というクラウドのメリットを十分に活用したいのであれば、インフラに依存しないWebシステムを設計して、PaaSを利用することを強くお勧めする。
日山雅之(ひやま まさゆき)
株式会社FIXER Enterprise Cloud Unit クラウドエンジニア
学生時代に地元のITベンチャー企業にてプログラミングのアルバイトを行い、そこでプログラミングの奥深さに魅了され、スーパープログラマを目指す。大学院を卒業後、現日立システムズに入社し、App Bridgeシリーズの開発に携わる。その後、プログラミング技術をより高めるべく株式会社FIXERに入社。Microsoft Azureの虜になる。マイクロソフト認定ソリューションデベロッパー(WebApplication)およびAWS認定ソリューションアーキテクト(アソシエイト)。
【FIXER公式サイト】http://www.fixer.co.jp/
【cloud.config公式サイト】http://www.cloud-config.jp/
Copyright © ITmedia, Inc. All Rights Reserved.
Microsoft Azureスマート解説
この記事の著者
関連記事
新着ホワイトペーパー PR
-
製品資料
[LRM株式会社] 「標的型攻撃メール」事例・サンプル集 -
製品資料
[LRM株式会社] セキュリティ教育はなぜ「年間計画」を立てる必要があるのか? -
製品資料
[LRM株式会社] セキュリティの重要性が伝わらない…… 効果がない社員教育から脱却する方法 -
製品資料
[LRM株式会社] 「標的型攻撃メール訓練」導入ガイド 社員の意識を確実に高める仕組みの作り方 -
事例
[株式会社マクニカ] アイカ工業に学ぶ脆弱性対策 情シスが把握できずにいたアセットも正確に把握
こんなメディアも見られています
TechTargetジャパンに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
ベンダーコンテンツ PR
From Informa TechTarget
SpecialPR
アクセスランキング
-
1
「VMware離れ」は本当か 3000社がVCF 9にかじを切った現実的な理由
-
2
100億円の「Linux更新」を回避 みずほ銀行が選んだ“おきて破り”のRHEL延命策
-
3
Microsoft製品でここまで自動化できる 情シスがやめられる手作業10選
-
4
「Microsoft 365」が乗っ取られる 跡形もなくMFAを破る手口
-
5
Oracle巨大ITプロジェクトはなぜつまずいたのか 8年で導入1割、追加で170億ドル
-
6
Netflixのバックエンドは「ほぼJava」 3000超のアプリを支える開発基盤の裏側
-
7
エンジニアが選考を辞退する本当の理由 7割が隠す“面接の違和感”とは
-
8
ISMSの“コンサル丸投げ”が招く数千万円の無駄 NTTドコモビジネスの脱出劇
-
9
AI全部入り「Microsoft 365 E7」に企業が二の足を踏む訳 移行意向はわずか4%
-
10
「Windows派」「Linux派」を分ける決定的な違い
ホワイトペーパーランキング PR
-
1
AIエージェントで多様な日常業務を効率化するための入門ガイド
-
2
AIが「わざわざ使うツール」になっていない? 業務で自然に使う導線にする秘訣
-
3
5回聞くだけじゃ足りない? トヨタ式「なぜなぜ分析」の正しい実践方法
-
4
JR西日本ITソリューションズが「監視業務の属人化」を解消した方法とは?
-
5
「脱Excel」か「Excel快適化」か? 現場にやさしい業務改善の進め方
-
6
インシデント対応工数を約3割削減、東京ガスの事例に学ぶ監視体制刷新のコツ
-
7
PostgreSQLの「機能」「性能」「運用」「拡張性」に関する悩みの解消法
-
8
5分で分かる「セキュア大容量ファイル転送サービス」の機能とメリット
-
9
Macの安全神話は崩壊? 最新の脅威動向から見えた攻撃のトレンドと有効な対策
-
10
情報セキュリティ対策早分かりガイド:25の自社診断で弱点と解決策を理解
TechTargetジャパン SNS
インフォメーション
注目情報をチェック
TechTargetジャパンをフォロー