概要
最近Azureを触ることが多いのですが、そのたびに「Cosmos DB押し」をよく聞くのでちょっと触ってみることにしました。無償枠もあるようですので、気軽に試せます。
devblogs.microsoft.com
右も左も分からないので、まずは簡単なチュートリアルに沿って作業を進めます。下記のQiitaの記事を参考にしました。
qiita.com
その後は、作成したItems
コンテナに対してnode.jsアプリからアクセスしてみることにします。以下のドキュメントを参考にしました。
docs.microsoft.com
プロジェクト生成
任意の空ディレクトリにて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)
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の使用
- SELECT文のFROMには何を指定してもいい。
- サンプルには
c
と指定してあり、???だったのですが、何を指定しても良いようです。
あまり分かっていないのでこれからの課題です。
プログラムの実行
最後に実行です。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
node.jsからアクセスする際のSDKについては以下を参照すれば良さそうです。
docs.microsoft.com
github.com