Share via


Azure Functions を使用して Node.js サーバーレス ソリューションを開発する

Azure Functions が提供するサーバーレス コードのインフラストラクチャにより、応答性の高いオンデマンドの HTTP エンドポイントを作成できます。 サーバーレス アプリは、さまざまなイベントに反応して実行される、JavaScript または TypeScript のコードで構成されています。

Functions を使用すると、以下が可能になります。

  • Web サービスの抽象化 - インフラストラクチャではなく、コードに集中できます。

  • Azure サービスとの統合 - イベントを使用して、Azure サービスとの間での動作をトリガーします。

  • JavaScript パッケージとの統合 - サーバーレス コードと共に、npm パッケージを使用できます。

  • サンプル のAzure Serverless Community Library

関数リソースとは

Azure の関数リソースとは、1 つの Azure の地理的な場所にあるすべての関連する関数の論理単位です。 リソースには、1 つまたは複数の関数を含めることができます。これらは、互いに独立している場合もあれば、入力や出力のバインディングと関連付けられる場合もあります。 多くの一般的な関数から選択することも、独自に作成することもできます。

関数リソースの設定には、環境変数、認証、ログ、CORS など、一般的なサーバーレス構成が含まれます。

永続的なステートフル関数

Durable Functions では "状態" が保持されます。つまり、Azure で長時間実行される関数を管理することができます。 JavaScript で最初の Durable Functions を作成する

静的 Web アプリに関数を含める

サーバーレス API も必要とする静的なフロントエンド クライアント アプリケーション (Angular、React、Vue など) を開発する場合は静的 Web アプリを関数と共に使用して、両方をまとめてバンドルします。

クライアント アプリから API へのプロキシ

静的 Web アプリで API をデプロイする場合は、クライアント アプリケーションの API 呼び出しをプロキシする必要はありません。 ローカルおよびリモートの開発を含め、プロキシは自動的に確立されます。

静的 Web アプリと Azure Functions を使用してローカルで開発する場合は、Azure Static Web App CLI によってローカル プロキシが提供されます。

Azure 関数用に構成する必要がある一般的なセキュリティ設定

Azure 関数がセキュリティで保護された状態を維持するために、次の一般的な設定を構成する必要があります。

  • 構成設定
    • 構成設定 - アプリケーション設定の、セキュリティに影響しない部分の設定を作成します。
    • シークレットとキー - セキュリティに影響する部分の設定については、Azure Key Vault を作成し、その設定を Key Vault からプルします。
    • プラットフォーム設定での FTP の状態 - 既定では、すべて許可されます。 セキュリティを強化するには、[FTPS のみ] を選択するか、FTP をすべて無効にする必要があります。
  • API CORS - クライアント ドメインを構成します。 * を使用しないでください。これは、すべてのドメインを意味します。
  • HTTPS の TLS/SSL 設定 - 既定では、API は HTTP および HTTPS の要求を受け入れます。 [TLS または SSL の設定][HTTPS のみ] を有効にしてください。 Function App は安全なサブドメインでホストされており、(https で) すぐに使用できるため、準備が整うまでドメイン名の購入やドメインの証明書の使用を遅らせることができます。
  • デプロイ スロット - stagepreflight などのデプロイ スロットを作成し、そのスロットにプッシュします。 準備ができたら、このステージ スロットを実稼働環境に差し替えます。 手動で実稼働環境にプッシュすることを習慣化しないでください。 コード ベースは、スロット上にあるバージョンを示唆またはコミットできる必要があります。

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 サービスを調整および制御します。

次のステップ

Node.js による Azure Functions の開発について学習を進めるには、次の表を使用してください。

学習内容 サンプル
Contoso Real Estate について Contoso Real Estate
Azure Functions を使用してサーバーレス API をビルドする MicrosoftDocs/mslearn-build-api-azure-functions
Node.js Express API をサーバーレス Azure Functions API にリファクタリングする MicrosoftDocs/mslearn-module-shifting-nodejs-express-apis-to-serverless
Azure Functions と Blob Storage を使用してファイルをアップロードして分析する Azure-Samples/msdocs-storage-bind-function-service