それでは、Azure Cosmos DBでリソースを作成してみましょう。
最後の「削除」まで行わないと、ずっと課金されてしまう可能性があるので注意して下さいね!
はい。
まずは分かるところまでやってみます。
まずは、Azureのポータルサイトにアクセスですよね。
https://portal.azure.com/
そうしたら、
ホーム>Azure Cosmos DB
へ移動してと・・・。
そうです。そうしたら、
「+作成」とか「+リソースの作成」を押してください。
そうしたら、何個かAPIを選べるようになっていると思います。
一番基本的な「コア (SQL) – 推奨」を選択してください。
サブスクリプションはしようするサブスクリプションを選んでください。
そうしたら、リソースグループで「新規作成」を押してください。
今回、名前は「az20230430-cosmos-rg」と入力してOKを押してください。
次にアカウント名を入力してみましょう。
アカウント名と言ってもデータベースの名前と思ってください。
今回はアカウント名を「20230430-test-db」にしてみましょう。
ちなみに名前に含めることができるのは、英小文字、数字、ハイフン (-) のみです。 長さは 3文字以上44文字以内にして下さい。
今回、場所は「(Asia Pacific)Japan East」を選んでみましょう。
容量モードは「プロビジョニングされたスループット」と「Serverless(サーバーレスモード)」の2つがありますね。
「プロビジョニングされたスループット」は、予測可能なパフォーマンスが必要なワークロードに適しており、設定した要求ユニット(RU)数に応じて毎秒データベース操作が可能です。
一方、「サーバーレスモード」は、断続的または予測不可能なトラフィックに適しており、容量を事前に設定する必要がありません。
だしか、金額が違うんでしたよね?それぞれの課金モデルはどうなっていますか?
はい、その通りです。
「プロビジョニングされたスループット」では、設定したRU/秒に対して1時間ごとに課金されます。
一方、「サーバーレスモード」では、データベース操作で消費されるRUの量に対して時間単位で課金されます。
どっちを選んでいいのか判断が出来ませぬ。
どのモードを選ぶべきか判断する方法はありますか?
まず、ワークロードの特性を考慮し、予想される消費量を見積もってください。例えば、ワークロードが最大500RU/秒でバーストし、1か月間で合計20,000,000RUを消費する場合、「プロビジョニングされたスループットモード」と「サーバーレスモード」のコストを比較して選択します。
数字が大きすぎてビビってます。お高いのでしょうか・・・???
例えば、「プロビジョニングされたスループットモード」で500RU/秒を設定した場合、月額料金は$29.20になります。
一方、「サーバーレスモード」では、消費されるRUに対する料金は$5.00になります。
この場合、「サーバーレスモード」の方がコストが低くなります。
おぉ~!意外にも庶民的な価格で、逆に驚いております。
はい。しかし、あくまでこれは例ですので、無駄に使い過ぎないように常に注意しましょう。
「サーバーレスモード」の方が安いんですか?
そうとは限りません。
別の例を示しましょう。ワークロードが最大500RU/秒でバーストし、1か月間で合計250,000,000RUを消費する場合、「プロビジョニングされたスループットモード」で月額料金は$29.20になります。
一方、「サーバーレスモード」では、消費されるRUに対する料金は$62.50になります。
この場合、「プロビジョニングされたスループットモード」の方がコストが低くなります。
なるほど、ワークロードの特性と予想される消費量を考慮して選ぶんですね。
どちらが安いのかは一概に言えないのですね。ありがとうございます!
そうです。ワークロードの特性やコストを考慮して、適切なモードを選択することが大切です。どちらのモードも、データベース操作は同じように実行できますが、課金方法が異なるので注意してください。
そうしたら「レビュー+作成」を選択してください。
エラーが出た場合は、指示に従ってエラーを修正してください。
なお、「バックアップ ポリシー」などでバックアップ設定もできますが、ここではその説明はしません。
問題がなければ最後に「作成」を選んでください。
作成には数分かかりますのでお茶を飲んで待ちましょう。
はい、私はコーラを飲んで待ちます。
「デプロイが進行中です」 ⇒ <数分経過> ⇒ 「デプロイが完了しました」
大先生、デプロイが完了したようです!
それでは、「リソースに移動」を押してください。
次に、左側のメニューから「データエクスプローラー」を選択して、「コンテナーの追加(New Container)」を押してください。
「Database id」「Container id」「Partition key」の3つを設定します。
今回は試しに「ToDoList」を作成してみましょう!
ほほぅ。いよいよアプリっぽくなってきましたね。
「Database id」 「ToDoList」と入力します。(新規作成 Create New を選択)
「Container id」 「Items」と入力します
「Partition key」 「/category」と入力します。
上記を入力して最後に「OK」を押して下さい。
しばらくすると、
データ エクスプローラー > NOSQL API > DATA > ToDoList
が表示されます。
そうしたら、
[ToDoList] データベースを展開し、 [項目(Items)] コンテナーを展開します。
次に、 [項目(Items)] を選択し、 [新しい項目(New Item)] を選択します。

はい。右側に以下のコードが現れました。
{
"id": "replace_with_new_document_id"
}
はい。そのコードは今回は使いません。
以下のコードに書き換えて下さい。
{
"id": "1",
"category": "personal",
"name": "groceries",
"description": "Pick up apples and strawberries.",
"isComplete": false
}
そうしたら、「保存(Save)」を押してください。
そして、もう一度[新しい項目(New Item)] を選択します。
そうしたら、今回は、例えば以下のコードを入力してみましょう。
{
"id": "2",
"category": "work",
"task": "Finish project proposal",
"dueDate": "2022-12-01",
"priority": "high"
}
え!?「”id”: “1”」と「”id”: “2”」の構造(形)が全然違うじゃないですか!
こんなデータベースで良いんですか?
安心してください!これで良いんです!
絶対そう言うと思いました・・・。
そこまで読まれていましたか。とにかく・・・、
この例では、以前の項目(”groceries”)とは異なる構造を持つ新しい項目を作成しています。 “name” と “description” プロパティは存在せず、代わりに “task”、”dueDate”、および “priority” プロパティが追加されています。これは、Azure Cosmos DBがスキーマレスであるため、異なる構造の項目を同じコンテナに保存できることを示しています。
スキーマレス?
スキーマレスとは、データベースがデータの構造(スキーマ)に対して柔軟であることを意味します。
なるほど、スキーマレスとは”構造が柔軟”と言うことを意味しているんですね!
その逆に、従来のリレーショナルデータベースでは、テーブルのスキーマ(各列の名前とデータ型)を事前に定義する必要があります。これにより、すべての行(レコード)が同じ構造(列)を持つことが保証されます。このようなデータベースでは、スキーマの変更が困難で時間がかかる場合があります。
はい。これは私が知っているデータベースのイメージです。
そうですよね。一方、スキーマレスデータベース(NoSQLデータベースの一種)では、データの構造が事前に定義されていないため、異なる構造のデータを同じコンテナ(テーブル)に保存できます。これにより、アプリケーションの要件が変わってもデータベースの変更が容易になり、開発が迅速かつ柔軟になります。
おぉ~、にゃんダフル!これは使いやすそうです!


あれ?さっき、入力したコードが書き換わっていますね。
はい。それぞれの項目(Item)が別々のレコード(行)でも大丈夫ですし、異なるレコード数でも大丈夫です。
また、
“_rid”: “*****”,
“_self”: “*****”,
“_etag”: “\”*****\””,
“_attachments”: “attachments/”,
“_ts”: *****
上記が自動的に補完されていきます。
Azure Cosmos DBは、スキーマレスデータベースであるため、同じコンテナに異なる構造の項目を保存できます。
上記の例では、”groceries”項目には”name”と”description”プロパティがありますが、新しい項目には”task”、”dueDate”、”priority”プロパティがあります。これらの異なる構造の項目を同じ”Items”コンテナに保存できるのは、Azure Cosmos DBがスキーマレスであるためです。
これにより、アプリケーションの要件に応じてデータの構造を迅速かつ柔軟に変更できます。
なんだか、新しい感じがしますね。
では、最後にリソースをクリーンアップします。
Azure Cosmos DB アカウント ページの左側のナビゲーションから [概要] を選択します。
[基本] グループタブの [az20230430-cosmos-rg] リソース グループ リンクを選択します。
[リソースグループの削除] を選択し、指示に従って、さいごに「削除」を押します。しばらくすると、リソース グループとそれに含まれるすべてのリソースが削除されます。
ずっと課金されてしまわないように、ここまでしっかり行いましょう!
良く分かりました。ありがとうございます!