Eric Nelsonさんの'Windows Azure Platform: Articles from the Trenches Volume 1'(http://geekswithblogs.net/iupdateable/articles/windows-azure-platform-articles-from-the-trenches-volume-1.aspx)の翻訳です。
一部まだ手直ししたいところがありますが、まずは公開。誤字脱字、誤訳等ありましたらコメントください。少しずつ直していきたいと思ってます。
29. Windows Azure プラットフォーム:現場からの報告
WINDOWS AZURE プラットフォームと、コスト指向アーキテク チャ
By Marcus Tillett
コストは重要です
コスト指向開発は、目新しいものではありません。アプリケーションや製品を構築するための低コス
トのアプローチは望ましいものですが、これを達成するための方法論は、常に洗練されたものである
とは限りません。Azure のようなクラウドプラットフォームについて考慮する場合、アーキテクチャ
の選択がコストに与える影響は大きいものになるので、より洗練されたアプローチが必要になります。
伝統的なオンプレミスのアーキテクチャや、ホストされているアークテクチャの場合、コストは重要
なファクターとは考えられないかも知れませんが、Azure の場合、コストははるかに注目される領域
になります。考慮しなければならないコストは様々です。それらのコストを考慮しなければならない
のは、Azure に関してでもありますし、開発全般に関してでもありますし、アプリケーションのライ
フサイクル管理のプロセスに関してでもあります。
考慮すべきコスト
開発プロセスは、Azure においてコストについてしっかり考慮 まとめ
する必要があるかもしれないものです。Azure での開発戦略は
これまでのオンプレミスあるいはホス
幅広く考えることができます。1 つの極論としては、Azure の
トされたソリューションに比べ、Azure
環境自体で開発を行うこともできますし、反対の極論としては、
ではアーキテクチャに関する考察がコ
Azure を全く考慮することなく開発することもできます。
ストに大きく影響する。
アーキテクチャの選択が、コストに与
この開発戦略の幅の中でどういった選択をするのかによって、
える影響は大きなものになり得る。
コストは影響されますし、大きなメリットもデメリットも生じ
コストは、開発全体、そしてアプリケ
ます。例えば、ソフトウェアファクトリーの利用を考えてみま
ーションのライフサイクル管理のプロ
しょう。厳密な構築プロセスを採用するソフトウェアファクト セスを考慮に入れて検討すべきであ
リーを採用する場合、生産プラットフォームを利用するための る。
コストは、必要なプラットフォームとトレーニングの双方にか 選択したアーキテクチャのコストはモ
かる出費のため、まかないきれないほど高いものになってしま デル化しなければならないが、さら
うかも知れません。こういった懸念によって、コスト指向アー に重要なのは、そのモデルをテスト
クテクチャの選択が進むことになるでしょう。コスト指向アー することである。
キテクチャでは、Azure 固有のすべてのコンポーネントは、
These concerns would drive a cost-oriented architecture where all Azure specific components are abstracted
from the developer or potentially replaced with non-Azure components. While this may be an extreme
example, it does highlight one of several areas to be considered.
もう 1 つの重要なトピックとして、既存のアプリケーションのマイグレーションや、新しいアプリケ
ーションに求められるデータのセットアップの考慮のための方法論があります。マイグレーションや
設定は、アプリケーションとデータの両方を含む必要があります。大量のデータや複雑なデータを転
送するのに必要となる時間やプロセスや手順は、非常に大きな仕事になり得るものです。利用中のデ
29
30. Windows Azure プラットフォーム:現場からの報告
ータソースに対する変更の管理には潜在的な複雑性があるので、選択したアプローチに必要となるビ
ジネスコストは、非常に重要なファクターになり得るのです。
プラットフォーム自身がコストに与える影響は、おそらく、明白にコスト指向アーキテクチャを必要
とする領域でしょう。例えば、データストレージにおける SQL Azure と Windows Azure ストレージと
の劇的な価格差に注目するのは自然なことです。アプリケーションによっては、これはきわめて重要
なことですが、より優先すべきは、しっかりとしたアークテクチャを構築するためのバランスをとる
ことです。そうすることによって、初期のコストにだけ注目するのではなく、長期的に見た場合の裁
量のアプローチが得られるのです。そのためには、アプリケーションのすべての構成要素のコストを
モデル化するべきですが、より重要なのは、アプリケーションのコスト的にもっとも重要な側面によ
ってそのモデルをテストし、アプリケーションの設計と、Azure の課金メカニズムがコストモデルに
どのように影響するかを理解することです。この情報があれば、大幅なコスト削減という観点から、
アーキテクチャをレビューすることができます。コストが重要な部分では、常に最終的なアプリケー
ションにモニタリング機能を持たせておき、Azure とアプリケーションの進歩がコストに与える明確
な影響をしっかりと分析しながら、そのモニタリング機能を使ってシステムをチューニングしましょ
う。実際のところ、コストと SLA を検証する手段として、システム全体をモニタリングすることは、
もう 1 つのアークテクチャ上の考慮点なのです。
完全なコストモデリングプロセスの拡張へ至る道筋としては、プラットフォームのコストがコスト指
向アーキテクチャを示唆するようなシナリオがいくつもあります。その中の 1 つは、アプリケーショ
ンを、大量のテナントを抱えるマルチテナント化するというものです。一組のサーバーからなる、基
本的なオンプレミスあるいはホストされたサーバーモデルでは、それぞれのテナントに対して個別の
IIS Web サイトと SQL Server のデータベースを生成できます。このモデルは、数十から、おそらくは
数百までのテナントを、単一のテナントとほぼ同様のコストでサポートします。同じアーキテクチャ
を Azure に移行すれば、テナントは 1 つの Windows Azure Web ロールと、1GB の SQL Azure データベ
ースからなるでしょう。これはおよそ、テナント毎に一ヶ月あたり 100$ほどになりますが、この
Azure アーキテクチャのコストはテナント数に対して線形にスケールします。ここでは Azurega マル
チテナントアプリケーションに不向きだと主張したいわけではありませんが、アプリケーションにと
ってコストが重要なファクターである場合は、異なるアークテクチャ上のアプローチが必要になるこ
ともあるのです。
結論
8 9,10
本稿で考察したものは、コスト駆動 あるいはコスト指向アーキテクチャ と名付けることができる
かも知れませんが、用語よりも重要なのは、これまでのオンプレミスあるいはホストされたソリュー
ションに比べて、Azure ではアーキテクチャに関する考察がコストに及ぼす影響が大きいことを理解
することなのです。
8
Lessons Learned: Building Multi-Tenant Applications with the Windows Azure Platform
http://microsoftpdc.com/Sessions/SVC33
9
Thinking of... Delivering Solutions on the Windows Azure Platform? http://www.amazon.co.uk/Thinking-
Delivering-Solutions-Platform-Questions/dp/0956155634/
10
Windows Azure Platform for Enterprises http://msdn.microsoft.com/en-us/magazine/ee309870.aspx
30
31. Windows Azure プラットフォーム:現場からの報告
初めての WINDOWS AZURE プロジェクトにおけるリスクの回避
By Simon Munro
Azure に基づくソリューションの構築に傾ける開発者の熱意は、必ずしも企業に共有してもらえると
は限りません。クラウドが「未来への道」であることは素晴らしいこと(そしておそらく私たちには
明白なこと)ですが、個人や企業、ベンダーの中には、この変化に対応する準備ができているものも
あれば、できていないものもあります。すべてのベンダーがクラウドのための技術を持っているわけ
ではありませんし、多くの企業、製品、産業や職が、クラウドの波によって海の向こうに流されて行
ってしまうことになるでしょう。ベンダーは我先に注意を引こうとし、そのバイアスのかかったマー
ケティングに毒された意見を押しつけています。このバイアスは、もっとも巨大な恐竜によって与え
られたものです。この恐竜-すなわち紙媒体のメディアは、自身の持つ文化のために、インターネッ
トがもたらした変化に対応することすらできないのです。クラウドに反対し、ベンダーを非難する意
見の多くは、恐れと、業界の仲間の抱えるリスクからくるもので、(現在の)リスク回避型の環境に
おける地位を保ちたいためのものなのです。私たち自身の組織の中で、クラウドコンピューティング
に関する決断を下してもらわなければならない人たちが、自分たちのソリューションを Azure 上で動
作させるという最新の考え方に対してコミットするということに対し、混乱し、二の足を踏んでいる
のは、驚くべきことではありません。「クラウド」という言葉は、「Web」という言葉の同義語にな
り、私たちが関心を持っている「クラウドコンピューティング」プラットフォームとの境界もはっき
りしないものになっています-
The term ‘the cloud’ has become synonymous with ‘the web’ and is indistinct from ‘cloud computing’
platforms that we are interested in – the unfortunate side effect being that the behaviour of Google, Facebook,
Apple and other web-consumer facing properties that willy-nilly change terms of service and sell personal data
for profit casts a shadow over business oriented cloud computing services.
この粉塵は、将来のどこかの時点で落ち着くことでしょうが、近い将来に Azure 上でソリューション
を構築したいのであれば、私は企業からの支援を得るため、この問題を企業が理解する手助けをする
責任を負わなければなりません。私たちが技術的な問題だけを扱っていたくても、ほとんどの環境に
おいて、現時点での現実の中では、予想されるリスクについて前もって議論しておき、Microsoft と
Windows Azure プラットフォームがそうしているのと同じように、私たちがが積極的にリスクを管理
し、低減していることを示さなければならないのです。
一般的なリスク
現在のところ、リスクについては非常に広く知られています。これは、データがいったんその組織内
に隔離されているデータセンターの外にあるデータベースに置かれてしまえば、データに対するコン
トロールや権限がうしなわれてしまうからです。共学の寮で暮らす学生とは異なり、データは実家を
出たとたんに酔っ払って自分の写真を Facebook にアップしたりはしませんが、オフプレミスのデー
タは高リスクであるという疑いは残ります。とはいえ、データに関するリスクは増大するかも知れま
せんが、実際のリスクは多くの場合ひどく誇張されており、管理することは可能です。
プロセスに関するリスクもよく知られており、これは主にソリューションの運用面において、他者が
参加することからくるものです。企業はもはや、自社内の IT に対しては持ち得たようなサービスの
レベルや信頼を、外部のサービス提供者に強制することはできません。データの場合と同様に、顧客
31
32. Windows Azure プラットフォーム:現場からの報告
がベンダーロックインを避けようとし、サービスレベルを保証し、運用やセキュリティ、パフォーマ
ンスやその他の標準を管理しようとするにつれて、きわめて複雑な契約上の分岐が生じてしまうとい
う、現実の問題がここにはあります。
隠れたリスク
主流の CIO の情報ソースは、扱う範囲が広いためにリスクを広めてしまいますが、主としてより技術
的な性格を持っているために、同じように現実的なものでありながら、それほど知られていないリス
クが多く存在しています。
もっとも明白なのは、セキュアで信頼性があり、高性能なクラウドコンピューティングソリューショ
ンを生み出すのに必要な、スキルや経験が欠けているというものです。このことはまた、パフォーマ
ンスのボトルネックに対し、単純にハードウェアを投入するのに比べて、開発技術者のコストの方が
高くなってしまうという問題にも関係します。
私たちが信頼を置く、プラットフォームとツールの提供者である Microsoft でさえも、Azure が持つリ
スクを抱えています。Azure テーブルやキューといったクラウド技術の、オンプレミスでの代理技術
が欠如していることによって、Azure プラットフォームへのコミットメントは、きわめて高いものに
なってしまい(ベンダーロックインと同じようなものです)ますし、ツールはまだ未成熟で、継続的
インテグレーション(グレース・モリソンによる‘Using a CI build to achieve an automated deployment of
your latest build’を参照)のような、認知されている技術的なプラクティスをサポートすることも用意
ではありません。
リスク低減のための非技術的戦略
究極的には、リスク管理の責任は、組織内のプロジェクトマネージャーやその他の人員に帰せられる
ものですが、リスクの特定は、依然としてチームのメンバー全員の責任です。本書をダウンロードす
ることで、読者はチーム内の同僚以上にクラウドコンピューティングに関する知識を得ることになっ
たので、技術的な側面に踏み込む前に、より多くの責任を背負い、リスク低減の側面の中でも、コー
ドとは関わらない部分に対処しなければならないでしょう。
正しいアプリケーションの選択
シンプルで、クラウドコンピューティングにより適しているものを選択しましょう。それは例えば、
公開され、要求のピークがあるかもしれないようなものです。機微なデータを含んでいたり、他の多
くのシステムと統合されたり、既存のレガシーシステムからのマイグレーションであったり、多くの
伝統的なデータベースストレージやレポートを含んでいたりするアプリケーションに取り組む前に、
こういった例での成功を積み上げましょう。
早めに始める
そのプロジェクトが、目立たなくてつまらない開発を行うものだったとしても、企業における法務、
コンプライアンス、運用、財務、監査やその他の部門との関わりは、通常より早めに始めなければな
りません。通常は、既存のデータセンターに新しい Web サイトを立ち上げる心配などはしませんが、
32
35. Windows Azure プラットフォーム:現場からの報告
You need to hone these skills as single layered, monolithic architectures that seem easy at first and are
encouraged by Microsoft marketing and tooling will result in an approach with high and unnecessary risk in an
already risky space.
開発者の責任
技術者は、クラウドコンピューティングによってもたらされる技術的な可能性に興奮するかも知れま
せんが、企業やその他の方針決定者は、おそらく他の(最近の)どのコンピューティング技術の波と
比べても、クラウドコンピューティングに対して警戒心を抱いています。彼らは、ベンダーのマーケ
ティング担当者達や、クラウドの自称エキスパートの矛盾するメッセージに目を通しており、一方で
既存の仕事を守ろうとする彼らのスタッフからは、廊下で雑音をささやかれているのです。従って、
リスク管理やアーキテクチャの売り込みは、もっともエキサイティングな開発者のスキルではないか
も知れませんが、クラウドコンピューティングに必要なのは、私たちがクラウドコンピューティング
を企業に持ち込み、恐れを静める責任を負うことなのです。
35
38. Windows Azure プラットフォーム:現場からの報告
継続的インテグレーションビルドを利用した 、最新ビルドの自動化の実現
By Grace Mollison
この記事は、タスクやプロパティといった Team Foundation Buidl と MSBuild の概念に読者が慣れてい
ることを前提として書かれています。
継続的インテグレーション(CI)ビルドを設定し、成功したビルドパッケージを直接 Azure に自動的
に送信するのは、最初から簡単にできることではなく、多尐の作業を必要とします。この記事では、
Windows Azure プラットフォームを使い、See the Difference プロジェクトを完成させるにあたって採
用したアプローチの概要を述べます。
正しい “BITS”の入手
私たちが最初に行ったのは、ビルドサーバーがコマンドラインからターゲットの Windows Azure ポー
タルにアクセスするのに必要なコンポーネントをそろえ、設定することでした。
そのためには、Azure Service Management API を使うことが必要でした。この API を使うには、x.509
証明書が必要です。私は Windows SDK にある makecert ツールを使って自己証明書を生成しました。
やり方の例を以下に示します。
"c:Program FilesMicrosoft SDKsWindowsv6.0Abinmakecert" -r -pe -a sha1 -n
"CN=Windows Azure Authentication Certificate" -ss My -len 2048 -sp "Microsoft
Enhanced RSA and AES Cryptographic Provider" -sy 24 MySelfSignedCert.cer.
Creating and using Self Signed Certificates for use with Azure Service Management API という Blog のポスト
では、ターゲットの Azure のポータルおよびそのポータルと通信するマシン上で証明書を設定する方
法について、詳細に説明されています。
私は Windows Azure Service Management PowerShell CmdLets と Windows Azure Service Management API
Tool をダウンロードしました。これらはどちらも、Service Management API を通じて Azure のポータ
ルにリモートアクセスするのに便利なものです。この段階では、どちらを使うかはまだ何も決めてい
ませんでした。私は、Build の一部として両方を使ってみた結果、Service Management API ツールの
csmanage の方を(PowerShell の大ファンであるにもかかわらず)気に入りました。先に挙げた Blog
のポストには、Azure のステージング環境へのデプロイに、x.509 証明書や API および Powershell を使
う方法が示されています。
デプロイメントのためのパッケージング
次に、私はデプロイメントのためのアプリケーションのパッケージングについて調べました。コマン
ドラインからアプリケーションをパッケージングするにあたって、重要なことが 2 つあります。
パッケージの構築に必要になるので、ロールの種類と名前を取得する
サービス定義ファイルの場所が分かっていることを確認する
ServiceDefintion.csdef ファイルには、Windows Azure のコマンドラインツールである cspack を使って
パッケージを構成するのに必要となる、ロールの種類と名前が含まれています。以下に示す
38