Azure Cosmos DBとは
Azure Cosmos DBは、Microsoft Azureで提供されている分散データベース・システムである。レイテンシーが低く、リージョンをまたいでグローバルにレプリケーションすることができるため、あらゆる規模のアプリケーションのニーズに応えることが可能だ。
また、複数の種類の内部データ構造に対応しており、作成時にドキュメント型、キーバリュー型、グラフ型、そしてApache Cassandraのいずれかから選ぶことができる。データにアクセスするAPも、ドキュメント型の場合はSQLまたはMongoDB API、キーバリュー型はTable API、グラフ型はGremlin APIといった具合に選択可能なため、アプリケーションで使用するデータの性質に応じてさまざまな構成を選ぶことができる。
Cosmos DBの性能は「RU(Request Unit: 要求ユニット)」という単位で表現される。ユーザーが必要とする1秒当たりの要求ユニット数(RU/s)を指定しておけば、そのスループットを実現するために必要なリソースが予約される仕組みになっている。Cosmos DBの利用料金は、コンテナ(リレーショナルデータベースのテーブルに相当するもの)1つにつき、1秒当たりの要求ユニット数と、1時間当たりに消費されたストレージの合計量によって決まる。
各コンテナに指定できる最小スループットは400RU/sで、ストレージは5GBだが、この構成であれば12ヶ月間の無料サービスの対象となる。価格モデルに関する詳細はAzure Cosmos DB の価格モデルを参照していただきたい。
Cosmos DBのデータベースとコンテナを作成する
それでは、早速Cosmos DBのデータベースを作成してみよう。Cosmos DBはAzureポータルで管理できる。まずメニューから「Azure Cosmos DB」を選択すると、次のような画面が表示される。
Cosmos DBを有効にするには、Cosmos DB用のアカウントを作成する必要がある。用途に応じて複数のアカウントを作ることができる。[Azure Cosmos DB アカウントの作成] をクリックして、新規アカウントを作成しよう。
下の図は、リソースグループ「cloudnavive」(以前仮想マシンを作ったのと同じグループです)に対して、「mynavidb」という名前のアカウントを作成した例である。
APIでは、データベースにアクセスするためのAPIの種類を選ぶ。選んだAPIに応じて内部のデータ構造も決定される。今回は[コア (SQL)」を選択しよう。場所はデータベースを配置するリージョンで、この例では東日本を指定した。
続いて、ネットワークの設定を変更したい場合は [次: ネットワーク] をクリックする。ここでは、データベースにアクセスするネットワークをパブリックにするかプライベートにするかなどを選ぶことができる。今回は [All networks] を選ぶ。
[確認と作成] をクリックすると、設定の確認画面が表示される。問題なければ [作成] をクリックすればアカウントの作成が実施される。
しばらく待って、作成に成功すれば、下図のようにデプロイ完了の画面が表示される。
Cosmos DBの管理画面を開くと、作成した「mynavidb」のアカウントがリストに追加されていることが確認できる。
次に、[mynavidb] を選択してアカウントの管理画面を開こう。ここからコンテナ(RDBでいうところのテーブル)の追加をはじめとするさまざまな設定が行える。
コンテナを追加するには、上部の [Add Container] をクリックするか、左のメニューから [データ エクスプローラー] を選択して出てきた画面で [New Container] をクリックする。
下図のように、右側にコンテナ追加のダイアログが開くので、ここで各種設定を入力する。
この例では、まだデータベース自体が何もないので、対象データベースとして「mydb」を新規作成している。もし既存のデータベースにコンテナを追加する場合は、[Use existing] をチェックして対象のデータベースを選択すればよい。スループットは最小構成の400 RU/sとした。コンテナIDは「Employee」、パーティションキーは「/position」としている。
Cosmos DBでは、コンテナを論理パーティションを用いて分割することによってスケーリングを実現する。パーティションキーはこのパーティション分割の際にキーとなる項目である。パーティションキーはコンテナのサイズが大きくなった場合のスループットに影響するので、レコード全体で均等に値が分散されるような項目を選ぶのが望ましい。詳細は こちらのガイダンス を参照のこと。
設定を入力したら、[OK] をクリックすれば、次のようにデータベース「mydb」が作成され、その中に「Employee」というコンテナが追加されていることを確認できる。
注:実はこのコンテナ作成の手順を省略しても、後述するSpring Bootアプリケーションを起動した時点で、対象となるコンテナを自動で作成してくれる。ただしその場合、スループットが自動で設定されてしまうため、Azureポータルから自分で設定を修正するのを忘れないように注意しよう。
Cosmos DBにアクセスするためのSpring Bootプロジェクトの設定
続いて、第3回で作ったSpring Bootのプロジェクトをもとに、Cosmos DBを使用するアプリケーションを作成していこう。まず、上で作ったmydbに接続するための設定を追加する。接続に必要な情報は、Azureポータルで対象のCosmos DBアカウント(本稿の例ではmynavidb)の管理画面を開いて、左のメニューの「キー」のところに記載されている。下図のように、URIやプライマリキーなどが確認できる。
接続情報としては、この中のURIとプライマリキー、そしてデータベース名(本稿の例では「mydb」)が必要となる。Spring Bootプロジェクト src/main/resources/ ディレクトリに「application.properties」という名前のファイルを作成し、その中に次の3行の設定を書き込もう。URIとプライマリキーは先ほどの管理ページのものをコピーし、データベース名には先ほど作ったデータベースの名前を記述する。
azure.cosmosdb.uri=[URI]
azure.cosmosdb.key=[プライマリ キー]
azure.cosmosdb.database=[データベース名]
次に、MavenにCosmos DB用のプラグインのための設定を追加する。pom.xmlを開いて、以下に挙げる2つの修正を行う。まず properties の設定を探し、そこに次のように Azure のバージョン情報を追加する。
<properties>
<java.version>11</java.version>
<azure.version>2.2.0</azure.version>
</properties>
次に、dependencies の設定を探して、そこに次の依存関係の情報を追加する。
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-cosmosdb-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
ここで追加したのは「Azure Cosmos DB Spring Boot Starter」というプラグインを使用するための依存関係の設定である。Azure Cosmos DB Spring Boot Starterを使用すると、Spring Data APIを用いてCosmos DBのSQLデータベースにアクセスすることができる。
さて、pom.xmlの設定ができたら、一旦プロジェクトをビルドして、依存関係が正しく解決できていることを確認しよう。
$ mvn clean package
次回は、実際にCosmos DBにアクセスしてデータの追加や検索を行うプログラムを作ってみよう。