Azure を使った実際のクラウド アプリの構築
作成者: Rick Anderson、Tom Dykstra
Fix It プロジェクトのダウンロードまたは電子書籍のダウンロード
この電子書籍では、実際のクラウド ソリューションを構築するためのパターンベースのアプローチについて説明します。 パターンは開発プロセスのほか、アーキテクチャとコーディングのプラクティスに適用されます。
このコンテンツは、Scott Guthrie が作成し、彼自身が 2013 年 6 月の Norwegian Developers Conference (NDC) (パート 1、パート 2) および 2013 年 9 月のMicrosoft Tech Ed Australia で提供したプレゼンテーションに基づいています。 このコンテンツをビデオから文章の形式に移行するにあたって、その改訂と拡張に多くの方に協力していただきました。
対象読者
この電子書籍では、クラウド向けの開発に関心がある、またはクラウドへの移行を検討している開発者や、初めてクラウド開発を行う開発者が知っておくべき最も重要な概念とプラクティスの概要を、簡潔に把握することができます。 それぞれの概念は具体例と共に説明され、各章にはより詳しい情報を得るための他のリソースへのリンクが含まれています。 各例と追加リソースへのリンクは Microsoft のフレームワークおよびサービス向けのものですが、説明されている原則は他の Web 開発フレームワークやクラウド環境にも適用できます。
クラウド向けの開発を既に行っている開発者は、ここでさらに成功するためのアイデアを見つけることができるかもしれません。 このシリーズの各章は単独で読むこともできるので、興味のあるトピックを選んでいただいてかまいません。
"Azure を使った実際のクラウド アプリの構築" に関する Scott Guthrie のプレゼンテーションをご覧になり、より詳しい最新の情報を知りたい方は、この電子書籍をご覧ください。
クラウド開発パターン
この電子書籍では、クラウド開発にお勧めの 13 とおりのパターンについて説明します。 ここでは "パターン" という言葉を、各作業についてお勧めの方法、すなわちクラウド アプリの開発、設計、コーディングに取り組む最善の方法という広い意味で使っています。 これらは、それに従えば "成功の落とし穴に落ちる" ことが可能になる、主要なパターンといえます。
-
- スクリプトを使って効率を最大化し、繰り返すプロセスのエラーを最小限に抑える。
- デモ: Azure 管理スクリプト。
-
- 分岐構造によるソース管理を設定し、DevOps ワークフローを促進する。
- デモ: ソース管理にスクリプトを追加する。
- デモ: 機密データをソース管理から除外する。
- デモ: Visual Studio で Git を使う。
-
- ソース管理の各チェックインを使って、ビルドとデプロイを自動化する。
-
- Web 層をステートレスに保つ。
- デモ: Azure App Service の Web Apps でのスケーリングと自動スケーリング。
- セッション状態を使わない。
- CDN が使えない場合に、フォールバックを備えた CDN を使う。
- 非同期プログラミング モデルを使う。
- デモ: ASP.NET MVC と Entity Framework での非同期。
-
- Azure Active Directory の概要。
- デモ: Azure Active Directory を使った ASP.NET アプリを作成する。
-
- データ ストアの種類。
- 適切なデータ ストアを選ぶ方法。
- デモ: Azure SQL Database。
-
- データを垂直、水平、またはその両方向にパーティション分割して、リレーショナル データベースのスケーリングを容易にする。
-
- BLOB サービスを使ってクラウドにファイルを格納する。
- デモ: Fix It アプリで BLOB ストレージを使う。
-
- 障害の種類。
- 障害の範囲。
- SAL について。
-
- テレメトリ アプリを購入することと、独自のコードを記述してアプリをインストルメント化することが両方必要な理由。
- デモ: Azure 用の New Relic
- デモ: Fix It アプリでコードをログする。
- デモ: Fix It アプリでの依存関係の挿入。
- デモ: Azure での組み込みログのサポート。
-
- スマート再試行またはバックオフ ロジックを使って、一時的な障害の影響を軽減する。
- デモ: Entity Framework 6 での再試行/バックオフ。
-
- 分散キャッシュを使って、スケーラビリティを向上させ、データベース トランザクション コストを削減する。
-
- Web 層とワーカー層を疎結合して、高可用性を実現し、スケーラビリティを向上させる。
- デモ: Fix It アプリでの Azure Storage キュー。
-
- 既知の問題
- ベスト プラクティス
- ダウンロード、ビルド、実行、デプロイの方法。
これらのパターンはすべてのクラウド環境に適用できますが、ここでは Visual Studio、Team Foundation Service、ASP.NET、Azure といった Microsoft のテクノロジとサービスに基づく例を使って説明します。
この章の残りの部分では、Fix It サンプル アプリケーションと、Fix It アプリを実行する Azure App Service クラウド環境の Web Apps について説明します。
Fix It サンプル アプリケーション
この電子書籍に含まれているスクリーン ショットとコード例のほとんどは、お勧めのクラウド アプリの開発パターンとプラクティスを示すためにもともと Scott Guthrie が開発した Fix It アプリに基づいています。
このサンプル アプリは、作業項目のチケットを作成するシンプルなシステムです。 何かを修正する必要があるときは、チケットを作成して他のユーザーに割り当てます。他のユーザーは、ログインして自分に割り当てられたチケットを確認し、作業が完了したらチケットを完了済みとしてマークすることができます。
これは標準の Visual Studio Web プロジェクトです。 ASP.NET MVC に基づいて構築され、SQL Server データベースが使用されます。 IIS Express でローカルに実行することも、Azure の Web サイトにデプロイしてクラウドで実行することもできます。 ログインには、フォーム認証とローカル データベースを使うか、Google などのソーシャル プロバイダーを使うことができます。 (後ほど、Active Directory 組織アカウントでログインする方法についても説明します。)
ログインしたら、チケットを作成し、他のユーザーに割り当て、修正したい内容の画像をアップロードすることができます。
自分が作成した作業項目の進行状況を追跡したり、自分に割り当てられたチケットを確認したり、チケットの詳細を表示したり、項目を完了済みとしてマークしたりできます。
機能という観点からは非常にシンプルなアプリですが、何百万人ものユーザー向けにスケーリングしたり、データベースの障害や接続の終了といった状況に対する回復性を備えたりするための構築方法を確認できます。 また、自動化されたアジャイル開発ワークフローを作成する方法についても説明します。これを使えば、シンプルな作業から始めて、効率的かつ迅速に開発サイクルを繰り返すことで、アプリを徐々に改善していくことができます。
Azure App Service の Web アプリ
Fix It アプリケーションで使用されているクラウド環境は、Web Sites と呼ばれる Azure のサービスです。 このサービスを利用すると、VM を作成して最新の状態に維持したり、IIS をインストールして構成したりするなどの作業を行うことなく、Azure で独自の Web アプリをホストできます。お客様のサイトは Microsoft の VM 上でホストされ、バックアップと回復やその他のサービスが自動的に提供されます。 Web Sites サービスでは、ASP.NET、Node.js、PHP、Python を使用できます。 Visual Studio、Web 配置、FTP、Git、または TFS を使って、非常に迅速にデプロイできます。 デプロイを開始してから、インターネット経由で更新内容を利用できるようになるまで、通常は数秒しかかかりません。 すべて無料で開始でき、トラフィックの増加に合わせてスケールアップできます。
Azure App Service の Web Apps のバックグラウンドでは、独自の VM 上で IIS を使って Web サイトをホストする場合は自分で構築しなければならない、多数のアーキテクチャ コンポーネントや機能が提供されています。 そのようなコンポーネントの 1 つに、自動的に IIS を構成し、サイトの実行に必要な数だけの VM にアプリケーションをインストールする、デプロイ エンドポイントがあります。
Web サイトにアクセスしたユーザーは、IIS の VM に直接アクセスするわけではなく、アプリケーション要求ルーティング処理 (ARR) の各ロード バランサーを経由します。 これらは独自のサーバーで使うこともできますが、ここでは自動的に設定されるというメリットがあります。 セッション アフィニティ、IIS のキューの深さ、各マシンの CPU 使用率などの要因に配慮するスマート ヒューリスティックを使って、Web サイトをホストする VM にトラフィックを転送することができます。
あるマシンがダウンした場合は、Azure が自動的にそれをローテーションから外し、新しい VM インスタンスを起動して、新しいインスタンスにトラフィックを転送し始めます。この間にアプリケーションのダウン時間は発生しません。
これらすべてが自動的に行われます。 必要なのは、Windows PowerShell、Visual Studio、または Azure 管理ポータルを使って Web サイトを作成し、アプリケーションをデプロイすることだけです。
Visual Studio で Web アプリケーションを作成して Azure Web Site にデプロイする方法を示す簡単なステップバイステップのチュートリアルについては、Azure と ASP.NET の概要に関する記事を参照してください。
まとめ
この概要では、書籍で取り上げられているトピックの一覧、サンプル アプリケーションのスクリーンショット、Azure App Service クラウド環境の Web Apps の簡単な概要について説明しました。 クラウドで、またクラウド向けにアプリを開発する大きな利点の 1 つは、テスト環境の作成やコードのデプロイなどの反復的な開発タスクを簡単に自動化できる点です。 次の章では、それを実現する方法について説明します。
リソース
この章で取り上げたトピックについて詳しくは、次のリソースを参照してください。
ドキュメント:
- Azure App Service の Web Apps。 Web Apps に関する Azure ドキュメントのポータル ページです。
- Web Apps、Cloud Services、VM: いつ、どれを使用するか? この章で示した WAWS は、Azure で Web アプリを実行する 3 つの方法のうちの 1 つに過ぎません。 この記事では、3 つの方法の違いが説明され、自分のシナリオに適した方法を選ぶためのガイダンスが提供されています。 Web Sites と同様に、Cloud Services も Azure の PaaS 機能です。 VM は IaaS 機能です。 PaaS と IaaS の説明については、データのオプションに関するの章を参照してください。
動画: