概要
最近Azureを触ることが多いのですが、そのたびに「Cosmos DB押し」をよく聞くのでちょっと触ってみることにしました。無償枠もあるようですので、気軽に試せます。
右も左も分からないので、まずは簡単なチュートリアルに沿って作業を進めます。下記のQiitaの記事を参考にしました。
その後は、作成したItems
コンテナに対してnode.jsアプリからアクセスしてみることにします。以下のドキュメントを参考にしました。
プロジェクト生成
任意の空ディレクトリにてyarn init
を実行してプロジェクトを生成します。その後、yarn add @azure/cosmos
を実行して必要なライブラリをインストールします。
設定ファイルの用意
config.js
というファイルを作成して接続先やデータベース名やコンテナ名を記述します。参考にしたドキュメントではプライマリーキーも記していましたが、それはあまり行儀が良くないので今回は環境変数で設定することにします。
const config = { endpoint: "エントリーポイント", databaseId: "ToDoList", containerId: "Items", } module.exports = config
環境変数の設定
config.js
にて設定しなかったプライマリーキーを環境変数COSMOSDB_KEY
に設定するようにします。単純にLinux/macOSであれば、
export COSMOSDB_KEY=プライマリーキー
を実行するだけです。
プログラムの実装
Cosmos DBに対して参照・追加・更新・削除を行うプログラムapp.js
を実装します。こんな感じの実装となりました。
const CosmosClient = require("@azure/cosmos").CosmosClient const config = require("./config") const newItem = { id: "3", category: "fun", name: "Cosmos DB", description: "Complete Cosmos DB Node.js Quickstart ⚡", isComplete: false } async function main() { const { endpoint, databaseId, containerId } = config let key = null try { if (process.env.COSMOSDB_KEY) { key = process.env.COSMOSDB_KEY } else { throw new Error('環境変数COSMOSDB_KEYが設定されていません') } } catch (error) { console.log(error.message) return } const client = new CosmosClient({ endpoint, key }) const database = client.database(databaseId) const container = database.container(containerId) // SELECTを発行してデータを表示する const { resources: items } = await container.items.query('SELECT * FROM c').fetchAll() items.forEach(item => { console.log(`${item.id} - ${item.description}`) }) // 新しいアイテムを追加する const { resource: createdItem } = await container.items.create(newItem) console.log(`\r\nCreated new item: ${createdItem.id} - ${createdItem.description}\r\n`) // 追加したアイテムに対して更新処理を実施する const { id } = createdItem createdItem.isComplete = true const { resource: updatedItem } = await container.item(id).replace(createdItem) console.log(`Updated item: ${updatedItem.id} - ${updatedItem.description}`) console.log(`Updated isComplete to ${updatedItem.isComplete}\r\n`) // データ削除する const { resource: result } = await container.item(id).delete() console.log(`Deleted item with id: ${id}`) } main()
ポイントは以下のとおりです。
- async/awaitの使用
- 正直良く分かっていませんが、いい感じに処理待ちをする。
- see. https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function
- SELECT文のFROMには何を指定してもいい。
あまり分かっていないのでこれからの課題です。
プログラムの実行
最後に実行です。node
コマンドで作成したapp.js
を実行させます。
$ node app.js 1 - id = 1 2 - This item is second. Created new item: 3 - Complete Cosmos DB Node.js Quickstart ⚡ Updated item: 3 - Complete Cosmos DB Node.js Quickstart ⚡ Updated isComplete to true Deleted item with id: 3
SQL API SDKについて
node.jsからアクセスする際のSDKについては以下を参照すれば良さそうです。