ASP.NET Core Web アプリ用の Azure ホスティングの推奨事項Azure hosting recommendations for ASP.NET Core web apps

"基幹業務のリーダーはどこでも、IT 部門を通さずにクラウドからアプリケーションにアクセスし (別名 SaaS)、雑誌を購読するかのように料金を支払っています。"Line-of-business leaders everywhere are bypassing IT departments to get applications from the cloud (also known as SaaS) and paying for them like they would a magazine subscription. そして、サービスが不要になったら、無駄なくサブスクリプションを取り消すことができます。"And when the service is no longer required, they can cancel the subscription with no equipment left unused in the corner."
- Daryl Plummer、Gartner アナリスト- Daryl Plummer, Gartner analyst

Microsoft Azure なら、アプリケーションのニーズとアーキテクチャに応じたサポートが可能です。Whatever your application's needs and architecture, Microsoft Azure can support it. ホスティングのニーズは、静的な Web サイトや多数のサービスで構成される高度なアプリケーションと同じくらいシンプルなものになります。Your hosting needs can be as simple as a static website or a sophisticated application made up of dozens of services. ASP.NET Core のモノリシックな Web アプリケーションとサポートされるサービスには、推奨されるいくつかのよく知られている構成が含まれています。For ASP.NET Core monolithic web applications and supporting services, there are several well-known configurations that are recommended. この記事の推奨事項は、完全なアプリケーション、個別のプロセス、またはデータであっても、ホスティングされるリソースの種類に基づいてグループ化されています。The recommendations on this article are grouped based on the kind of resource to be hosted, whether full applications, individual processes, or data.

Web アプリケーションWeb applications

Web アプリケーションは次を使用してホスティングできます。Web applications can be hosted with:

  • App Service Web AppsApp Service Web Apps

  • コンテナー (複数のオプション)Containers (several options)

  • 仮想マシン (VM)Virtual Machines (VMs)

このうち、シンプルなコンテナー ベースのアプリを含む、ほとんどのシナリオでお勧めできる手法が App Service Web Apps です。Of these, App Service Web Apps is the recommended approach for most scenarios, including simple container-based apps. マイクロサービス アーキテクチャでは、コンテナー ベースの方法を検討してください。For microservice architectures, consider a container-based approach. アプリケーションを実行しているマシンをさらに制御する必要がある場合は、Azure Virtual Machines を検討してください。If you need more control over the machines running your application, consider Azure Virtual Machines.

App Service Web AppsApp Service Web Apps

App Service Web Apps は、Web アプリケーションのホスティングに最適化されたフル マネージド プラットフォームを提供します。App Service Web Apps offers a fully managed platform optimized for hosting web applications. これは、サービスとしてのプラットフォーム (PaaS) 製品です。Azure がアプリの実行とスケーリングに必要なインフラストラクチャに対処するため、ビジネス ロジックに集中することができます。It's a platform as a service (PaaS) offering that lets you focus on your business logic, while Azure takes care of the infrastructure needed to run and scale the app. App Service Web Apps の主な機能:Some key features of App Service Web Apps:

  • DevOps の最適化 (継続的インテグレーションと継続的配信、複数の環境、A/B テスト、スクリプトのサポート)DevOps optimization (continuous integration and delivery, multiple environments, A/B testing, scripting support).

  • グローバルなスケーリングと高可用性Global scale and high availability.

  • SaaS プラットフォームとオンプレミス データへの接続Connections to SaaS platforms and your on-premises data.

  • セキュリティとコンプライアンスSecurity and compliance.

  • Visual Studio の統合Visual Studio integration.

Azure App Service は、ほとんどの Web アプリに適しています。Azure App Service is the best choice for most web apps. デプロイと管理機能がそのプラットフォームに統合され、トラフィックの負荷に応じてサイトのスケールを機敏に調整できるほか、組み込みの負荷分散機能と Traffic Manager によって高い可用性が得られます。Deployment and management are integrated into the platform, sites can scale quickly to handle high traffic loads, and the built-in load balancing and traffic manager provide high availability. オンライン移行ツールを使用すると、既存のサイトを簡単に Azure App Service に移動できます。You can move existing sites to Azure App Service easily with an online migration tool. Web アプリケーション ギャラリーからオープンソース アプリを使用することも、任意のフレームワークとツールを使用して新しいサイトを作成することもできます。You can use an open-source app from the Web Application Gallery, or create a new site using the framework and tools of your choice. Web ジョブ機能により、バックグラウンド ジョブ処理を App Service Web アプリに簡単に追加できます。The WebJobs feature makes it easy to add background job processing to your App Service web app. ローカル データベースを使用してオンプレミスでホストされている既存の ASP.NET アプリケーションがある場合は、移行するための明確なパスがあります。If you have an existing ASP.NET application hosted on-premises using a local database, there's a clear path to migrate. Azure SQL Database で App Service Web アプリを使用できます (または必要に応じて、オンプレミスのデータベース サーバーへのアクセスをセキュリティで保護します)。You can use App Service Web App with an Azure SQL Database (or secure access to your on-premises database server, if preferred).

推奨されるオンプレミスの .NET アプリの Azure App Service への移行戦略

ほとんどの場合、ローカルでホストされる ASP.NET アプリから App Service Web アプリへの移行は簡単なプロセスです。In most cases, moving from a locally hosted ASP.NET app to an App Service Web App is a straightforward process. アプリ自体にほとんどまたはまったく変更の必要がなく、Azure App Service Web Apps によって提供される多くの機能をすぐに活用し始めることができます。Little or no modification should be required of the app itself, and it can quickly start to take advantage of the many features that Azure App Service Web Apps offer.

クラウド向けに最適化されていないアプリだけでなく、Azure App Service Web Apps は、多くの ASP.NET Core アプリのように、多くのシンプルなモノリシック (非分散) アプリケーションにとって優れたソリューションです。In addition to apps that are not optimized for the cloud, Azure App Service Web Apps are an excellent solution for many simple monolithic (non-distributed) applications, such as many ASP.NET Core apps. この手法では、アーキテクチャは基本的であり、簡単に理解して管理できます。In this approach, the architecture is basic and simple to understand and manage:

基本的な Azure アーキテクチャ

このようなアプリを管理するには、通常、1 つのリソース グループ内の少数のリソースで十分です。A small number of resources in a single resource group is typically sufficient to manage such an app. 多くの個々のプロセスで構成されるアプリではなく、通常、1 つのユニットとしてデプロイされるアプリがこの基本的なアーキテクチャの手法に適しています。Apps that are typically deployed as a single unit, rather than those apps that are made up of many separate processes, are good candidates for this basic architectural approach. アーキテクチャはシンプルですが、この手法では、ホストされたアプリで、増加する需要を満たすように、スケールアップ (ノードことにリソースの増加) とスケールアウト (ホストされるノードの増加) の両方を引き続き行うことができます。Though architecturally simple, this approach still allows the hosted app to scale both up (more resources per node) and out (more hosted nodes) to meet any increase in demand. 自動スケーリングを使用して、必要に応じて、また、ノード全体での平均負荷に基づいて、アプリをホストするノード数を自動的に調整するようにアプリを構成できます。With autoscale, the app can be configured to automatically adjust the number of nodes hosting the app based on demand and average load across nodes.

App Service Web Apps for ContainersApp Service Web Apps for Containers

直接 Web アプリをホストするサポートに加えて、App Service Web Apps for Containers は、Windows と Linux 上でのコンテナー化されたアプリケーションの実行に使用できます。In addition to support for hosting web apps directly, App Service Web Apps for Containers can be used to run containerized applications on Windows and Linux. このサービスを使用すると、自分のビジネスに合わせてサイズを変更できる、コンテナー化されたアプリケーションを簡単にデプロイして実行できます。Using this service, you can easily deploy and run containerized applications that can scale with your business. アプリには、上記にある App Service Web Apps のすべての機能が備わっています。The apps have all of the features of App Service Web Apps listed above. さらに、Web Apps for Containers では、Docker Hub、Azure Container Registry、GitHub を使用した効率的な CI/CD がサポートされています。In addition, Web Apps for Containers supports streamlined CI/CD with Docker Hub, Azure Container Registry, and GitHub. Azure DevOps を使用して、レジストリに変更を発行するビルド パイプラインとデプロイ パイプラインを定義できます。You can use Azure DevOps to define build and deployment pipelines that publish changes to a registry. これらの変更は、ステージング環境でテストでき、ダウンタイムなしで更新できるデプロイ スロットを使用して本番環境に自動的にデプロイできます。These changes can then be tested in a staging environment and automatically deployed to production using deployment slots, allowing zero-downtime upgrades. 以前のバージョンへのロールバックも簡単に実行できます。Rolling back to previous versions can be done just as easily.

Web Apps for Containers が最も役立つシナリオがいくつかあります。There are a few scenarios where Web Apps for Containers makes the most sense. コンテナー化できる既存のアプリがある場合、Windows コンテナーか Linux コンテナーのいずれであっても、このツールセットを使用してこれらを簡単にホストできます。If you have existing apps that you can containerize, whether in Windows or Linux containers, you can host these easily using this toolset. コンテナーを発行して、Web Apps for Containers を構成し、選択したレジストリからイメージの最新バージョンをプルするだけです。Just publish your container and then configure Web Apps for Containers to pull the latest version of that image from your registry of choice. これはクラシック アプリ ホスティング モデルからクラウドに最適化されたモデルに移行するための "リフト アンド シフト" 手法です。This is a "lift and shift" approach to migrating from classic app hosting models to a cloud-optimized model.

コンテナー化されたオンプレミスの .NET アプリケーションを Azure Web Apps for Containers に移行する

また、この手法は、開発チームがコンテナー ベースの開発プロセスに移行できる場合にも適しています。This approach also works well if your development team is able to move to a container-based development process. コンテナーを含む開発中のアプリの "内部ループ" には、コンテナーを含むアプリのビルドも含まれます。The "inner loop" of developing apps with containers includes building the app with containers. コードおよびコンテナーの構成に行われた変更はソース管理にプッシュされ、自動化されたビルドには Docker Hub または Azure Container Registry などのレジストリに新しいコンテナー イメージを発行する責任があります。Changes made to the code as well as to container configuration are pushed to source control, and an automated build is responsible for publishing new container images to a registry like Docker Hub or Azure Container Registry. 次の図に示すように、これらのイメージは追加の開発、および本番環境へのデプロイに対する基本として使用されます。These images are then used as the basis for additional development, as well as for deployments to production, as shown in the following diagram:

エンドツーエンドの Docker DevOps ライフサイクル ワークフロー

コンテナーでの開発は、特にコンテナーが本番環境で使用されるときに多くの利点が提供されます。Developing with containers offers many advantages, especially when containers are used in production. 同じコンテナー構成は、システムをビルドしてテストするローカル開発コンピューターから本番環境まで、実行する各環境でアプリをホストするために使用されます。The same container configuration is used to host the app in each environment in which it runs, from the local development machine to build and test systems to production. この方法により、コンピューターの構成またはソフトウェア バージョンの違いから生じる障害の可能性が大幅に削減されます。This approach greatly reduces the likelihood of defects resulting from differences in machine configuration or software versions. また、コンテナーは任意の OS で実行できるため、開発者はオペレーティング システムを含む、最も生産的なツールを使用することもできます。Developers can also use whatever tools they're most productive with, including the operating system, since containers can run on any OS. 場合によっては、多くのコンテナーに関連する配布されるアプリケーションは、1 つの開発コンピューターで実行するためにリソースを非常に集中的に使用する場合があります。In some cases, distributed applications involving many containers may be very resource-intensive to run on a single development machine. このシナリオでは、次のセクションで説明される、Kubernetes と Azure Dev Spaces を使用してアップグレードするのが便利な場合があります。In this scenario, it may make sense to upgrade to using Kubernetes and Azure Dev Spaces, covered in the next section.

大規模なアプリケーションの一部がそれぞれのより小さい部分に分割されるとき (独立した マイクロサービス)、追加の設計パターンをアプリの動作を向上させるために使用できます。As portions of larger applications are broken up into their own smaller, independent microservices, additional design patterns can be used to improve app behavior. 個別のサービスを直接操作する代わりに、API ゲートウェイ によってアクセスを簡素化し、そのバックエンドからクライアントを切り離すことができます。Instead of working directly with individual services, an API gateway can simplify access and decouple the client from its back end. さまざまなフロントエンドに対して個別のサービス バックエンドがある場合、サービスによってコンシューマーとの連携を進化させることができます。Having separate service back ends for different front ends also allows services to evolve in concert with their consumers. 一般的なサービスには、個別の "サイドカー" コンテナーを介してアクセスできます。これには "アンバサダー" パターンを使用する一般的なクライアント接続ライブラリが含まれる可能性があります。Common services can be accessed via a separate sidecar container, which might include common client connectivity libraries using the ambassador pattern.

複数の一般的な設計パターンが示されたマイクロサービスのサンプル アーキテクチャ。

マイクロサービス ベースのシステムをビルドするときに考慮する設計パターンを参照してください。Learn more about design patterns to consider when building microservice-based systems.

Azure Kubernetes ServiceAzure Kubernetes Service

Azure Kubernetes Service (AKS) は、ホストされている Kubernetes 環境を管理するサービスで、コンテナー オーケストレーションの専門知識がなくても、コンテナー化したアプリケーションのデプロイと管理をすばやく簡単に行うことができます。Azure Kubernetes Service (AKS) manages your hosted Kubernetes environment, making it quick and easy to deploy and manage containerized applications without container orchestration expertise. また、アプリケーションをオフラインにせずに、オンデマンドでリソースのプロビジョニング、アップグレード、スケーリングを実行できるため、継続的に行う操作と保守の負担も解消されます。It also eliminates the burden of ongoing operations and maintenance by provisioning, upgrading, and scaling resources on-demand, without taking your applications offline.

AKS では、Azure に対する責任の多くをオフロードすることによって、Kubernetes クラスターの管理における複雑な運用のオーバーヘッドを削減します。AKS reduces the complexity and operational overhead of managing a Kubernetes cluster by offloading much of that responsibility to Azure. ホストされている Kubernetes サービスとして、Azure では、正常性の監視や保守などの重要なタスクが処理されます。As a hosted Kubernetes service, Azure handles critical tasks like health monitoring and maintenance for you. また、マスターではなく、クラスター内のエージェント ノードのみの料金を支払います。Also, you pay only for the agent nodes within your clusters, not for the masters. Managed Kubernetes サービスとして、AKS は次の機能を提供します。As a managed Kubernetes service, AKS provides:

  • 自動化された Kubernetes バージョンのアップグレードと修正。Automated Kubernetes version upgrades and patching.
  • 簡単なクラスターのスケーリング。Easy cluster scaling.
  • 自己復旧のホストされているコントロール プレーン (マスター)。Self-healing hosted control plane (masters).
  • コストの削減 - 実行中のエージェント プール ノードの料金のみを支払う。Cost savings - pay only for running agent pool nodes.

AKS クラスター内のノードの管理は Azure が処理するので、管理者は、クラスターのアップグレードなどの多くのタスクを手動で実行する必要がありません。With Azure handling the management of the nodes in your AKS cluster, you no longer need to perform many tasks manually, like cluster upgrades. Azure ではこれらの重要な保守タスクが処理されるため、AKS ではクラスターへの直接アクセスを提供しません (SSH の使用など)。Because Azure handles these critical maintenance tasks for you, AKS doesn't provide direct access (such as with SSH) to the cluster.

AKS を活用しているチームは、Azure Dev Spaces の利点を利用することもできます。Teams who are leveraging AKS can also take advantage of Azure Dev Spaces. Azure Dev Spaces を利用すると、チームは AKS で実行されているアプリケーションやマイクロサービス アーキテクチャ全体を直接取り扱えるようになるため、マイクロサービス アプリケーションに関する開発と迅速な反復作業に集中できます。Azure Dev Spaces helps teams to focus on the development and rapid iteration of their microservice application by allowing teams to work directly with their entire microservices architecture or application running in AKS. Azure Dev Spaces では、残りの AKS クラスターまたはその他の開発者に影響を与えることなく、ご利用のマイクロサービス アーキテクチャの一部を分離させて個別に更新する方法も提供されます。Azure Dev Spaces also provides a way to independently update portions of your microservices architecture in isolation without affecting the rest of the AKS cluster or other developers.

Azure Dev Spaces ワークフローの例

Azure Dev Spaces:Azure Dev Spaces:

  • ローカル コンピューターの準備時間とリソース要件を最小限にするMinimize local machine setup time and resource requirements
  • チームがより迅速に反復処理することを許可するAllow teams to iterate more rapidly
  • チームが必要とする統合環境の数を減らすReduce the number of integration environments required by a team
  • 開発/テスト時に分散システムで特定のサービスを模倣する必要性を取り除くRemove the need to mock certain services in a distributed system when developing/testing

Azure Dev Spaces の詳細を参照してくださいLearn more about Azure Dev Spaces

Azure Virtual MachinesAzure Virtual Machines

既存のアプリケーションにおいて App Service で実行するための大幅な変更が必要になった場合は、クラウドへの移行を簡略化するために Virtual Machines を選択できます。If you have an existing application that would require substantial modifications to run in App Service, you could choose Virtual Machines in order to simplify migrating to the cloud. ただし、Azure App Service と比較すると、VM の構成、セキュリティ保護、保守を正しく行うには、さらなる時間と IT の専門知識が必要になります。However, correctly configuring, securing, and maintaining VMs requires much more time and IT expertise compared to Azure App Service. Azure Virtual Machines を検討している場合は、現在の VM 環境のパッチ適用、更新、管理に必要な、継続的な保守作業を考慮してください。If you're considering Azure Virtual Machines, make sure you take into account the ongoing maintenance effort required to patch, update, and manage your VM environment. Azure 仮想マシンはサービスとしてのインフラストラクチャ (IaaS) であり、App Service は PaaS です。Azure Virtual Machines is infrastructure as a service (IaaS), while App Service is PaaS. また、アプリを Windows Container として Web App for Containers にデプロイすることが、シナリオにとって有効なオプションになり得るかどうかも検討する必要があります。You should also consider whether deploying your app as a Windows Container to Web App for Containers might be a viable option for your scenario.

論理プロセスLogical processes

アプリケーションから分離できる個々の論理プロセスは、Azure Functions に関係なく "サーバーレス" な方法でデプロイできます。Individual logical processes that can be decoupled from the rest of the application may be deployed independently to Azure Functions in a "serverless" manner. Azure Functions では、アプリケーションまたはインフラストラクチャの実行を気にせずに、特定の問題で必要なコードのみを記述できます。Azure Functions lets you just write the code you need for a given problem, without worrying about the application or infrastructure to run it. C#、F#、Node.js、Python、PHP などのさまざまなプログラミング言語を選択できるため、当面のタスクに対して最も生産性の高い言語を使用できます。You can choose from a variety of programming languages, including C#, F#, Node.js, Python, and PHP, allowing you to pick the most productive language for the task at hand. ほとんどのクラウドベースのソリューションと同様、使用した時間に対してのみ料金を支払います。Azure Functions は必要に応じて確実にスケール アップされます。Like most cloud-based solutions, you pay only for the amount of time your use, and you can trust Azure Functions to scale up as needed.

DataData

Azure はさまざまなデータ記憶域のオプションを提供しているため、アプリケーションが対象となるデータに適したデータ プロバイダーを使用できます。Azure offers a wide variety of data storage options, so that your application can use the appropriate data provider for the data in question.

トランザクションに基づくリレーショナル データの場合、Azure SQL Database が最も適しています。For transactional, relational data, Azure SQL Databases are the best option. 高パフォーマンスの読み取りが多くのデータの場合、Azure SQL Database に基づく Redis キャッシュが適しています。For high performance read-mostly data, a Redis cache backed by an Azure SQL Database is a good solution.

構造化されていない JSON データは、SQL Database 列から Azure Storage の Blob またはテーブル、Azure Cosmos DB まで、さまざまな方法で格納できます。Unstructured JSON data can be stored in a variety of ways, from SQL Database columns to Blobs or Tables in Azure Storage, to Azure Cosmos DB. このうち、Azure Cosmos DB がクエリ機能では最も優れており、クエリのサポートを必要とする JSON ベースのドキュメントが多数ある場合は、このオプションが推奨されます。Of these, Azure Cosmos DB offers the best querying functionality, and is the recommended option for large numbers of JSON-based documents that must support querying.

アプリケーションの動作を調整するために使用する一時的なコマンドベースの、またはイベントベースのデータでは、Azure Service Bus または Azure Storage キューを使用できます。Transient command- or event-based data used to orchestrate application behavior can use Azure Service Bus or Azure Storage Queues. Azure Service Bus は柔軟性が高く、アプリケーション内およびアプリケーション間で重要なメッセージをやり取りする場合に推奨されるサービスです。Azure Service Bus offers more flexibility and is the recommended service for non-trivial messaging within and between applications.

アーキテクチャに関する推奨事項Architecture recommendations

アプリケーションの要件で、アーキテクチャについて指示している必要があります。Your application's requirements should dictate its architecture. 利用できるさまざまな Azure サービスが多くあります。There are many different Azure services available. 適切なサービスを選ぶことが重要です。Choosing the right one is an important decision. Microsoft では、一般的なシナリオに最適化された典型的なアーキテクチャを特定できるように、参照アーキテクチャのギャラリーを提供しています。Microsoft offers a gallery of reference architectures to help identify typical architectures optimized for common scenarios. アプリケーションの要件に最も近い、または少なくとも使い始めに適している参照アーキテクチャを見つけることができます。You may find a reference architecture that maps closely to your application's requirements, or at least offers a starting point.

図 11-1 は、参照アーキテクチャの例です。Figure 11-1 shows an example reference architecture. この図は、マーケティングに最適化された Sitecore コンテンツ管理システム Web サイトに推奨されるアーキテクチャの手法を示しています。This diagram describes a recommended architecture approach for a Sitecore content management system website optimized for marketing.

図 11-1

図 11-1Figure 11-1. Sitecore マーケティング Web サイトの参照アーキテクチャ。Sitecore marketing website reference architecture.

参照 – Azure のホスティングの推奨事項References – Azure hosting recommendations