Azure Functions を使用したサーバーレス Node.js アプリの開発
Azure Functions には強力なサーバーレス インフラストラクチャが用意されており、スケーラブルなオンデマンド HTTP エンドポイントを簡単に開発できます。 JavaScript または TypeScript を使用すると、さまざまなイベントに応答するサーバーレス アプリケーションを作成できるため、サーバーの管理を気にせずにコードの記述に集中できます。 このガイドは、Azure Functions を使用してサーバーレス Node.js アプリを開発し、他の Azure サービスとシームレスに統合する方法を説明します。
関数リソースとは
Azure の関数リソースとは、1 つの Azure の地理的な場所にあるすべての関連する関数の論理単位です。 リソースには、1 つまたは複数の関数を含めることができます。これらは、互いに独立している場合もあれば、入力や出力のバインディングと関連付けられる場合もあります。 多くの一般的な関数から選択することも、独自に作成することもできます。
関数リソースの設定には、環境変数、認証、ログ、CORS など、一般的なサーバーレス構成が含まれます。
永続的なステートフル関数
Durable Functions では "状態" が保持されます。つまり、Azure で長時間実行される関数を管理することができます。 JavaScript で最初の Durable Functions を作成する。
静的 Web アプリに関数を含める
サーバーレス API も必要な静的フロントエンド クライアント アプリケーション (Angular、React、Vue など) を開発する場合は、Static Web アプリ 関数を使用して両方をバンドルします。
クライアント アプリから API へのプロキシ
静的 Web アプリで API をデプロイする場合は、クライアント アプリケーションの API 呼び出しをプロキシする必要はありません。 Azure Functions アプリをマネージド アプリとしてデプロイすると、プロキシが確立されます。
静的 Web アプリと Azure Functions を使用してローカルで開発する場合、Azure Static Web App CLI によってローカル プロキシが提供されます。
Azure 関数用に構成する必要がある一般的なセキュリティ設定
Azure 関数がセキュリティで保護された状態を維持するために、次の一般的な設定を構成する必要があります。
- 構成設定
- 構成設定 - アプリケーション設定の、セキュリティに影響しない部分の設定を作成します。
- シークレットとキー - セキュリティに影響する部分の設定については、Azure Key Vault を作成し、その設定を Key Vault からプルします。
- プラットフォーム設定での FTP の状態 - 既定では、すべて許可されます。 セキュリティを強化するには、[FTPS のみ] を選択するか、FTP をすべて無効にする必要があります。
- CORS - クライアント ドメインを構成します。
*
を使用しないでください。これは、すべてのドメインを意味します。 - HTTPS の TLS/SSL 設定 - 既定では、API は HTTP および HTTPS の要求を受け入れます。 [TLS または SSL の設定] の [HTTPS のみ] を有効にしてください。 Function App は安全なサブドメインでホストされており、(
https
で) すぐに使用できるため、準備が整うまでドメイン名の購入やドメインの証明書の使用を遅らせることができます。 - デプロイ スロット -
stage
やpreflight
などのデプロイ スロットを作成し、そのスロットにプッシュします。 準備ができたら、このステージ スロットを実稼働環境に差し替えます。 手動で実稼働環境にプッシュすることを習慣化しないでください。 コード ベースは、スロット上にあるバージョンを示唆またはコミットできる必要があります。
Azure Functions を開発するための前提条件
HTTP 要求の単純な JavaScript 関数
関数は、要求およびコンテキスト情報を含むエクスポートされた非同期関数です。 次の Azure portal の部分的なスクリーンショットに、関数コードを示します。
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
});
Visual Studio Code と拡張機能を使用してローカルで関数を開発する
Visual Studio Code を使用して初めての関数を作成します。 Visual Studio Code では、Azure Functions 拡張機能を使用して、詳細の多くが簡略化されます。
この拡張機能により、一般的なテンプレートを使用して JavaScript および TypeScript の関数を作成することができます。
他の Azure サービスとの統合。
サーバーレス関数を使用すると、サーバーの構成と管理の多くが不要になるため、必要なコードのみに集中できるようになります。
- 低コード関数: Azure Functions では、他の Azure サービスによってトリガーされる関数、または他の Azure サービスに出力される関数を、トリガー バインド使用して作成します。
- ハイコード関数: より詳細な制御を行うには、Azure SDK を使用して、他の Azure サービスを調整および制御します。