はじめに
Azure FunctionsからプライベートエンドポイントのCosmos DBに接続していきます
開発環境
- Windows 10 PC
- Azure
導入
仮想ネットワークの作成
1.仮想ネットワークの作成
Azure Functionsに合わせて、リージョンは East Asia にしています。
Cosmos DBの作成
2.インスタンスの詳細を設定
Azure Functionsに合わせて、リージョンは East Asia にしています。
8.仮想ネットワークで、Cosmos DB用のサブネットを選択
関数アプリの作成
3.East Asia、Node.js(20 LTS)で作成
4.Cursorで Create Function Project -> s-fujimoto-241224 Functionsのソースコード用のフォルダを選択
9.最初のプログラム(httpTrigger1.ts)
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || await request.text() || 'world';
return { body: `Hello, ${name}!` };
};
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: httpTrigger1
});
10.Start debugging to update this list... をクリックしデバッグ開始
11.http://localhost:7071/api/httpTrigger1 にアクセスしてテスト
関数アプリの仮想ネットワーク統合
1.ネットワーク -> 送信トラフィックの構成 -> 仮想ネットワーク統合 「未構成」をクリック
CosmosDBからデータを取得するだけの関数アプリ
1.httpTrigger1.tsを編集
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
import { CosmosClient } from "@azure/cosmos";
const endpoint = process.env.COSMOS_ENDPOINT || "";
const key = process.env.COSMOS_KEY || "";
const databaseId = process.env.COSMOS_DATABASE_ID || "ToDoList";
const containerId = process.env.COSMOS_CONTAINER_ID || "Items";
const client = new CosmosClient({ endpoint, key });
const container = client.database(databaseId).container(containerId);
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
if (!endpoint || !key) {
context.log(`[ERROR] CosmosDB connection information is not properly configured`);
return {
status: 500,
body: "Server configuration error"
};
}
try {
const { resources: items } = await container.items.readAll().fetchAll();
context.log(`Retrieved ${items.length} items from CosmosDB`);
return {
status: 200,
jsonBody: items
};
} catch (error) {
context.log(`[ERROR] Error fetching items from CosmosDB: ${error}`);
return {
status: 500,
body: "Error fetching items from CosmosDB"
};
}
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
handler: httpTrigger1
});
2.ライブラリのインストール
npm install @azure/cosmos
package.jsonはこのような形になります
3.local.settings.json を編集し、キーとエンドポイントをコピペ
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "node",
"COSMOS_ENDPOINT": "https://xxxx.documents.azure.com:443/",
"COSMOS_KEY": "<INSERT-YOUR-COSMOS-KEY>",
"COSMOS_DATABASE_ID": "ToDoList",
"COSMOS_CONTAINER_ID": "Items"
}
}
お疲れ様でした