Azure Functions は、インフラストラクチャを直接管理することなく、イベント ドリブン コードを実行するために使用できるサーバーレス コンピューティング サービスです。 Azure Functions は、基になるインフラストラクチャを抽象化するサービス オファリングとしての機能です。 この抽象化により、コードに集中できます。 Azure Functions は、要求に基づいて自動的にスケーリングされ、操作中に消費されたリソースに対してのみ課金されます。
この記事では、アーキテクトとしてコンピューティング デ シジョン ツリー を確認し、ワークロードのコンピューティング ソリューションとして Azure Functions を選択していることを前提としています。 この記事のガイダンスでは、Well-Architected Framework の柱の原則にマップされるアーキテクチャに関する推奨事項を示します。
テクノロジスコープ
このレビューでは、次の Azure リソースに関する相互に関連する決定に焦点を当てます。
- 関数アプリケーション
Note
このサービス ガイドは、 Azure App Service (Web Apps) サービス ガイドのガイダンスに基づいています。 Azure Functions はサーバーレス コンピューティング サービスです。 関数は、ワークロードの基になるコンピューティング インフラストラクチャを提供する App Service プランにデプロイされます。 いくつかのホスティング プランから選択できます。
従量課金プランはフル マネージドであり、関連付けられている App Service インスタンスへのアクセスをサポートしていません。 専用ホスティング プランと Premium ホスティング プランを使用すると、App Service インスタンスを構成および管理できます。 専用または Premium ホスティング プランを選択する場合の推奨事項と考慮事項については、App Service サービス ガイドを参照してください。
Reliability
信頼性の柱の目的は、十分な回復性を構築 し、障害から迅速に回復する機能をして継続的な機能を提供することです。
信頼性設計の原則、個々のコンポーネント、システム フロー、およびシステム全体に適用される高度な設計戦略を提供します。
ワークロード設計チェックリスト
信頼性 の設計レビュー チェックリストに基づいて、設計戦略を開始します。 Azure Functions の特定の機能と構成を念頭に置いて、ビジネス要件との関連性を判断します。 必要に応じて、より多くのアプローチを含むように戦略を拡張します。
- トリガーを理解する: Azure Functions がどのようにトリガーされるかを十分に理解してください。 トリガーには、HTTP 要求、タイマー、キューなどが含まれます。 アプリケーションの信頼性要件に一致するトリガーを選択します。 - たとえば、関数がキューからのメッセージを処理する場合は、キュー自体に回復性があり、障害が発生した場合にメッセージを再処理できることを確認します。 
- 再試行と永続的なパターンを実装します。 一時的な障害には、組み込みの再試行ポリシーを使用します。 より複雑なワークフローについては、Azure Functions の Durable Functions 拡張機能の使用を検討してください。 複数の関数操作にわたって状態の管理と調整が提供されます。 - Durable Functions は、実行時間の長いワークフロー全体で信頼性が必要なシナリオに特に役立ちます。 自動再試行と永続的なタスク管理をサポートします。 
- 適切な例外処理を確認します。 関数が正常に失敗することを保証するために、堅牢な例外処理を実装します。 エラーをログに記録し、重大なエラーに対するアラート メカニズムの実装を検討します。 
- スケーラビリティを計画する: Azure Functions は、必要に応じて自動的にスケールアウトします。 負荷の下でパフォーマンスをテストすることで、アプリケーションがスパイクを処理するように設計されていることを確認します。 - Application Insights を使用してパフォーマンスを監視し、関数のスケールをリアルタイムで追跡することを検討してください。 
- べき等性の設計: 意図しない副作用を引き起こすことなく、関数を安全に再試行できることを確認します。 べき等性は、外部システムとやり取りしたり、データを変更したりする関数にとって非常に重要です。 
- 実行時間の長い操作には Durable Functions を使用します 。オーケストレーションまたは実行時間の長いプロセスを必要とする操作の場合は、Durable Functions を使用して状態を維持し、複数の手順で信頼性を確保します。 
- ソリューションの正常性を監視します。 Azure Functions ソリューションをワークロード全体の正常性の監視とアラート システムに統合します。 
構成に関する推奨事項
| Recommendation | Benefit | 
|---|---|
| 一時的 なエラーの自動再試行 を構成します。 Azure Functions のエラー処理と再試行の詳細について説明します。 | 失敗した実行を自動的に再試行することで信頼性を向上させ、データ損失や中断の可能性を減らします。 | 
| Durable Functions を使用して、複雑なワークフローと実行時間の長いプロセスを調整します。 Durable Functions の詳細を確認します。 | 組み込みの状態管理と自動再試行を使用して、実行時間の長いワークフローの信頼性の高い操作を提供します。 | 
| Application Insights を使用して 監視 と 一元的なログ記録 を実装します。 Application Insights を設定します。 | 関数の操作と依存関係に関する詳細な分析情報を提供することで、監視とトラブルシューティングを強化します。 | 
| Functions ホスティング プラン、トリガーの種類、需要に基づいて自動的にスケールアウトします。 スケーリングの詳細を確認します。 | アプリケーションが手動による介入なしでトラフィックの増加に対応できるようにし、信頼性とパフォーマンスを向上させます。 | 
セキュリティ
セキュリティの柱の目的は、ワークロードに対して機密性、整合性、可用性を保証することです。
セキュリティ設計の原則は、Azure Functions に関する技術設計にアプローチを適用することで、これらの目標を達成するための高度な設計戦略を提供します。
ワークロード設計チェックリスト
セキュリティ の 設計レビュー チェックリストに基づいて設計戦略を開始し、セキュリティ体制を改善するための脆弱性と制御を特定します。 必要に応じて、より多くのアプローチを含むように戦略を拡張します。
- マネージド ID を使用する: 関数アプリ のマネージド ID を 有効にして、資格情報を管理しなくても他の Azure サービスに安全にアクセスできるようにします。 
- Microsoft Entra ID を使用して関数アプリをセキュリティで保護する:Microsoft Entra ID 認証を要求するように Azure Functions を構成して、関数へのアクセスを制限します。 
- ネットワーク セキュリティ制御を適用します。Azure Functions ネットワーク構成をセキュリティで保護するために、ホスティング モデルで使用可能な Azure Functions ネットワーク オプションについて説明します。 要件を満たすためにネットワークをセキュリティで保護します。 
構成に関する推奨事項
| Recommendation | Benefit | 
|---|---|
| Azure リソースへの安全なアクセスのためにマネージド ID を有効にします。 マネージド ID を有効にする | シークレットを格納およびローテーションする必要がなくなり、資格情報の管理が簡素化されます。 このアプローチにより、セキュリティが強化されます。 | 
| シークレットの管理と定期的なローテーションには 、Azure Key Vault を使用します。 Key Vault と Azure Functions を統合します。 | API キーや接続文字列などの機密情報を安全に格納し、マネージド ID を使用できない場合にシークレットローテーションを自動化することで、機密情報を保護するのに役立ちます。 | 
| 仮想ネットワークと統合 し、 プライベート エンドポイントを使用します。 | 内部ネットワークへのアクセスを制限し、パブリック インターネットへの露出を防ぐことで、関数アプリをセキュリティで保護します。 仮想ネットワーク統合とプライベート エンドポイントは、従量課金ホスティング プランでは使用できません。 | 
コストの最適化
コストの最適化では、支出パターンの検出 、重要な領域への投資の優先順位付け、ビジネス要件を満たしながら組織の予算を満たすために他の での最適化に重点を置いています。
コスト最適化の設計原則は、Azure Functions とその環境に関連する技術設計において、これらの目標を達成し、必要に応じてトレードオフを行う高度な設計戦略を提供します。
ワークロード設計チェックリスト
投資のコスト最適化 の 設計レビュー チェックリストに基づいて、設計戦略を開始します。 ワークロードの設計を、そのワークロードに割り当てられた予算に合わせて微調整します。 設計では、適切な Azure 機能を使用し、投資を監視し、時間の経過と同時に最適化する機会を見つける必要があります。
- 適切な価格プランを選択します。 Azure Functions には、従量課金プラン、Premium プラン、専用 (App Service) プランなど、複数の価格プランがあります。 ワークロードとコストに関する考慮事項に合った 価格プラン を選択します。 - 従量課金プランは、運用時間と消費されたリソースに対してのみ支払うため、操作の頻度が低い予測不可能なワークロードに最適です。 アプリが待機状態の場合、課金されません。 
- 操作時間の最適化: 関数コードを最適化することで、操作時間を短縮します。 外部依存関係の使用を最小限に抑え、コード ロジックを最適化して各操作の期間を短縮します。 
- コストの監視と分析:Microsoft Cost Management を使用して関数アプリの使用状況とコストを定期的に監視し、コストの異常を検出するためのアラートを設定します。 
構成に関する推奨事項
| Recommendation | Benefit | 
|---|---|
| 予測できないトラフィックが発生するワークロード向けに消費プランを使用します。 従量課金プランについて理解します。 | 関数の実行時に使用されるリソースに対してのみ課金することでコストを削減し、アイドル状態のリソースに関連するコストを回避します。 | 
| ワークロードが予測可能な場合は、 Elastic Premium プラン または 専用 App Service プラン の容量を予約します。 | 安定した使用パターンで予測可能なワークロードの割引価格によってコストを削減します。 | 
| コストを定期的に 監視 し、異常のアラートを設定します。 アラートを使用してコストを監視します。 | コストの急増を早期に特定するのに役立ちます。これにより、プロアクティブな管理と最適化が可能になります。 | 
オペレーショナル エクセレンス
オペレーショナル エクセレンスは主に、開発プラクティス、可観測性、リリース管理の手順に重点を置いています。
オペレーショナル エクセレンス設計原則は、ワークロードの運用要件に対してこれらの目標を達成するための高度な設計戦略を提供します。
ワークロード設計チェックリスト
Azure Functions に関連する監視、テスト、デプロイのプロセスを定義するための オペレーショナル エクセレンスの設計レビュー チェックリスト に基づいて、設計戦略を開始します。
- デプロイを自動化する: 継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインを使用して、関数アプリのデプロイを自動化します。 シームレスなデプロイ ワークフローのために、Azure DevOps または GitHub Actions と統合します。 
- 正常性の監視を実装します。 Azure Monitor と Application Insights を使用して、関数の正常性とパフォーマンスを追跡します。 重要なメトリックのアラートを設定し、リアルタイムの分析情報にカスタム ダッシュボードを使用します。 詳しくは、「Azure Functions を監視する」をご覧ください。 
- ソリューションを安全にデプロイします。 Azure Functions で使用できる デプロイ モデル を理解し、安全なデプロイ プラクティスに最適なモデルを採用します。 
- ディザスター リカバリー (DR) の計画:重要な機能にリージョン間 DR と可用性ゾーンを使用して DR 戦略を実装します。 
構成に関する推奨事項
| Recommendation | Benefit | 
|---|---|
| Azure DevOps または GitHub Actions を使用して 、CI/CD パイプライン を使用してデプロイを自動化します。 CI/CD を設定します。 | デプロイの一貫性を向上させ、手動エラーを減らし、新機能の市場投入までの時間を短縮します。 | 
| 運用環境のリリース前にステージングの変更に デプロイ スロット を使用します。 | 運用環境にエラーが発生するリスクを軽減し、問題が検出された場合に安全なロールバックを可能にします。 | 
| 使用可能なメトリックを使用して、Application Insights と Azure Monitor を使用して 一元的な監視 を実装 します。 | 関数のパフォーマンスの可視性を高め、問題を迅速に特定して解決するのに役立ちます。 | 
パフォーマンス効率
パフォーマンス効率とは、容量の管理により、負荷が増加してもユーザー エクスペリエンスを維持することです。 この戦略には、リソースのスケーリング、潜在的なボトルネックの特定と最適化、ピーク パフォーマンスの最適化が含まれます。
パフォーマンス効率設計の原則は、予想される使用に対してこれらの容量目標を達成するための高度な設計戦略を提供します。
ワークロード設計チェックリスト
パフォーマンス効率 の設計レビュー チェックリストに基づいて、設計戦略を開始します。 Azure Functions の主要業績評価指標に基づくベースラインを定義します。
- コールド スタートを最適化する: 事前に予約されたインスタンスを提供する Premium Flex プランを使用してコールド スタートの影響を最小限に抑えるか、Azure Functions ウォームアップ トリガーなどの戦略を使用して関数をウォーム状態に保ちます。 
- 関数コードを最適化する: 効率的なコードを記述して、操作時間とリソースの消費量を削減します。 実行時間の長い操作を回避し、外部サービス呼び出しを最適化します。 
- 自動スケールを有効にする: Azure Functions の自動スケール機能を利用して、必要に応じて自動的にスケールアウトします。 スケーリング ルールが明確に定義され、テストされていることを確認します。 
- パフォーマンス メトリックを監視する: Application Insights を使用して、操作時間、CPU、メモリ使用量などの 主要なパフォーマンス メトリックを監視します。 パフォーマンスを低下させるためにアラートを設定します。 
構成に関する推奨事項
| Recommendation | Benefit | 
|---|---|
| コールド スタート待機時間を最小限に抑えるには 、事前に予約されたインスタンスで Elastic Premium プラン を使用します。 コールド スタートについて理解します。 | コールド スタートに関連する待機時間を短縮し、時間の影響を受けやすいアプリケーションの応答時間を短縮します。 | 
| 操作時間を短縮するために関数コードを最適化します。 Azure Functions のベスト プラクティスについて説明します。 | 各関数の実行に必要な時間とリソースを減らすことで、パフォーマンスを向上させます。 | 
| 自動スケーリングを有効 にして、需要に基づいて容量を自動的に調整します。 自動スケールを構成します。 | 関数アプリが手動で介入することなく、さまざまな負荷を処理できることを確認します。 このアプローチは、負荷の下でパフォーマンスを維持するのに役立ちます。 | 
Azure ポリシー
Azure には、Azure Functions とその依存関係に関連する広範な組み込みポリシー セットが用意されています。 一連の Azure ポリシーは、上記の推奨事項の一部を監査できます。 たとえば、次のことを確認できます。
- すべての関数アプリでマネージド ID が有効になっています。
- 関数アプリは、ネットワーク セキュリティのためにプライベート エンドポイントのみを使用しています。
- 診断ログは、すべての関数アプリで有効になっています。
包括的なガバナンスについては、ネットワーク層のセキュリティに影響を与える可能性がある azure Policy 組み込み定義 およびその他のポリシー を確認します。
Azure Advisor の推奨事項
Azure Advisor は、Azure デプロイを最適化するためのベスト プラクティスに従うのに役立つ、パーソナライズされたクラウド コンサルタントです。
詳細については、 Azure Advisor に関するページを参照してください。
アーキテクチャの例
主要な推奨事項を示す基本的なアーキテクチャ: Web アプリケーション アーキテクチャの設計。
次のステップ
このドキュメントで強調表示されている推奨事項をさらに詳しく調べるには、次のリソースを検討してください。