Azure Functionsを使用して、HTTP API とイベントドリブン Node.js アプリをビルドして実行します。 次に、この記事の残りの部分を使用して、アプリに適したサーバーレス ホスティングと統合パスを選択します。
関数アプリ リソースとは
関数アプリは、特定の地理的な場所にある単一のAzure リソースに関数コードをデプロイして実行するための論理ユニットです。 リソースには、1 つの関数または複数の関数を含めることができます。この関数は互いに独立して実行されますが、同じコンピューティング リソース、接続性、設定を共有します。 Functions には、すぐに使い始めるのに役立つ、さまざまなトリガーベースのテンプレートが用意されています。 コードや、その他の出力バインドや入力バインドを追加できます。
関数アプリのリソース設定には、環境変数、認証、ログ記録、CORS などの一般的なサーバーレス構成が含まれます。
デュラブル ステートフル関数
Azureでの関数の実行は本質的にステートレスですが、Durable Functions状態を保持し、Azureで実行時間の長い関数を管理します。 1 つの要求を上回るオーケストレーション、再試行、またはマルチステップ ワークフローが必要な場合に使用します。 開始するには、「 JavaScript で最初の非消耗品関数を作成する」を参照してください。
静的 Web アプリに関数を含める
サーバーレス API も必要な静的フロントエンド クライアント アプリケーション (Angular、React、Vue など) を開発する場合は、Static Web アプリ 関数を使用して両方をバンドルします。
クライアント アプリから API へのプロキシ
静的 Web アプリを使用して API をデプロイする場合は、クライアント アプリケーションの API 呼び出しをプロキシする必要はありません。 関数アプリをマネージド アプリとしてデプロイすると、プロキシが確立されます。
Azure Functionsを使用して静的 Web アプリをローカルで開発すると、Azure Static Web Apps CLI によってローカル プロキシが提供されます。
Azure 関数用に構成する必要がある一般的なセキュリティ設定
Azure 関数がセキュリティで保護された状態を維持するために、次の一般的な設定を構成する必要があります。
-
認証と承認:
- 堅牢な認証には 、Microsoft Entra ID (旧称 Azure Active Directory) を使用します。 運用ワークロードに OAuth2 トークンを要求するように関数アプリを構成します。
- 機密性の高いアプリケーションにはファンクション キーを使用しないでください。 代わりに、Microsoft Entra ID と統合するか、関数コードで JWT トークンを検証します。
- マネージド ID を使用して、他の Azure リソースで関数アプリを認証し、各関数が必要なアクセスのみを取得できるようにします。
-
構成設定:
- アプリケーション設定 - セキュリティに影響しない設定のアプリケーション設定を作成します。
- シークレットとキー - セキュリティに影響を与える設定には、次の階層化されたアプローチを使用します。
- まず、サポートされている場合は、 認証に Microsoft Entra ID を 使用します。
- Entra ID をサポートしていない統合の場合は、 Azure Key Vault にシークレットを格納し、 Key Vault からそれらの設定をプルします。
- コードまたは構成ファイルにシークレットを埋め込むことはありません。
- その他のプラットフォームのセキュリティ設定については、「 Azure Functions のセキュリティ保護」を参照してください。
-
ネットワーク セキュリティ:
- CORS - クライアント ドメインを構成します。
*を使用しないでください。これは、すべてのドメインを意味します。 - 仮想ネットワーク統合 - プライベート エンドポイントまたは仮想ネットワーク統合を使用して、ネットワークの露出を制限し、信頼できるソースからの受信トラフィックを制限します。
- CORS - クライアント ドメインを構成します。
-
HTTPS と暗号化:
- HTTPS の TLS/SSL 設定 - 既定では、API は HTTP および HTTPS の要求を受け入れます。
[TLS または SSL の設定] の [HTTPS のみ] を有効にしてください。 関数アプリはセキュリティで保護されたサブドメイン (
*.azurewebsites.net) でホストされているため、すぐに (httpsで) 使用し、ドメイン名の購入を遅らせ、準備ができるまでドメインの証明書を使用できます。
- HTTPS の TLS/SSL 設定 - 既定では、API は HTTP および HTTPS の要求を受け入れます。
[TLS または SSL の設定] の [HTTPS のみ] を有効にしてください。 関数アプリはセキュリティで保護されたサブドメイン (
-
デプロイと監視:
- デプロイ スロット -
stageやpreflightなどのデプロイ スロットを作成し、そのスロットにプッシュします。 準備ができたら、このステージ スロットを実稼働環境に差し替えます。 手動で実稼働環境にプッシュすることを習慣化しないでください。 コード ベースは、スロット上にあるバージョンを示唆またはコミットできる必要があります。 Flex Consumption を使用している場合は、スロットではなく ゼロ ダウンタイム デプロイ を使用してください。 - Application Insights でリアルタイムのテレメトリ、アラート、異常検出を有効にして、関数と監査ログで疑わしいアクティビティを監視します。
- デプロイ スロット -
包括的なセキュリティ ガイダンスについては、 Azure Functions のセキュリティ保護に関するページを参照してください。
Azure Functionsのホスト オプション
Azure Functions は、要件に応じてさまざまな方法でホストできます。
Azure Functions リソース ホスティング プラン
関数アプリ リソースを作成するときは、次の Functions ホスティング プランから選択します。
- 従量課金プラン (レガシ): 関数が自動スケーリングで実行される時間に対してのみ支払います。
- Flex 従量課金プラン: コールド スタート、仮想ネットワーク統合、および構成可能なインスタンス サイズ (512 MB から 4 GB) を削減するために、常時対応のインスタンスを強化した制御を提供します。 このプランは、エンタープライズセキュリティとパフォーマンス機能を必要とする新しい Linux ベースのワークロードに推奨されます。 このプランでは、従量課金プランと同様の実行ベースの課金が使用されますが、Always-Ready インスタンスなどの機能の追加コストが発生します。
- Premium プラン: 事前ウォームされたインスタンス、仮想ネットワーク接続、長時間のプロセス実行可能な向上したパフォーマンスを提供します。
- 専用 (App Service) プラン: 予測可能なコストとランタイム環境を完全に制御するために、専用の仮想マシンで関数を実行します。
適切なホスティング プランの選択の詳細については、 Azure Functions のホスティング オプションに関するページを参照してください。
Azure Container Apps リソース
または、コンテナー化されたワークロードとして Azure Container Apps リソースに Azure Functions をデプロイすることもできます。 このオプションでは、コンテナー環境を完全に制御でき、カスタム依存関係、実行時間の長いプロセス、または他のコンテナー化されたマイクロサービスと関数を組み合わせる必要がある場合に最適です。 詳細については、Azure Container Appsの概要に関するAzure Functionsを参照してください。
Azure Functions を開発するための前提条件
- Node.js LTS - 最新の長期サポート (LTS) バージョンを使用して、Azure Functions との最適な互換性とセキュリティ更新プログラムを提供します。
- Azure Functions Core Tools - ローカル開発とデバッグに現在のメジャー バージョンを使用します。
HTTP 要求の単純な JavaScript 関数
関数は、要求およびコンテキスト情報を含むエクスポートされた非同期関数です。 次の Azure portal の部分的なスクリーンショットに、関数コードを示します。
関数プロジェクトの開始点として、次の v4 プログラミング モデルの例のいずれかを使用します。
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function status(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
return {
status: 200,
jsonBody: {
env: process.env
}
};
};
app.http('status', {
route: "status",
methods: ['GET'],
authLevel: 'anonymous',
handler: status
});
アプリが起動したら、 http://localhost:7071/api/status を参照してエンドポイントをローカルでテストします。
Visual Studio Code と拡張機能を使用してローカルで関数を開発する
Visual Studio Code を使用して初めての関数を作成します。 Visual Studio Code では、 Azure Functions 拡張機能を使用して多くの詳細が簡略化されます。
この拡張機能により、一般的なテンプレートを使用して JavaScript および TypeScript の関数を作成することができます。
他の Azure サービスとの統合。
サーバーレス関数を使用すると、サーバーの構成と管理の多くが不要になるため、必要なコードのみに集中できるようになります。
- 低コード関数: Azure Functions では、他の Azure サービスによってトリガーされる関数、または トリガー バインドを使用して他の Azure サービスに出力される関数を作成します。 v4 プログラミング モデルでは、すべてのトリガーとバインドがコードに直接登録されるため、構成の種類が安全で直感的になります。
- 高コード関数: より詳細な制御を行うには、Azure SDK を使用して他の Azure サービスを調整および制御します。 マネージド ID を使用して、資格情報を管理することなく、他の Azure リソースで関数を安全に認証します。
次のステップ
- Visual Studio Codeを使用して、最初の HTTP トリガー関数を作成してデプロイします。
- デプロイする前に、Azure Functions のホスティング オプションを比較してください。
- Durable Functions for JavaScript を使用してワークフローを構築します。
- 運用リソースに接続する前に、Azure Functionsのセキュリティ保護を確認してください。