AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

チュートリアル: MongoDBでAzure Functions を使用

このチュートリアルでは、 MongoDB Node.jsドライバーを使用して、 MongoDB AtlasからのデータをクエリするHTTPトリガーのAzure Function を作成します。また、サーバーレス コンテキストでデータベース接続を管理し、関数をAzureクラウドに配置する方法も学習します。

始める前に、以下の手順を完了してください。

  • MongoDB Atlasクラスターを配置し、ネットワークアクセスとデータベースユーザーを構成して、サンプルデータセットをロードします。その方法については、 MongoDB の使用開始 ガイドを参照してください。

  • Azure CLI をインストールして構成します。

  • Azure Functions Core Tools をインストールして構成します。

  • Node.jsバージョン 18 以降をインストールします。

このチュートリアルでは、次の手順についてガイドします。

  • Azureクラウドリソースを作成します。

  • ローカルプロジェクトを初期化します。

  • MongoDB Node.js ドライバーをインストールします。

  • sample_mflixデータベースへのデータベース接続を構成します。

  • sample_mflix.moviesコレクションをクエリし、映画を表すドキュメントを検索する関数を記述します。

  • 関数をローカルでテストします。

  • Azureにデプロイします。

1

次のコマンドを実行してリソースグループを作成し、<GROUP_NAME> をグループ名に、<AZURE_REGION> をサポートされているAzureリージョンに置き換えます。

az group create \ --name <GROUP_NAME> \ --location <AZURE_REGION>

オプションとして、 Azure を初めて使用している場合は、次のコマンドを実行して Functionsリソースプロバイダーを登録する必要があります。

az provider register --namespace Microsoft.Storageaz provider register --namespace Microsoft.Web

次に、次のコマンドを実行してストレージアカウントを作成します。前のコードと同じリージョンとグループ名を使用し、ストレージアカウントに一意の名前を指定して、<STORAGE_NAME> プレースホルダーをこの一意の名前に置き換えます。

az storage account create \ --name <STORAGE_NAME> \ --location <AZURE_REGION> \ --resource-group <GROUP_NAME> \ --sku Standard_LRS

最後に、次のコマンドを実行して関数アプリを作成します。

az functionapp create \ --resource-group <GROUP_NAME> \ --consumption-plan-location <AZURE_REGION> \ --runtime node \ --functions-version 4 \ --name <APP_NAME> \ --storage-account <STORAGE_NAME>
2

次のコマンドを実行して、ローカル 関数プロジェクト を初期化します。

func init MongoExample

プロンプトが表示されたら、ワーカー ランタイムとして node を選択し、言語として javascript を選択します。

次のコマンドを実行してプロジェクトディレクトリに移動し、新しいHTTPトリガー関数を作成します。

cd MongoExamplefunc new --name GetMovies --template "HTTP trigger"

コマンドは src/functions/GetMovies.jsファイルを作成し、後の手順で編集します。

ローカルプロジェクトをAzure Functionアプリにリンクするには、プロジェクトディレクトリから次のコマンドを実行します。

func azure functionapp fetch-app-settings <APP_NAME>

このコマンドは、ストレージアカウントの構成を含むすべてのアプリケーション設定をAzureからダウンロードし、プロジェクトの local.settings.jsonファイルに入力します。

3

プロジェクトのルート から、次のコマンドを実行してMongoDB Node.jsドライバーをインストールします。

npm install mongodb

このコマンドはドライバーをプロジェクトに追加し、package.json に記録し、配置時にドライバーを使用できるようにします。

4

src/functions/GetMovies.js を開き、その内容を次のコードで置き換えます。

GetMovies.js

const { app } = require("@azure/functions");const { MongoClient } = require("mongodb"); const mongoClient = new MongoClient( process.env.MONGODB_ATLAS_URI); app.http("GetMovies", { methods: ["GET"], authLevel: "anonymous", handler: async (request, context) => { // Query logic added in the next step }});

Tip

呼び出し全体で既存の接続を再利用するには、ハンドラー関数の外部で mongoClient を定義します。ハンドラー内で新しい接続を作成すると、呼び出しごとに新しい接続が開かれ、データベースがサポートする同時接続の最大数が枯渇するリスクがあります。クライアントをモジュール レベルで定義すると、接続数はトラフィックに比例して維持されます。

Node.jsのバージョンによっては、 MongoDBに接続しようとすると DNS 解決に関連するエラーが発生する場合があります。この問題が発生した場合は、MongoClientインスタンスを作成する前に、次のコードを src/functions/GetMovies.jsファイルに追加してください。

GetMovies.js

const { app } = require("@azure/functions");const { MongoClient } = require("mongodb"); // Forces DNS servers explicitly before connecting to MongoDBrequire("node:dns/promises").setServers(["1.1.1.1", "8.8.8.8"]); const mongoClient = new MongoClient( process.env.MONGODB_ATLAS_URI); app.http("GetMovies", { methods: ["GET"], authLevel: "anonymous", handler: async (request, context) => { // Query logic added in the next step }});

local.settings.json を開き、Valuesオブジェクトに次のフィールドを追加し、各プレースホルダーを実際の値に置き換えます。

{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "<storage-connection-string>", "FUNCTIONS_WORKER_RUNTIME": "node", "MONGODB_ATLAS_URI": "<atlas-connection-string>", "MONGODB_ATLAS_DATABASE": "sample_mflix", "MONGODB_ATLAS_COLLECTION": "movies" }, "ConnectionStrings": {}}

MongoDB Atlas接続文字列を取得するには、Atlas ダッシュボードに移動し、クラスターを選択して、Connect をクリックします。Azureストレージ接続文字列を取得する方法については、 Azureドキュメントの接続文字列の構成を参照してください。

5

src/functions/GetMovies.js で、ハンドラー内の // Query logic added in the next step のコメントを次のコードで置き換えます。

try { const database = mongoClient.db( process.env.MONGODB_ATLAS_DATABASE ); const collection = database.collection( process.env.MONGODB_ATLAS_COLLECTION ); const results = await collection .find({}) .limit(10) .toArray(); return { jsonBody: results }; } catch (error) { return { status: 500, jsonBody: { message: "Internal server error." } }; }

関数はリクエストを受け取ると、環境変数で指定されたデータベースとコレクションに接続し、最大 10 ドキュメントを返します。エラーが発生した場合、関数はエラー メッセージを含む 500 レスポンスを返します。

6

プロジェクトのルート から、次のコマンドを実行して関数を開始します。

func start

サーバーを起動すると、CLI には関数のローカルURLが表示されます。ブラウザで http://localhost:7071/api/GetMovies に移動するか、cURL や Postman などのツールを使用してリクエストを送信します。

注意

サーバーが起動してもデータを取得できない場合は、ローカルIPアドレスが Atlas ネットワーク アクセス リストに含まれていることを確認してください。本番用に構成したAzureデータセンターのIPルールは、ローカルでテストする場合は適用されません。詳細については、 IPアクセス リスト エントリの設定 を参照してください。

7

Azureで次のコマンドを実行中して環境変数を設定し、各プレースホルダーを実際の値に置き換えます。

az functionapp config appsettings set \ --name <APP_NAME> \ --resource-group <GROUP_NAME> \ --settings MONGODB_ATLAS_URI=<atlas-connection-string> az functionapp config appsettings set \ --name <APP_NAME> \ --resource-group <GROUP_NAME> \ --settings MONGODB_ATLAS_DATABASE=sample_mflix az functionapp config appsettings set \ --name <APP_NAME> \ --resource-group <GROUP_NAME> \ --settings MONGODB_ATLAS_COLLECTION=movies

次のコマンドを実行中して関数を配置します。

func azure functionapp publish <APP_NAME>

配置が完了すると、CLI に関数の公開URLが表示されます。この関数は authLevel: "anonymous" を使用するため、キーなしでアクセスできます。

注意

本番環境では、authLevel を "function" または "admin" に変更し、適切なキーを承認されたクライアントに配布することを検討してください。詳細については、Azure Functions のドキュメント「アクセス キーの操作」を参照してください。

このチュートリアルで説明されている概念をさらに学ぶには、次のリソースを参照してください。