Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

チュートリアル: 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.Storage
az 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 MongoExample
func 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 MongoDB
require("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>
Deployment successful.
Remote build succeeded!
Syncing triggers...
Functions in <APP_NAME>:
GetMovies - [httpTrigger]
Invoke url: https://<APP_NAME>.azurewebsites.net/api/getmovies

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

注意

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

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

戻る

Vercel にアプリケーションを配置

項目一覧