コンプライアンスによって厳密に管理および制限されているセグメントの顧客の場合、特に基幹業務アプリケーションには、分離された専用環境を用意することが重要です。 セキュリティは中心ですが、これらのクリティカルなアプリケーションには、メモリ使用率が高い、または 1 秒あたりの要求数が多いシナリオでスケーリングおよび実行する機能も必要です。 このソリューションでは、基幹業務アプリケーションをホストする方法の例を示します。 App Service Environment を使用すると、セキュリティとパフォーマンスの両方に同時に対処できるようになります。 このソリューションをデプロイすると、ハブ VNet のリソースを表す Azure ランディング ゾーンの既存のリソースを柔軟に使用できるようになります。 または、このソリューションを自己完結型ワークロードとしてデプロイすることもできます。
Note
この記事では、Azure ランディング ゾーンの App Service のクラウド導入フレームワークガイダンスに沿ったデプロイ可能なアーキテクチャを提供します。
Architecture
この画像の全体は、サブスクリプションとプライベート DNS ゾーンのスコープ内にあります。 これは、左上隅のサブスクリプション アイコンと Azure プライベート DNS ゾーン アイコンで示されています。 これらのアイコンの下には、2 つのブロックが並んでいます。 これらは 2 つの仮想ネットワークを表しており、それらの間に VNet ピアリングがあります。 左側のブロックはハブ VNet を表し、右側のブロックはスポーク VNet を表しています。 左側のボックス内には、3 つの小さなボックスがあります。 各ボックスは、異なるサブネットとそれに関連付けられているネットワーク セキュリティ グループを示しています。 左上から順に、Azure Bastion サブネット内の Azure Bastion インスタンス、右上にはジャンプボックス サブネットに存在するジャンプボックス VM があります。 右下にはハブ VNet の最後の 3 番目のボックスがあります。これには、CI/CD サブネットに存在する CI/CD エージェント サーバーが含まれています。 スポーク VNet を表す右側のボックスには、App Service Environment v3 インスタンスを含む App Service Environment サブネットという小さなボックスが 1 つだけ含まれています。 小さいボックスは App Service Environment を表しています。 App Service アイコンはそのボックス内にあります。 画像の下部中央には、プロセスの一部としてもデプロイされる共有リソースがあります。 共有リソースには、左から右に、Azure Key Vault、Azure Log Analytics ワークスペース、Azure Application Insights が含まれます。
このアーキテクチャの Visio ファイル をダウンロードします。
ワークフロー
このアーキテクチャには、次の 3 つのフローがコールアウト付きで示されています: 操作 (オレンジ色)、デプロイ (緑)、ユーザー (紫色)。
操作
- オペレーターまたは管理者は、継続的インテグレーションと継続的デプロイ (CI/CD) サーバー、または App Service Environment の Kudu エンドポイントで管理タスクを実行する必要があります。 まず、Azure Bastion ホストに接続する必要があります。
- Azure Bastion ホストを使用すると、オペレーターまたは管理者はリモート デスク プロトコル (RDP) を使用してジャンプボックス サーバーにアクセスできます。
- オペレーターまたは管理者は、ジャンプボックス サーバーから CI/CD サーバーに RDP 接続し、エージェントのアップグレードや OS のアップグレードなどの必要なタスクを実行できます。 オペレーターまたは管理者は、ジャンプボックス サーバーから App Service Environment インスタンスの Kudu エンドポイントに接続して、管理タスクを実行したり、高度なトラブルシューティングを実行したりできます。
展開
- ソリューションのデプロイは、CI/CD エージェント サーバーを介して実行されます。 このサーバー上の DevOps エージェントは、新しいデプロイが実行されると Azure Pipelines に接続します。
- その後、VNet ピアリング経由で App Service Environment に接続して、成果物が App Service にデプロイされます。
User
- ユーザーは、会社のネットワーク経由でデプロイされた App Service に接続できます。 必要に応じて、Azure ExpressRoute または VPN を使用したり、該当する Azure VNet ピアリング経由で使用したりできます。
コンポーネント
このソリューションでは、次の Azure サービスを使用します。
Azure App Service Environment v3 (ASEv3) は Azure App Service の機能であり、高スケール、ネットワーク分離、セキュリティ、高いメモリ使用率を必要とするお客様向けのシングルテナント サービスです。 アプリは、App Service Environment v3 で作成された App Service プランでホストされ、Isolated V2 サービス プラン内で異なるレベルを使用するオプションがあります。 以前のバージョンの App Service Environment と比較して、多数の改善が行われています。ネットワークの依存関係、スケール時間、スタンプ料金の削除はその一例です。 このソリューションでは、内部アクセス用に構成された App Service Environment v3 を使用します。
Azure プライベート DNS を使用すると、カスタム DNS ソリューションを実装しなくても、仮想ネットワーク内のドメイン名を管理および解決できます。 Azure プライベート DNS ゾーン は、 仮想ネットワーク リンクを介して 1 つ以上の仮想ネットワークに適合することができます。 この参照アーキテクチャで使用される App Service Environment v3 の内部的な性質により、App Service Environment でホストされているアプリケーションのドメイン名を解決するには、プライベート DNS ゾーンが必要です。
Azure Application Insights は、開発者が異常を検出し、イシューを診断し、使用パターンを理解するのに役立つ Azure Monitor の機能です。 Application Insights は、拡張可能なアプリケーション パフォーマンス管理とライブ Web アプリの監視を備えています。 .NET、Node.js、Java、Python など、さまざまなプラットフォームがサポートされています。 Azure、オンプレミス、ハイブリッド環境、またはその他のパブリック クラウドでホストされているアプリがサポートされます。 Application Insights は、デプロイされたアプリケーションの動作を監視するために、この参照アーキテクチャの一部として含まれています。
Azure Log Analytics は、 Azure Monitor の機能で、必要に応じて、Azure portal 内から、Azure Monitor ログ内のデータを使用してログ クエリを編集および実行できます。 開発者は、一連のレコードに対して単純なクエリを実行したり、Log Analytics を使用して高度な分析を実行したりできます。 その後、結果を視覚化できます。 Log Analytics は、すべての監視ログを集計して、分析とレポートを行うために、この参照アーキテクチャの一部として構成されています。
Azure Virtual Machines は、複数の異なるワークロードをホストするために使用できる、オンデマンドでスケーラブルなコンピューティング リソースです。 この参照アーキテクチャでは、仮想マシンを使用して、管理ジャンプボックス サーバーを提供し、DevOps エージェントまたは GitHub ランナーのホストを提供します。
Azure Key Vault は、API キーとパスワードから証明書や暗号化キーまで、シークレットを安全に格納してアクセスするクラウド サービスです。 Azure Key Vault は、将来のコード デプロイのためのシークレット管理を容易にするために、このアーキテクチャのインフラストラクチャの一部としてデプロイされます。
Azure Bastion は、開発者の仮想ネットワーク内でプロビジョニングされるサービスとしてのプラットフォームです。 これにより、Azure portal から TLS 経由で開発者の仮想マシンに安全に RDP/SSH 接続できます。 Azure Bastion を使用すると、仮想マシンで RDP/SSH 経由で接続するのにパブリック IP アドレスが不要になります。 この参照アーキテクチャでは、Azure Bastion を使用して、DevOps エージェントまたは GitHub ランナー サーバーまたは管理ジャンプボックス サーバーにアクセスします。
代替
App Service インスタンスの前に Azure Application Gateway を追加して、Web アプリケーションを一般的な悪用や脆弱性から保護する Web Application Firewall (WAF) 機能を提供することを検討してください。
セルフホステッド GitHub ランナー は、Azure DevOps セルフホステッド エージェントの代わりに使用できます。
考慮事項
以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。
[信頼性]
信頼性により、顧客に確約したことをアプリケーションで確実に満たせるようにします。 詳細については、「信頼性の重要な要素の概要」を参照してください。
- この参照実装でのゾーン冗長の要件と、ソリューション内の他の Azure サービスのゾーン冗長機能を考慮してください。 App Service Environment v3 は、ターゲット リージョン内の 3 つのゾーンすべてにインスタンスを分散して、ゾーン冗長をサポートします。 この構成は App Service Environment の作成時にのみ設定でき、一部のリージョンでは使用できない場合があります。 詳細については、「App Service Environment の可用性ゾーンのサポート」を参照してください。 この参照実装ではゾーン冗長が実装されますが、このリポジトリを複製して
zoneRedundant
プロパティをfalse
に設定して変更できます。
セキュリティ
セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの重要な要素の概要」を参照してください。
- App Service が有効な場所からのみ到達できるように、アクセス制限を適切に使用します。 たとえば、App Service が API をホストしていて、APIM によって前面に配置される場合は、APIM からのみ App Service にアクセスできるようにアクセス制限を設定できます。
- この参照実装では、App Service Environment が仮想ネットワークにデプロイされるため (内部 App Service Environment と呼ばれる)、App Service Environment にデプロイされたすべてのアプリケーションは本質的に、仮想ネットワークの範囲内でネットワーク分離されます。
- Azure Key Vault にアプリケーション シークレット (データベース資格情報、API トークン、秘密キー) を保存します。 マネージド ID を使用して安全にアクセスするように、App Service アプリを構成します。 Azure Key Vault と Azure App Configuration を使用するタイミングを決定します。
コストの最適化
コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、コスト最適化の柱の概要に関する記事をご覧ください。
- App Service Environment v3 インスタンスのスタンプ料金はかかりませんが、App Service Environment v3 インスタンス内で App Service プランが構成されていない場合は料金が発生します。 この料金は、App Service Environment v3 インスタンスがデプロイされているリージョンに対して、Windows I1v2 インスタンスの 1 つのインスタンスと同じレートで課金されます。
- ゾーン冗長として構成されている場合、課金モデルは、この構成にデプロイされている基になるインフラストラクチャを考慮するように調整されます。 ASEv3 価格に従って、追加のインスタンスに対して責任を負う場合があります。
- App Service Environment v3 App Service プラン (Isolated V2 App Service プランと呼ばれます) の場合は、Azure Reservations とコンピューティング用の Azure 節約プランを 1 年または 3 年契約で使用すると、従量課金制の料金を大幅に節約できます。 詳細については、 Isolated v2 インスタンスに予約割引を適用する方法に関する記事を参照してください。
オペレーショナル エクセレンス
オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「オペレーショナル エクセレンスの重要な要素の概要」を参照してください。
- Application Insights または別のアプリケーション パフォーマンス管理ソリューションを使用して、さまざまな環境でのアプリケーションの動作を監視および学習します。
- Application Insights を有効にする方法は 2 つあります。 環境ごとに、異なる Application Insights インスタンスにテレメトリ データを収集します。
- 異なるサービスに分割された複数のコンポーネントがアプリケーションにある場合は、それらの動作を一緒に調べることをお勧めします。 テレメトリ データを同じ Application Insights インスタンスに収集しますが、異なるクラウド ロール名でラベル付けします。
- Application Insights データを Azure Log Analytics ワークスペースにエクスポートします。 組織には 1 つのワークスペースを使用することをお勧めします。
- ソリューションを運用環境で確実にサポートできるように、アプリケーションと機能の設計に運用ダッシュボードを含めます。
- エンドポイントの正常性チェックを実装し、正常性プローブ、依存関係チェック、可用性テストに使用します。
- デプロイされたすべてのリソースを一意に識別するための規則を明確に定義して、プレフィックスとサフィックスを使用することを検討してください。 これらの名前付け規則により、ソリューションを隣り合わせにデプロイする場合の競合を回避し、チーム全体の機敏性とスループットを向上させます。
- ネットワーク構成によっては、App Services にパブリック インターネットから到達できない場合があり、パブリック ホステッドエージェントの使用はデプロイでは機能しません。 そのシナリオでは セルフホステッド エージェント を使用します。
このシナリオのデプロイ
開始してこの実装の詳細をよりよく理解するには、 参照実装の導入に関するユーザー ガイドで参照実装リソースを確認してください。
- このリポジトリをクローンし、要件と組織固有のランディング ゾーン ガイドラインに合わせて参照実装リソースを変更することをお勧めします。
- デプロイする前に、ソリューションのデプロイに使用されるサービス プリンシパルに、上記のリソースの種類を作成するために必要なアクセス許可があることを確認します。
- 参照実装のデプロイに使用する CI/CD サービスを検討してください。 この参照実装は内部 App Service Environment であるため、デプロイ パイプラインを実行するにはセルフホステッド エージェントが必要です。 DevOps エージェントまたは GitHub ランナーのいずれかの使用を選択できます。 必要な特定の構成値については、 ユーザー ガイド を参照してください。
- この参照実装をデプロイするリージョンを検討してください。 ASEv3 リージョン リストを参照して、選択したリージョンがデプロイに対して有効になっていることを確認してください。
共同作成者
この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。
プリンシパルの作成者:
- ピート メッシーナ |Senoir クラウド ソリューション アーキテクト
- Nabeel Prior |Senoir クラウド ソリューション アーキテクト
パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。
次の手順
これらの主要なサービスの詳細については、以下をご覧ください。
- Azure App Service Environment v3 (ASEv3)
- Azure プライベート DNS ゾーン
- Azure Application Insights
- Azure Log Analytics
- Azure Virtual Machines の概要
- Azure Key Vault の概念
- Azure Bastion