Azure にオンプレミスのアプリケーションをリビルドする

この記事では、Contoso という架空の会社が、Azure への移行の一環として、VMware 仮想マシン (VM) 上で実行される 2 階層の Windows .NET アプリケーションをリビルドする方法を説明します。 Contoso は、フロントエンド VM を、Azure App Service Web アプリに移行します。 Contoso は、アプリケーションのバックエンドを、Azure Kubernetes Service (AKS) によって管理されるコンテナーにデプロイされたマイクロサービスを使用してビルドします。 サイトは、ペットの写真の機能を提供する Azure Functions と対話します。

この例で使用される SmartHotel360 アプリケーションは、オープンソース ライセンスの下で提供されています。 独自のテスト目的に沿って使用する場合は、GitHub からダウンロードできます。

ビジネス ドライバー

Contoso の IT リーダーシップ チームは、ビジネス パートナーと密接に連絡を取り合い、彼らがこの移行で何を達成しようとしているのかを理解しました。

  • ビジネスの成長への対応。 Contoso は成長を続けており、Contoso の Web サイトで、差別化されたエクスペリエンスを顧客に提供したいと考えています。
  • 機敏である。 Contoso は、グローバル経済で成功を収めるために、より迅速に市場の変化に対応できる必要があります。
  • スケーリング。 ビジネスが順調に成長していく中で、Contoso IT チームは、同じペースで拡張可能なシステムを提供する必要があります。
  • コストの削減。 Contoso はライセンス コストを最小限に抑えたいと考えています。

移行の目標

Contoso クラウド チームは、この移行のためのアプリケーションの要件を設定しました。 これらの要件を使用して、最良の移行方法を決定しました。

  • このアプリケーションは、オンプレミスにおける現状と同様、Azure でもクリティカルなものとなります。 優れたパフォーマンスを発揮し、容易にスケールできる必要があります。
  • このアプリケーションでは、サービスとしてのインフラストラクチャ (IaaS) コンポーネントを使用しません。 サービスとしてのプラットフォーム (PaaS) またはサーバーレス サービスを使用するようにすべてをビルドする必要があります。
  • アプリケーションのビルドはクラウド サービスで実行する必要があり、コンテナーはクラウド内のプライベートなエンタープライズ規模のレジストリに存在する必要があります。
  • アプリケーションで下された決定がホテルで受け入れられる必要があるため、ペットの写真に使用される API サービスは正確かつ実世界で信頼できるものである必要があります。 アクセス権を付与されたペットは、ホテルでの滞在を許可されます。
  • DevOps パイプラインの要件を満たすために、Contoso ではソース コード管理に Azure Repos の Git リポジトリを使用します。 コードのビルドと Azure App Service、Azure Functions、および AKS へのデプロイには、自動ビルドとリリースが使用されます。
  • バックエンドのマイクロサービスと、フロントエンドの Web サイトに対して、別個の継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインが必要です。
  • バックエンド サービスとフロントエンド Web アプリとでは、リリース サイクルが異なります。 この要件を満たすため、Contoso は 2 つの異なるパイプラインをデプロイすることになります。
  • Contoso では、すべてのフロント エンド Web サイトのデプロイには上長の承認が必要であり、CI/CD パイプラインではこれを提供する必要があります。

ソリューション設計

Contoso は目標と要件を決定した後、デプロイ ソリューションを設計およびレビューし、移行に使用する Azure サービスを含め、移行プロセスを決めます。

現在のアプリケーション

  • SmartHotel360 オンプレミス アプリケーションは 2 つの VM (WEBVMSQLVM) に階層化されています。
  • これらの VM は、VMware ESXi ホスト contosohost1.contoso.com (バージョン 6.5) 上に配置されています。
  • VMware 環境は、VM で実行中のvCenter Server 6.5 (vcenter.contoso.com) によって管理されています。
  • Contoso には、オンプレミスのデータセンター (contoso-datacenter) があり、オンプレミスのドメイン コントローラー (contosodc1) が含まれています。
  • Contoso データセンター内のオンプレミス VM は、移行が行われた後に使用停止にされます。

提案されたアーキテクチャ

  • アプリケーションのフロントエンドは、プライマリ Azure リージョンに Azure App Service の Web アプリとしてデプロイされます。

  • Azure 関数がペットの写真をアップロードし、サイトはこの機能と対話します。

  • ペットの写真の関数には、Azure Cosmos DB と共に Azure Cognitive Services の Computer Vision API が使用されています。

  • サイトのバックエンドは、マイクロ サービスを使用してビルドされます。 これらのマイクロサービスは、AKS で管理されるコンテナーにデプロイされます。

  • コンテナーは Azure DevOps を使用してビルドされ、Azure Container Registry にプッシュされます。

  • Contoso は当面、Visual Studio を使用して Web アプリと関数コードを手動でデプロイする予定です。

  • マイクロサービスは、Kubernetes コマンドライン ツールを呼び出す PowerShell スクリプトを使用してデプロイします。

    Azure への移行のためのシナリオのアーキテクチャの図。図 1: シナリオのアーキテクチャ。

ソリューションのレビュー

Contoso は、長所と短所の一覧をまとめて、提案されたデザインを評価します。

考慮事項 詳細
長所 Contoso はエンドツーエンドのデプロイに PaaS とサーバーレス ソリューションを使用することで、管理に要する時間を大幅に削減できます。

マイクロサービス ベースのアーキテクチャへの移行により、Contoso は時間の経過と共にソリューションを容易に拡張できるようになります。

新しい機能は、既存のソリューションのコード ベースを妨げることなくオンライン状態にすることができます。

Web アプリは複数のインスタンスで構成されるため、単一障害点は生まれません。

アプリケーションがさまざまなトラフィック量を処理できるように、自動スケールが有効化されます。

PaaS サービスへの移行に伴い、Contoso は Windows Server 2008 R2 オペレーティング システム上で実行されている古いソリューションを廃止できます。

Azure Cosmos DB にはフォールト トレランスが組み込まれており、Contoso による構成は必要ありません。 これは、データ層が単一のフェールオーバー ポイントでなくなることを意味します。
短所 コンテナーは他の移行オプションより複雑です。 Contoso にとって、学習曲線が問題になる可能性があります。 この曲線にもかかわらず、Contoso は価値を提供する新しいレベルの複雑さを導入します。

Azure、コンテナー、アプリケーションのマイクロサービスを理解し、サポートする Contoso の運用チームを立ち上げる必要があります。

Contoso は、ソリューション全体の DevOps を完全に実装していません。 Contoso は、AKS、Azure Functions、および Azure App Service へのサービスのデプロイで、そのことを考慮する必要があります。

移行プロセス

  1. Contoso では、Azure Container Registry、AKS、および Azure Cosmos DB をプロビジョニングします。

  2. デプロイ用のインフラストラクチャ (Azure App Service Web アプリ、ストレージ アカウント、関数、API を含む) をプロビジョニングします。

  3. インフラストラクチャの準備が整ったら、Azure DevOps を使用してマイクロサービスのコンテナー イメージをビルドし、コンテナー レジストリにプッシュします。

  4. Contoso は、PowerShell スクリプトを使用してこれらのマイクロサービスを AKS にデプロイします。

  5. 最後に、関数と Web アプリをデプロイします。

    移行プロセスの図 (準備からクラウドへのデプロイまで)。図 2: 移行プロセス。

Azure サービス

サービス 説明 コスト
Azure Kubernetes Service Kubernetes の管理、デプロイ、操作を簡略化します。 完全に管理された Kubernetes コンテナー オーケストレーション サービスを提供します。 AKS は無料サービスです。 VM と、関連するストレージおよびネットワーク リソースの使用した分に対してのみ料金が発生します。 詳細情報.
Azure Functions イベント ドリブン型のサーバーレス コンピューティング エクスペリエンスにより、開発を高速化できます。 オンデマンドでスケールできます。 使用したリソースに対してのみ料金が発生します。 プランでは、1 秒あたりのリソースの使用量と実行回数に基づいて課金されます。 詳細情報.
Azure Container Registry あらゆる種類のコンテナー デプロイのイメージを保存します。 コストは機能、ストレージ、使用期間に基づいて発生します。 詳細については、こちらを参照してください
Azure App Service あらゆるプラットフォームで実行されるエンタープライズグレードの Web アプリ、モバイル アプリ、API アプリをすばやくビルド、デプロイ、スケーリングできます。 App Service プランは、1 秒単位で課金されます。 詳細については、こちらを参照してください

前提条件

このシナリオで Contoso に必要なことを以下に示します。

必要条件 詳細
Azure サブスクリプション
  • 前の記事で、Contoso はサブスクリプションを作成しました。 Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。
  • 無料アカウントを作成する場合、サブスクリプションの管理者としてすべてのアクションを実行できます。
  • 既存のサブスクリプションを使用するものの、管理者でない場合は、管理者に依頼して所有者アクセス許可または共同作成者アクセス許可を自分に割り当ててもらう必要があります。
  • Azure インフラストラクチャ
  • Contoso で Azure インフラストラクチャを設定する方法を確認してください。
  • 開発者の前提条件 Contoso は、開発者用ワークステーションに次のツールをインストールする必要があります。
  • Visual Studio Community 2017 バージョン 15.5
  • .NET ワークロードが有効
  • Git
  • Azure PowerShell
  • Azure CLI
  • Docker Community Edition (Windows 10) または Docker Enterprise Edition (Windows Server) が Windows コンテナーを使用するように設定済み
  • シナリオのステップ

    Contoso が移行を実行する方法を次に示します。

    • ステップ 1:AKS と Azure Container Registry をプロビジョニングする。 Contoso は PowerShell を使用して、マネージド AKS クラスターとコンテナー レジストリをプロビジョニングします。
    • 手順 2:Docker コンテナーをビルドする。 Contoso は、Azure DevOps を使用して Docker コンテナーの継続的インテグレーション (CI) を設定し、それらのコンテナーをコンテナー レジストリにプッシュします。
    • ステップ 3:バックエンドのマイクロサービスをデプロイする。 Contoso は、バックエンドのマイクロサービスによって使用される、残りのインフラストラクチャをデプロイします。
    • 手順 4:フロントエンドのインフラストラクチャをデプロイする。 Contoso は、フロントエンドのインフラストラクチャ (ペットの写真用の Blob Storage、Azure Cosmos DB、Computer Vision API を含む) をデプロイします。
    • 手順 5:バックエンドを移行する。 Contoso は、マイクロサービスをデプロイして AKS 上で実行し、バックエンドを移行します。
    • 手順 6:フロントエンドを公開する。 Contoso は、SmartHotel360 アプリケーションを、Azure App Service と、ペット サービスによって呼び出される関数アプリに公開します。

    バックエンド リソースをプロビジョニングする

    Contoso の管理者は、AKS と Azure Container Registry を使用して、マネージド Kubernetes クラスターを作成するデプロイ スクリプトを実行します。 このセクションの手順では、SmartHotel360-Backend GitHub リポジトリを使用します。 このリポジトリには、デプロイのこの部分のためのソフトウェアがすべて含まれています。

    前提条件が満たされていることを確認する

    Contoso の管理者は、開始する前に、デプロイに使用する開発用マシンにすべての前提条件ソフトウェアがインストールされていることを確認します。 Git を使用して、ローカルの開発用マシンにリポジトリをクローンします。

    git clone https://github.com/Microsoft/SmartHotel360-Backend.git

    AKS と Azure Container Registry をプロビジョニングする

    Contoso の管理者は、AKS と Azure Container Registry を次のようにプロビジョニングします。

    1. Visual Studio Code でフォルダーを開き、スクリプト gen-aks-env.ps1 が格納されている /deploy/k8s ディレクトリに移動します。

    2. AKS と Azure Container Registry を使用して、マネージド Kubernetes クラスターを作成するスクリプトを実行します。

      Visual Studio Code での AKS スクリプトを示すスクリーンショット。図 3: マネージド Kubernetes クラスターの作成。

    3. ファイルを開いた状態で $location パラメーターを eastus2 に更新し、ファイルを保存します。

      AKS $location パラメーターを eastus2 に更新したことを示すスクリーンショット。図 4: ファイルの保存。

    4. [表示][統合ターミナル] を選択して、Visual Studio Code で統合ターミナルを開きます。

      統合ターミナルのリンクを示すスクリーンショット。図 5: Visual Studio Code でのターミナル。

    5. PowerShell 統合ターミナルで、Connect-AzureRmAccount コマンドを使用して Azure にサインインします。 詳細については、PowerShell の使用開始に関するページを参照してください。

      PowerShell 統合ターミナルのサインイン ウィンドウのスクリーンショット。図 6: The PowerShell 統合ターミナル。

    6. az login コマンドを実行し、Web ブラウザーを使用した認証の手順に従って、Azure CLI の認証を行います。 Azure CLI でのサインインに関する詳細を確認してください。

      Azure CLI の認証ウィンドウを示すスクリーンショット。図 7: Azure CLI の認証。

    7. 次のコマンドを、リソース グループ名 ContosoRG、AKS クラスター名 smarthotel-aks-eus2、および新しいレジストリ名を渡して実行します。

      .\gen-aks-env.ps1 -resourceGroupName ContosoRg -orchestratorName smarthotelakseus2 -registryName smarthotelacreus2

      リソース グループ ペインでの smarthotel コマンドを示すスクリーンショット。図 8: コマンドの実行。

    8. Azure によって、AKS クラスターのリソースを含む別のリソース グループが作成されます。

      リソース グループの作成のスクリーンショット。図 9: Azure でのリソース グループの作成。

    9. デプロイが完了したら、kubectl コマンドライン ツールをインストールします。 このツールは、Azure Cloud Shell では既にインストールされています。

      az aks install-cli

    10. kubectl get nodes コマンドを実行して、クラスターへの接続を確認します。 ノードは、自動的に作成されたリソース グループ内の VM と同じ名前です。

      クラスターへの接続の確認を示すスクリーンショット。図 10: クラスターへの接続の確認。

    11. 次のコマンドを実行して、Kubernetes ダッシュボードを起動します。

      az aks browse --resource-group ContosoRG --name smarthotelakseus2

    12. ブラウザー タブが開き、ダッシュボードが表示されます。 これは Azure CLI を使用したトンネル接続です。

      トンネル接続を示すスクリーンショット。図 11: トンネル接続。

    手順 2:バックエンド パイプラインを構成する

    Azure DevOps プロジェクトとビルドを作成する

    Contoso は Azure DevOps プロジェクトを作成し、CI ビルドを構成してコンテナーを作成し、それをコンテナー レジストリにプッシュします。 このセクションの手順では SmartHotel360-Backend リポジトリを使います。

    1. visualstudio.com から新しい組織 (contosodevops360.visualstudio.com) を作成し、Git を使用するようにそれを構成します。

    2. バージョン コントロールに SmartHotelBackend、ワークフローにアジャイルを選択して、新しいプロジェクト (SmartHotelBackend) を作成します。

      Azure DevOps の [新しいプロジェクトの作成] ペインのスクリーンショット。図 12: 新しいプロジェクトの作成。

    3. GitHub リポジトリをインポートします。

      Azure DevOps の [Git リポジトリをインポートする] ペインのスクリーンショット。図 13: GitHub リポジトリのインポート。

    4. [パイプライン] で、 [ビルド] を選択し、リポジトリから、Azure Repos Git をソースとして使用する新しいパイプラインを作成します。

      新しいパイプラインを作成するための DevOps ペインのスクリーンショット。図 14: 新しいパイプラインの作成。

    5. [空のジョブ] を選択します。

      Azure DevOps の [空のジョブ] リンクのスクリーンショット。図 15: 空のジョブの開始。

    6. ビルド パイプラインで [Hosted Linux Preview]\(ホストされている Linux プレビュー\) を選択します。

      Azure DevOps のビルド パイプライン設定画面のスクリーンショット。図 16: ビルド パイプラインの設定。

    7. [Step 1]\(ステップ 1\) で、 [Docker Compose] タスクを追加します。 このタスクでは、Docker Compose をビルドします。

      Azure DevOps で Docker Compose タスクをビルドする画面のスクリーンショット。図 17: Docker Compose のビルド。

    8. 手順を繰り返し、Docker Compose タスクをもう 1 つ追加します。 これにより、コンテナーがコンテナー レジストリにプッシュされます。

      Azure DevOps でもう 1 つ Docker Compose タスクを追加する画面のスクリーンショット。図 18: Docker Compose タスクをもう 1 つ追加。

    9. 1 番目のタスク (ビルドの実行) を選択し、ビルドに Azure サブスクリプション、認可、およびコンテナー レジストリを構成します。

      Azure DevOps でビルドの作成と構成を行う画面のスクリーンショット。図 19: ビルドの作成と構成。

    10. リポジトリの src フォルダーにある docker-compose.yaml ファイルのパスを指定します。 サービス イメージのビルドを選択し、最新のタグを含めます。 アクションが [Build service images]\(サービス イメージのビルド\) に変わると、Azure DevOps タスクの名前が [Build services automatically]\(サービスを自動的にビルド\) に変わります。

      Azure DevOps における各種タスクビルド指定のスクリーンショット。図 20: タスクの指定。

    11. Contoso は次に、2 番目の Docker タスク (プッシュの実行) を構成します。 サブスクリプションとコンテナー レジストリ (smarthotelacreus2) を選択します。

      Azure DevOps で 2 つ目の Docker タスクを構成する画面のスクリーンショット。図 21: 2 番目の Docker タスクの構成。

    12. ファイル名 docker-compose.yaml を入力し、docker-compose.yaml を選択して、最新のタグを含めます。 アクションが [Push service images]\(サービス イメージのプッシュ\) に変わると、Azure DevOps タスクの名前が [Push services automatically]\(サービスを自動的にプッシュ\) に変わります。

      Azure DevOps タスクの名前を変更する画面のスクリーンショット。図 22: Azure DevOps タスクの名前の変更。

    13. Azure DevOps タスクが構成されたので、Contoso はビルド パイプラインを保存し、ビルド プロセスを開始します。

      Azure DevOps でビルド プロセスを開始する画面のスクリーンショット。図 23: ビルド プロセスの開始。

    14. ビルド ジョブを選択して、進行状況を確認します。

      Azure DevOps でビルドの進行状況を確認する画面のスクリーンショット。図 24: 進行状況の確認。

    15. ビルドが完了すると、コンテナー レジストリに、マイクロサービスによって使用されるコンテナーが設定された新しいリポジトリが表示されます。

      Azure DevOps でビルドの完了後に新しいリポジトリを表示する画面のスクリーンショット。図 25: ビルドの終了後に新しいリポジトリを表示。

    バックエンド インフラストラクチャをデプロイする

    AKS クラスターを作成し、Docker イメージをビルドしたので、次に Contoso の管理者は、バックエンドのマイクロサービスによって使用される残りのインフラストラクチャをデプロイします。

    • このセクションの手順では SmartHotel360-Backend リポジトリを使います。
    • /deploy/k8s/arm フォルダーに、すべての項目を作成する 1 つのスクリプトが含まれています。

    管理者は、次のようにしてインフラストラクチャをデプロイします。

    1. 開発者コマンド プロンプトを開き、Azure サブスクリプションのコマンド az login を使用します。

    2. deploy.cmd ファイルを使用し、次のコマンドを入力して ContosoRG リソース グループと East US 2 リージョンに Azure リソースをデプロイします。

      .\deploy.cmd azuredeploy ContosoRG -c eastus2

      バックエンドをデプロイする画面のスクリーンショット。図 26:バックエンドのデプロイ。

    3. Azure portal で、後で使用するために、各データベースの接続文字列をキャプチャします。

      各データベースの接続文字列を示すスクリーンショット。図 27: 各データベースの接続文字列のキャプチャ。

    バックエンド リリース パイプラインを作成する

    ここで、Contoso の管理者は以下のことを行います。

    • サービスへの受信トラフィックを許可する NGINX イングレス コントローラーをデプロイします。
    • AKS クラスターにマイクロサービスを送ります。
    • 最初のステップとして管理者は、マイクロサービスへの接続文字列を Azure DevOps を使用して更新します。 次に、新しい Azure DevOps リリース パイプラインを構成して、マイクロサービスをデプロイします。
    • このセクションの手順では SmartHotel360-Backend リポジトリを使います。
    • 一部の構成設定 (Active Directory B2C など) については、この記事では説明しません。 これらの設定の詳細については、先ほど触れた SmartHotel360-Backend リポジトリを参照してください。

    管理者は次のようにしてパイプラインを作成します。

    1. Visual Studio で、前に説明したデータベース接続情報で /deploy/k8s/config_local.yml ファイルを更新します。

    2. Azure DevOps を開き、SmartHotel360 プロジェクトの [リリース] ペインで SmartHotel360 を選択します。

      Azure DevOps の [新しいパイプライン] ボタンを示すスクリーンショット。図 29: 新しいパイプラインの作成。

    3. [空のジョブ] を選択し、テンプレートを使用せずにパイプラインを開始します。

    4. ステージとパイプラインの名前を付けます。

      Azure DevOps のステージ名の作成画面を示すスクリーンショット。図 30: ステージ名。

      Azure DevOps のパイプライン名の作成画面を示すスクリーンショット。図 31: パイプライン名。

    5. 成果物を追加します。

      Azure DevOps で成果物を追加する画面のスクリーンショット。図 32: 成果物の追加。

    6. ソースの種類として [Git] を選択し、SmartHotel360 アプリケーションのプロジェクト、ソース、メイン ブランチを指定します。

      [成果物の追加] ペインのスクリーンショット (ソースの種類として Git を選択したところ)。図 33: 成果物の設定ペイン。

    7. タスクのリンクを選択します。

      Azure DevOps でタスク リンクが強調表示された画面のスクリーンショット。図 34: タスク リンク。

    8. PowerShell スクリプトを Azure 環境で実行できるように、新しい Azure PowerShell タスクを追加します。

      Azure に新しい PowerShell タスクを追加する画面のスクリーンショット。図 35: 新しい PowerShell タスクの追加。

    9. タスクの Azure サブスクリプションを選択し、Git レポジトリから deploy.ps1 スクリプトを選択します。

      実行するスクリプトを Git リポジトリから選択する画面のスクリーンショット。図 36: スクリプトの実行。

    10. スクリプトに引数を追加します。 このスクリプトでは、すべてのクラスター コンテンツ (イングレスおよびイングレス コントローラーを除く) が削除され、マイクロサービスがデプロイされます。

      スクリプトに追加される引数を示すスクリーンショット。図 37: スクリプトへの引数の追加。

    11. 指定の Azure PowerShell バージョンを最新バージョンに設定し、パイプラインを保存します。

    12. [新しいリリースを作成する] ペインに戻って、新しいリリースを手動で作成します。

      [新しいリリースを作成する] ペインのスクリーンショット。図 38: 新しいリリースの手動作成。

    13. リリースの作成後、それを選択し、 [アクション][デプロイ] を選択します。

      リリースをデプロイするための [デプロイ] ボタンが強調表示されている画面のスクリーンショット。図 39: リリースのデプロイ。

    14. デプロイが完了したら、Azure Cloud Shell: kubectl get services を使用して、以下のコマンドを実行することでサービスの状態を確認します。

    手順 3:フロントエンド サービスをプロビジョニングする

    Contoso の管理者は、フロントエンド アプリケーションによって使用されるインフラストラクチャをデプロイする必要があります。 次のものを作成します。

    • ペットの画像を格納するための Blob Storage コンテナー。
    • ペット情報を含むドキュメントを格納する Azure Cosmos DB データベース。
    • Web サイト用の Computer Vision API。

    このセクションの手順では SmartHotel360-Website リポジトリを使います。

    Blob Storage コンテナーを作成する

    1. Azure portal で管理者は、作成済みのストレージ アカウントを開き、 [BLOB] をクリックします。

    2. パブリック アクセス レベルをコンテナーに設定した新しいコンテナー (Pets) を作成します。 ユーザーは、ペットの写真をこのコンテナーにアップロードします。

      Azure portal で新しいコンテナーを作成する画面のスクリーンショット。図 40: 新しいコンテナーの作成。

    3. settings という名前の 2 つ目のコンテナーを作成します。 このコンテナーに、フロントエンド アプリのすべての設定が含まれるファイルが配置されます。

      Azure portal で 2 つ目の新しいコンテナーを作成する画面のスクリーンショット。図 41: 2 つ目のコンテナーの作成。

    4. 後で参照できるように、ストレージ アカウントのアクセスの詳細をテキスト ファイルにキャプチャします。

      アクセスの詳細をキャプチャするテキスト ファイルのスクリーンショット。図 42: アクセスの詳細をキャプチャするテキスト ファイル。

    Azure Cosmos DB のデータベースをプロビジョニングする

    Contoso の管理者は、ペットの情報に使用する Azure Cosmos DB データベースをプロビジョニングします。

    1. Azure Marketplace で、Azure Cosmos DB データベースを作成します。

      Azure Marketplace で Azure Cosmos DB データベースを作成する画面のスクリーンショット。図 43: Azure Cosmos DB データベースの作成。

    2. 名前 (contososmarthotel) を指定し、SQL API を選択し、メイン リージョン (East US 2) の運用リソース グループ ContosoRG に配置します。

      Azure Cosmos DB データベースの名前とその他の設定のスクリーンショット。図 44: Azure Cosmos DB データベースの名前指定。

    3. 既定の容量およびスループットを指定した新しいコレクションをデータベースに追加します。

      Azure Cosmos DB の [コレクションの追加] ペインのスクリーンショット。図 45: データベースへの新しいコレクションの追加。

    4. 後で参照できるように、このデータベースの接続情報をメモします。

      Azure Cosmos DB データベースの接続情報のスクリーンショット。図 46: データベースの接続情報。

    Computer Vision API をプロビジョニングする

    Contoso の管理者は、Computer Vision API をプロビジョニングします。 この API は、ユーザーによってアップロードされた写真を評価するために関数によって呼び出されます。

    1. 管理者が Azure Marketplace で、Computer Vision インスタンスを作成します。

      Azure Marketplace で新しい Computer Vision インスタンスを作成する画面のスクリーンショット。図 47: Azure Marketplace での新しいインスタンス。

    2. API (smarthotelpets) を運用リソース グループ ContosoRG のメイン リージョン (East US 2) にプロビジョニングします。

      運用リソース グループに API を設定する画面のスクリーンショット。図 48: 運用リソースグループでの API のプロビジョニング。

    3. 後で参照できるように、この API の接続文字列をテキスト ファイルに保存します。

      API の接続設定をテキスト ファイルに保存する画面のスクリーンショット。図 49: API 接続設定の保存。

    Azure Web アプリをプロビジョニングする

    Contoso の管理者は、Azure portal を使用して Web アプリをプロビジョニングします。

    1. ポータルで [Web アプリ] を選択します。

      Azure portal で Web アプリを選択する画面のスクリーンショット。図 50: Web アプリの選択。

    2. Web アプリの名前 (smarthotelcontoso) を指定し、Windows 上で実行して、運用リソース グループ ContosoRG に配置します。 アプリケーションのモニタリング用に新しい Application Insights リソースを作成します。

      Web アプリの名前やその他の詳細を指定する画面のスクリーンショット。図 51: Web アプリ名。

    3. 完了したら、管理者はブラウザーでアプリケーションのアドレスにアクセスし、アプリが正常に作成されたかどうかを確認します。

    4. Azure portal で、コードのステージング スロットを作成します。 パイプラインはこのスロットにデプロイされます。 このアプローチにより、管理者がリリースを実行するまで、コードは運用環境に移行されません。

      Web アプリのステージング スロットを追加する画面のスクリーンショット。図 52: Web アプリのステージング スロットの追加。

    関数アプリをプロビジョニングする

    Contoso の管理者は、Azure portal で関数アプリをプロビジョニングします。

    1. [Function App] を選択します。

      関数アプリを作成する画面のスクリーンショット。図 53: 関数アプリの選択。

    2. 関数アプリ (smarthotelpetchecker) の名前を指定します。 運用リソース グループ (ContosoRG) に関数アプリを配置します。 ホスティングの場所を従量課金プランに設定し、関数アプリを リージョンに配置します。 監視用の Application Insights インスタンスと共に新しいストレージ アカウントが作成されます。

      関数アプリの設定を示すスクリーンショット。図 54: 関数アプリの設定。

    3. 関数アプリをデプロイしたら、そのアドレスに管理者がブラウザーでアクセスして、アプリが正常に作成されたことを確認します。

    手順 4:フロントエンド パイプラインを設定する

    Contoso 管理者は、フロントエンド サイトに 2 つの異なるプロジェクトを作成します。

    1. Azure DevOps で、SmartHotelFrontEnd という名前のプロジェクトを作成します。

      フロントエンド プロジェクトの作成画面のスクリーンショット。図 55: フロントエンド プロジェクトの作成。

    2. SmartHotel360-Website Git リポジトリを新しいプロジェクトにインポートします。

    3. 関数アプリ用の別の Azure DevOps プロジェクト (SmartHotelPetChecker) を作成し、SmartHotelPetChecker Git リポジトリをこのプロジェクトにインポートします。

    Web アプリを構成する

    次に、Contoso の管理者は Contoso リソースを使用するように Web アプリを構成します。

    1. 管理者が Azure DevOps プロジェクトに接続し、開発用マシンのローカルにリポジトリをクローンします。

    2. Visual Studio でフォルダーを開いて、リポジトリ内のすべてのファイルを表示します。

      リポジトリ内のすべてのファイルを含んだフォルダーを表示する Visual Studio のスクリーンショット。図 56: リポジトリ内のすべてのファイルを表示。

    3. 必要に応じて構成の変更を更新します。

      • Web アプリの起動時に、SettingsUrl アプリ設定が検索されます。
      • この変数には、構成ファイルをポイントする URL が含まれている必要があります。
      • 既定では、使用される設定はパブリック エンドポイントです。
    4. /config-sample.json/sample.json ファイルを更新します。

      • これは、パブリック エンドポイントを使用する場合の Web 用の構成ファイルです。
      • urls セクションと pets_config セクションを、AKS API エンドポイント、ストレージ アカウント、Azure Cosmos DB データベースの値を使用して編集します。
      • URL は、Contoso が作成する新しい Web アプリの DNS 名と一致している必要があります。
      • Contoso の場合、これは smarthotelcontoso.eastus2.cloudapp.azure.com です。

      Visual Studio の .json 設定のスクリーンショット。図 57: .json 設定。

    5. ファイルの更新後、管理者は、その名前を smarthotelsettingsurl に変更して、あらかじめ作成しておいた Blob Storage にアップロードします。

      .json ファイルの名前変更とアップロードを行う画面のスクリーンショット。図 58: ファイルの名前変更とアップロード。

    6. ファイルを選択肢て URL を取得します。 この URL は、アプリケーションが構成ファイルプル ダウンするときに使用されます。

      アプリケーションによって使用されるファイルの URL のスクリーンショット。図 59: アプリケーション URL。

    7. appsettings.Production.json ファイルで、SettingsURL を新しいファイルの URL に更新します。

      新しいファイルに URL を更新する画面のスクリーンショット。図 60: 新しいファイルへの URL の更新。

    Azure App Service に Web サイトをデプロイする

    これで Contoso の管理者は Web サイトを公開できます。

    1. Azure DevOps を開き、SmartHotelFrontEnd プロジェクトの SmartHotelFrontEnd[+ 新しいパイプライン] を選択します。

    2. [Azure DevOps Git] をソースとして選択します。

    3. [ASP.NET Core] テンプレートを選択します。

    4. パイプラインを確認し、 [Web プロジェクトの発行][発行されたプロジェクトの zip 圧縮] が選択されていることを確認します。

      Web プロジェクトのパイプライン設定のスクリーンショット。図 61: パイプライン設定。

    5. [トリガー] で継続的インテグレーションを有効にして、メイン ブランチを追加します。 これにより、メイン ブランチにコミットされた新しいコードをソリューションが持つたびに、ビルド パイプラインが起動します。

      継続的インテグレーションを有効にして、メイン ブランチを追加する画面のスクリーンショット。図 62: 継続的インテグレーションの有効化。

    6. [保存してキューに登録] を選択してビルドを開始します。

    7. ビルドが完了したら、Azure App Service のデプロイを使用してリリース パイプラインを構成します。

    8. ステージ名 Staging を指定します。

      環境のステージ名を指定する画面のスクリーンショット。図 63: 環境の名前指定。

    9. 成果物を追加し、構成したビルドを選択します。

      成果物の追加画面のスクリーンショット (ソースの種類として [ビルド] を選択したところ)。図 64: 成果物の追加。

    10. 成果物の稲妻アイコンを選択し、継続的デプロイを [有効] に設定します。

      継続的デプロイを有効にする画面のスクリーンショット。図 65: 継続的デプロイの有効化。

    11. [環境][ステージング] の下で [1 job, 1 task]\(1 ジョブ、1 タスク\) を選択します。

    12. サブスクリプションおよび Web アプリ名を選択した後、管理者は [Azure App Service のデプロイ] タスクを開きます。 ステージング デプロイ スロットを使用するようにデプロイが構成されます。 これによって、このスロットでレビューと承認のコードが自動的にビルドされます。

      Web アプリをスロットにデプロイする画面のスクリーンショット。図 66: スロットへのデプロイ。

    13. [パイプライン] で、新しいステージを追加します。

      [パイプライン] タブと新しいステージの追加のスクリーンショット。図 67: 新しいステージの追加。

    14. [スロットを使用した Azure App Service の配置] を選択し、環境名を Prod とします。

    15. [1 job, 2 tasks]\(1 ジョブ、2 タスク\) を選択し、次にサブスクリプション、アプリ サービス名、およびステージング スロットを選択します。

      環境の名前を指定する画面のスクリーンショット。図 68: 環境の名前指定。

    16. 次に、パイプラインから [Deploy Azure App Service to Slot]\(Azure App Service をスロットにデプロイ\) をクリックします。 これは直前のステップからここに配置されています。

      パイプラインからスロットを削除する画面のスクリーンショット。図 69: パイプラインからのスロットの削除。

    17. パイプラインを保存します。 パイプラインで、 [配置後の条件] を選択します。

      [配置後の条件] ボタンのスクリーンショット。図 70: 配置後の条件。

    18. [配置後の承認] を有効にし、承認者として開発リーダーを追加します。

      有効になった [配置後の承認] の承認者一覧のスクリーンショット。図 71: 承認者の追加。

    19. ビルド パイプラインで、管理者がビルドを手動で開始します。 これによって、サイトをステージング スロットにデプロイする新しいリリース パイプラインがトリガーされます。 Contoso については、このスロットの URL は https://smarthotelcontoso-staging.azurewebsites.net/ です。

    20. ビルドが完了すると、リリースがスロットにデプロイされ、Azure DevOps から承認のために開発リーダーにメールが送られます。

    21. 開発リーダーは [承認の表示] を選択し、Azure DevOps ポータルで要求を承認または拒否できます。

      配置後の承認の [承認または拒否] リンクのスクリーンショット。図 72: 保留中のリリース承認要求。

    22. 開発リーダーがコメントを入力して承認します。 ステージングprod スロットの交換が開始され、ビルドが運用環境に移行します。

      配置後の承認とコメントのスクリーンショット。図 73: 運用環境へのビルドの移行。

    23. パイプラインがスワップを完了します。

      ビルドのデプロイの状態を示すスクリーンショット。図 74: スワップの完了。

    24. チームは prod スロットをチェックして、 で Web アプリが運用環境にあることを確認します。

    PetChecker 関数アプリをデプロイする

    Contoso の管理者は次のようにしてアプリケーションをデプロイします。

    1. Azure DevOps プロジェクトに接続することで、リポジトリを開発用マシンにローカルに複製します。

    2. Visual Studio でフォルダーを開いて、リポジトリ内のすべてのファイルを表示します。

    3. src/PetCheckerFunction/local.settings.json ファイルを開き、ストレージ、Azure Cosmos DB データベース、および Computer Vision API 用のアプリ設定を追加します。

      .json ファイルに含まれるアプリ設定を Visual Studio で表示した画面のスクリーンショット。図 75: 関数のデプロイ。

    4. コードをコミットし、Azure DevOps に同期して戻し、変更をプッシュします。

    5. 新しいビルド パイプラインを追加し、ソースに [Azure DevOps Git] を選択します。

    6. [ASP.NET Core (.NET Framework)] テンプレートを選択します。

    7. テンプレートの既定値をそのまま使用します。

    8. [トリガー] で、[継続的インテグレーションを有効にする] を選択し、[保存してキューに登録]を選択してビルドを開始します。

    9. ビルドが完了したら、 [スロットを使用した Azure App Service の配置] を追加してリリース パイプラインをビルドします。

    10. 環境に Prod という名前を付けて、サブスクリプションを選択します。 [アプリの種類][関数アプリ] に設定し、アプリサービス名を とします。

      アプリの種類とアプリ サービス名のスクリーンショット。図 76: 関数アプリ。

    11. 成果物 (ビルド) を追加します。

      成果物の追加画面のスクリーンショット (ソースの種類として [ビルド] を選択したところ)。図 77: 成果物の追加。

    12. [継続的配置トリガー] を有効にし、 [保存] を選択します。

    13. [Queue new build]\(新しいビルドをキューに登録\) を選択し、CI/CD パイプライン全体を実行します。

    14. 関数はデプロイされた後、Azure portal に [実行中] 状態で表示されます。

      [実行中] 状態が表示されている関数アプリのスクリーンショット。図 78: 関数の状態の更新。

    15. http://smarthotel360public.azurewebsites.net/pets でこのペット チェッカー アプリケーションを閲覧し、正常に動作していることを確認します。

    16. アバターをクリックして、写真をアップロードします。

      アバターに画像を割り当てるペインのスクリーンショット。図 79: アバターへの画像の割り当て。

    17. 最初に確認したい写真は、小さい犬の写真です。

      犬の写真のスクリーンショット。図 80: 写真の確認。

    18. アプリケーションによって受領のメッセージが返されます。

      受領のメッセージのスクリーンショット。図 81: 受領のメッセージ。

    デプロイを再調査する

    リソースを Azure に移行したら、新しいインフラストラクチャを完全に操作可能にして、セキュリティ保護する必要があります。

    セキュリティ

    バックアップとディザスター リカバリー

    ライセンスとコストの最適化

    • すべてのリソースをデプロイした後、Contoso はインフラストラクチャ計画に基づいて Azure タグを割り当てる必要があります。
    • すべてのライセンスは、Contoso が使用している PaaS サービスのコストに組み込まれています。 これはマイクロソフト エンタープライズ契約から差し引かれます。
    • Contoso は、Azure Cost Management + Billing を有効にして、Azure リソースの監視と管理を支援します。

    まとめ

    この記事で、Contoso は SmartHotel360 アプリケーションを Azure にリビルドしました。 オンプレミス アプリケーションのフロントエンド VM は、Azure App Service Web アプリにリビルドされます。 アプリケーションのバックエンドは、AKS によって管理されるコンテナーにデプロイされたマイクロサービスを使用してビルドされます。 Contoso は機能をペットの写真アプリケーションで強化しました。

    推奨されるスキル

    Microsoft Learn は学習に対する新しいアプローチです。 クラウド導入に伴う新たな責任に対する準備は容易にできるものではありません。 Microsoft Learn では、目標を早く達成するのに役立つ、実践的な学習に対するより価値あるアプローチを提供します。 Microsoft Learn では、ポイントを獲得し、レベルを積み重ねて、さらなる達成を目指すことができます。

    ここでは、Azure の Contoso SmartHotel360 アプリケーションに合わせてカスタマイズされた Microsoft Learn のラーニング パスの例を 2 つ紹介します。

    • Azure App Service を使用して Azure に Web サイトをデプロイする: Azure に Web アプリを作成すれば、基盤となるサーバー、ストレージ、ネットワーク アセットを操作しなくても簡単に Web サイトを公開して管理することができます。 代わりに、Web サイトの機能に焦点を当て、堅牢な Azure プラットフォームを使用して、サイトへの安全なアクセスを提供することができます。

    • Azure Cognitive Vision サービスを使用してイメージを処理して分類する: Microsoft Cognitive Services では、ご利用のアプリケーションで Computer Vision 機能を有効にできる事前に作成した機能を提供します。 Azure Cognitive Vision サービスを使用して、顔を検出し、イメージをタグ付けして分類し、オブジェクトを特定する方法について学習します。