アプリケーションの開発とデプロイ

Azure Functions を使用してサーバーレス アプリケーションを開発およびデプロイするには、パターンとプラクティスを確認し、DevOps パイプラインを構成し、サイト信頼性エンジニアリング (SRE) のベストプラクティスを実装します。

サーバーレス アーキテクチャと Azure Functions の詳細については、次を参照してください。

計画

アプリの開発とデプロイを計画するには、次を実行します。

  1. 開発環境を準備し、ワークフローを設定します。
  2. Azure Functions アプリの開発をサポートするためのプロジェクトを構築します。
  3. アプリのトリガー、バインド、および構成要件を特定します。

イベントドリブン アーキテクチャについて

別のイベントにより、サーバーレス Functions プロジェクト内のすべての関数がトリガーされます。 イベントドリブン アーキテクチャの詳細については、次をご覧ください。

開発環境の準備

Functions を作成するツールを使用して、開発ワークフローと環境を設定します。 開発ツールと Functions コード プロジェクトの構造の詳細については、次を参照してください。

開発

使用する開発言語を決定します。 Azure Functions では、C#、F#、PowerShell、JavaScript、TypeScript、Java、および Python がサポートされます。 プロジェクトのすべての関数には、同じ言語が使用されている必要があります。 詳細については、「Azure Functions でサポートされている言語」を参照してください。

トリガーとバインドを定義する

トリガーによって関数が呼び出されます。どの関数にも厳密に 1 つのトリガーがある必要があります。 関数にバインドすると、宣言によって別のリソースが関数に接続されます。 Functions のトリガーとバインドの詳細については、次をご覧ください。

Functions アプリケーションを作成する

Functions は、単一責任の原則に従います。つまり、1 つのことだけを実行します。 Functions の開発の詳細については、次をご覧ください。

ステートフル ワークフローに Durable Functions を使用する

Azure Functions で Durable Functions を使用すると、"オーケストレーター関数" を記述することでサーバーレス環境にステートフル ワークフローを定義し、"エンティティ関数" を記述することでステートフル エンティティを定義することができます。 Durable Functions によって状態、チェックポイント、再起動が管理されることで、ユーザーはビジネス ロジックに専念することができます。 詳細については、「Durable Functions とは」を参照してください。

コールド スタートを理解して対処する

サーバーレス ホスト インスタンスの数が 0 にスケールダウンすると、次の要求に、"コールド スタート" と呼ばれる、Functions アプリを再起動するための待機時間が追加されます。 コールド スタートによるパフォーマンスへの影響を最小限に抑えるには、Functions アプリで起動時に読み込む必要がある依存関係を減らし、可能な限り少数の大規模な同期呼び出しと操作を使用します。 自動スケーリングとコールド スタートの詳細については、サーバーレスな Functions の操作に関する記事を参照してください。

アプリケーション シークレットの管理

セキュリティのため、アプリケーション コードには資格情報を保存しないでください。 Azure Functions で Azure Key Vault を使用してキーと資格情報を格納および取得するには、「App Service と Azure Functions の Key Vault 参照を使用する」を参照してください。

サーバーレス Functions アプリケーションのセキュリティの詳細については、Serverless Functions のセキュリティに関する記事をご覧ください。

デプロイ

サーバーレス Functions アプリケーションを運用で使用するように準備するには、次を実行できることを確認してください。

  • アプリケーションのリソース要件を満たす。
  • アプリケーションのすべての側面を監視する。
  • アプリケーションに関する問題を診断してトラブルシューティングする。
  • 運用システムに影響を与えることなく、アプリケーションの新しいバージョンをデプロイする。

デプロイ テクノロジを定義する

デプロイ テクノロジを決定し、スケジュールされたリリースを整理します。 Functions アプリのデプロイによって信頼性の高い、ダウンタイムがゼロのアップグレードを実現する方法の詳細については、「Azure Functions のデプロイ テクノロジ」を参照してください。

使用するリソース接続の数が多くなり過ぎないようにする

Functions アプリ内の関数は、HTTPS、データベース、およびサービス (Azure Storage など) への接続を含むリソースを共有します。 多くの関数が同時に実行されている場合、利用可能な接続が不足する可能性があります。 詳細については、「Azure Functions での接続の管理」を参照してください。

ログ記録、アラート、およびアプリケーションの監視を構成する

Azure Monitor の Application Insights を使用すると、ログ、パフォーマンス、およびエラーのデータを収集できます。 Application Insights は、パフォーマンスの異常を自動的に検出するほか、問題の診断や、関数の使用状況の理解に役立つ強力な分析ツールを備えています。

アプリケーションの監視とログ記録の詳細については、次を参照してください。

問題の診断とトラブルシューティング

プロアクティブで問題優先のシナリオでのトラブルシューティングに、診断を効果的に使用する方法について説明します。 詳細については、次を参照してください。

自動化されたパイプラインと DevOps を使用してアプリケーションをデプロイする

コードのコミットから運用環境へのデプロイまでのすべての手順を完全に自動化することにより、チームはコードの構築に専念でき、手作業の手順で生じるオーバーヘッドや潜在的な人的エラーをなくすことができます。 新しいコードのデプロイはより迅速で低リスクになるため、チームは機敏性と生産性を向上させ、コードについて自信を深めることができます。

DevOps と継続的配置 (CD) の詳細については、次を参照してください。

Optimization

アプリケーションの運用を開始したら、スケーリングの準備をし、サイト信頼性エンジニアリング (SRE) を実装します。

最適なスケーラビリティを確保する

Functions アプリのスケーラビリティに影響する要因については、次を参照してください。

SRE プラクティスを実装する

サイト信頼性エンジニアリング (SRE) は、マーケットプレースで要求される速度で反復を行う一方で、重要なシステムとアプリケーションの信頼性を維持できる実証済みの手法です。 詳細については、次を参照してください。

次のステップ

サーバーレスな Functions アプリの開発とデプロイに関する実践的なチュートリアルについては、次を参照してください。

チームとお客様がサーバーレスな Functions プロジェクトを正常に実装できるようにするためのエンジニアリング プレイブックについては、コードに関するお客様またはパートナー向けエンジニアリング プレイブックを参照してください。