演習 - N 層アーキテクチャをデプロイする

完了

あるアプリケーションをオンプレミスから Azure に移行したシナリオを思い出してください。 このアーキテクチャはどのようになるでしょうか? 組織には、試行の候補として適切な、重要でないアプリケーションがあります。それは、お昼に何を食べるかというありふれた問題を解決するために作成されたアプリケーションです。

昼食を取るために友人や同僚たちとグループで出かけたことを思い出してください。 簡単に決めることができましたか? それとも、皆が言う「何でもいい」という言葉の本当の意味を理解するのに時間がかかりましたか? この問題を解決するために役立つ可能性がある 3 層アーキテクチャに基づくアプリケーションをデプロイしてみましょう。 このアプリケーションでは、昼食の選択肢を提案し、全員が自分の好みを投票できます。

各層を Azure リソースとしてデプロイしてから実際のコードをデプロイする、このアプリケーション用のテンプレートが作成されています。 このアプリケーションは、Linux サーバー上にデプロイされる ASP.NET Core MVC アプリケーションですが、このアーキテクチャ スタイルは、基になる OS プラットフォームや SDK に関係なく使用できます。

このテンプレートでデプロイされる内容の大まかな視覚化を次に示します。

Visualization of the N-tier architecture to be deployed in this unit.

N 層アーキテクチャをデプロイする

  1. 次のコマンドを実行して、デプロイを開始します。 az deployment group create コマンドによって、テンプレート ファイルと指定されたパラメーターを使用するサンド ボックス リソース グループへのデプロイが開始されます。 また、head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 コマンドから生成されるランダムな 32 文字の文字列が、パスワード パラメーターとして指定されます。

    デプロイが完了するまで、約 5 分かかります。

    az deployment group create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --template-uri  https://raw.githubusercontent.com/MicrosoftDocs/mslearn-n-tier-architecture/master/Deployment/azuredeploy.json \
      --parameters password="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
    

デプロイされたリソースを表示し、アプリケーションをテストする

デプロイが完了したら、アプリケーションをテストします。 次のコマンドを実行すると、アプリケーションの URL が返されます。

az deployment group show \
  --output table \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name azuredeploy \
  --query properties.outputs.webSiteUrl

Web ブラウザーを開き、サイトにアクセスします。 食事の選択肢を追加できるボックスが表示されます。 オプションを追加した後、それを選択すると、投票が追加されます。

Screenshot of the sample voting application.

"お昼何にする?" の 3 つの層

このアプリケーションは、その複雑さが意図的に最小限に抑えられています。 それは楽しいアプリケーションですが、それでも 3 層アーキテクチャの実例を示しています。 テンプレートによって、2 台の仮想マシン (VM)、1 個の Azure SQL データベース、およびこれらのリソースをサポートするために必要なリソース (ディスク、NIC、仮想ネットワークなど) が作成されます。 さらに、アプリケーションを実行するためのコードが各層にデプロイされます。 導入された仮想ネットワークには、2 つのサブネット (1 つはプレゼンテーション層のため、1 つはアプリケーション層のため) があり、各層にセキュリティの境界を提供しています。

さらに、リソースがサポートしている層を示すために、デプロイの一部としてリソースにタグ (tier:presentationtier:applicationtier:data) を適用しています。 タグはメタデータを Azure のリソースに適用する方法であり、ここでは、それらによって各層のリソースを簡単にフィルター処理できます。

各層について詳しく見てみましょう。 デプロイされたリソースの詳細な視覚化を次に示します。

Visualization of the N-tier architecture to be deployed in this unit again.

プレゼンテーション層

次のコマンドを実行して、プレゼンテーション層のリソースの一覧を表示します。

az resource list --tag tier=presentation --output table

参照している 3 層アーキテクチャでは、これはプレゼンテーション層です。 この層には、Web インターフェイスを担当するコードをデプロイしており、UI が表示され、ユーザーの要求が直接処理されます。 この層は、ユーザーに Web サイトを表示することだけに関与しています。 データに直接アクセスすることも、ビジネス ロジックが含まれることもありません。

アクセスされる Web サイトを実行する demo-web-vm という名前の Web サーバーがデプロイされています。 このサーバーには、ネットワーク インターフェイス (demo-web-vm-nic) があり、パブリック IP アドレス (demo-web-vm-nic-pip) がそれに関連付けられています。 このパブリック IP アドレスは、先ほど取得した URL です。 さらに、インターネットからポート 80 の (HTTP) トラフィック着信のみを許可するネットワーク セキュリティ グループ (demo-web-nsg) があります。 このネットワーク セキュリティ グループにより、アクセスが Web サイトのみに制限され、悪意を持って使用される可能性がある不必要なポート経由のアクセスが防止されます。 この層では、ユーザーの要求を満たすために HTTP 経由でプレゼンテーション層との通信が行われます。

アプリケーション層

次のコマンドを実行して、アプリケーション層のリソースの一覧を表示します。

az resource list --tag tier=application --output table

アプリケーション層には、ビジネス ロジックを実行する demo-biz-vm と呼ばれる VM をデプロイしています。 さらに、ネットワーク インターフェイス (demo-biz-vm-nic) もありますが、このネットワーク インターフェイスはプライベート IP アドレスのみを持ち、サーバーに直接受信接続するためのしくみは提供されません。 プレゼンテーション層のサブネットからのアクセスのみを許可するネットワーク セキュリティ グループ (demo-biz-nsg) もあります。

この層は、アプリケーションがデータにアクセスするためのパイプです。 プレゼンテーション層で呼び出される API を公開するコードがこのサーバーにデプロイされます。 ここにはデータは格納されず、ユーザーがこのサーバーに直接アクセスすることはできません。 データにアクセスしてユーザーの要求を満たすために、この層では T-SQL コマンドを使用したデータ層との通信が行われます。

アプリケーションのこの層に組み込まれているビジネス ロジックの簡単な例があります。 昼食の候補に対してサーバー側で検証が行われ、許容される値の一覧と比較されます。 この一覧にないものを追加しようとしても、受け入れられません。 有効な昼食のオプションを含むメッセージが返されます。

データ層

次のコマンドを実行して、データ層のリソースの一覧を表示します。

az resource list --tag tier=data --output table

データ層は Azure SQL Database サーバー (demo-dbserver-abc123) です (グローバルで一意になるように、サーバー名にランダムな文字列が追加されています)。 このサーバーでは、demo-sqldb と呼ばれるデータベースにアプリケーション用のデータが格納されます。 この層のアプリケーションは、データを格納することと、それにアクセスする方法を提供することだけに関与しています。 この場合、アクセスは T-SQL を介して行われます。これは、データベースに対してアプリケーションで実行されます。 この層では、ビジネス ロジックの処理も、ユーザーへのデータの提示も行われません。

この層では、VNet サービス エンドポイントを介してポート 1433 経由で接続が公開されます。 VNet サービス エンドポイントは、PaaS サービス (Azure SQL Database など) をサブネットに接続し、接続をそのサブネット内のリソースのみに制限するしくみです。

これは、サービスとしてのインフラストラクチャ (IaaS) VM の代わりに、PaaS サービスを使用して、アプリケーションの 1 つの層を実行する例でもあります。 多くの場合、N 層アプリケーションは VM ベースのアプリケーションと考えられますが、それは要件ではありません。 VM の代わりに PaaS サービスを使用することで、コストを削減し、セキュリティを強化し、管理要件を減らすことができます。