読者です 読者をやめる 読者になる 読者になる

BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人的メモ

Azure DocumentDB のEmulatorを使って Quick Start

C# ASP.NET Core DocumentDB Azure

AzureのNoSQLサービス DocumentDB を、ローカル環境エミュレーターが2016-11月に発表されました。ブログは見てましたが全く試していなかったので、Quick Start用のサンプルコードを使って動かしてみます。

azure.microsoft.com

今回は、.NET Coreのサンプルコードをダウンロードして使います。

Overview

環境は、Visual Studio 2015 Update3 (Enterprise)を使っていますが、ASP.NET Coreが利用できる環境であればどれでも大丈夫かと思います。

1. DocumentDB Emulatorのインストール

まずは、ここからエミュレーターインストーラーをダウンロードしてインストールします。

f:id:beachside:20161204231455p:plain

インストールはポチポチするだけなので、手順は省略します。インストールが完了したら、今インストールした「DocumentDB Emulator」を起動しましょう。ファイアウォールの警告が出ますが、アクセスを許可してあげます。そうすると、ブラウザが立ち上がります。URLが「https://localhost:8081/」になっているので、ここがエンドポイントっぽいですね。

f:id:beachside:20161204231502p:plain

サンプルコードをダウンロードできます。環境は.NET、.NET Core、Java、Node.Js、Pythonがあってイイですね。今回は、新たに登場した.NET Coreを試してみます。プロジェクトをダウンロードして、zipを展開し、展開されたフォルダの中でquickstartcore.slnをクリックしてプロジェクトを開きます。   

2. サンプルコードを更新

以下消した部分はバグってて修正方法を書いてた部分だったのですが、2016-12-6に中の人にメールしたら「昨日対応したよ、エミュレーター再起動して試してみて」 って数分で返信来て、修正されていることを確認できたので消しました♪
(ってかUSの中の人、普通に超早くメールくれてびっくり&素晴らしいですね!Kirill, Thanks for this support ! )

プロジェクトを開くと、さっそく「パッケージの復元に失敗しました」と表示されました。。。。Σ(=゚□゚=;)

f:id:beachside:20161204232554p:plain

  

エラー起きてるところをみると、DocumentDBのSDKが死んでますね。必要なのはMicrosoft.Azure.DocumentDB.Coreですが....ほ?は?....とりあえず説明は抜きにして...Nugetからパッケージをインストールします。ソリューションエクスプローラーで今開いているプロジェクト「quickstartcore」を右クリックし、「NuGet パッケージの管理」をクリックします。

f:id:beachside:20161204233158p:plain

  

画面左上の方の参照をクリックし検索で「Microsoft.Azure.DocumentDB.Core」と入力し、プレリリースを含めるにチェックを入れます(DocumentDB SDK の.NET Core版はまだプレビューです)。

f:id:beachside:20161204233302p:plain

  

インストールしましょう。
(慣れている方だと、コマンドでInstall-Package Microsoft.Azure.DocumentDB.Core -Pre打ってインストールですね)

インストールが完了したら、project.jsonを開きます。 エラーが出ている行"Microsoft.Azure.DocumentDB.Client": "0.1.0"は見なかったことにして消します!。Ctrl+ Sキーでファイルを保存すると、パッケージのリストアが実行されてエラーが消えます。 (このエラー修正は....そのうちMicrosoft側で修正されると思います。)

f:id:beachside:20161204234152p:plain

  

では、このサンプルプログラムでDocumentDBへの接続先の設定(今回はエミュレーターへの接続)がどうなっているか見てみましょう。DocumentDBのClientは、インスタンス化するときに接続情報とかオプションをセットするので、サンプルコードのレベルならDocumentDBRepository.csあたりを開いてみましょうか...(ってかコードの解説のサイトってあるのかな?...)。

クラスの先頭に変数が定義されていました♪ざっくり説明します。

  • Endpoint
    Emulatorを起動したときにみたURL「https://localhost:8081/」が入力されています。AzureのDocumentDBにアクセスするときは、Azureのポータルから取得することができます。

  • Key
    認証キーです。Emulatorにアクセスするときは、いじらずで大丈夫です。the base-64 encoding of a 64-byte vectorである必要があります。AzureのDocumentDBにアクセスするときは、Azureのポータルから取得することができます。

  • DatabaseId
    データベース名です。とりあえずならそのままでもいいですが今回は「DemoDb」と変更しました。

  • CollectionId
    コレクション名です。RDB的にはテーブルみたいなものだと思っていただければと。Azure上のDocumentDBは、このコレクション単位で課金がされます。今回は「DemoCollection」と変更しました。

あと、ちょっと気になったところは、(実際のソースコードの)76行目に記載されている

new ConnectionPolicy { EnableEndpointDiscovery = false }

です。これは、Emulatorに接続する際には必要なオプションのようです。

DocumentDBをガチで利用する際は、clientのインスタンスを作るときは設定をすべき点がたくさんあります。今回は詳しく触れませんが、このプログラムを元にAzureのDocumentDBに接続して利用する際は、このDocumentDBRepositoryクラスの動作はきっちり理解しておきましょう。接続方法やコレクションが作成されるときのオプション(スループットの設定とか)は要注意です。

(私も過去にClientのプログラムの記事を書いていますが、あの記事はSDKのバージョンが古くそのうち更新できたらと思っています。ちなみに仕事で使ってるプログラムはSDKの更新に合わせて結構変わっている...)

 

3. デバッグして動作確認

デバッグの前にこのアプリについて簡単に触れておくと、簡易のTODO管理アプリです。
DocumentDB周りの動作についてですが、このアプリが起動する際、つまりASP.NET Coreが起動する際に呼ばれるStartup.csの中で、DocumentDBRepositoryクラスのInitialize()メソッドが呼ばれます。このメソッド内で、staticなDocumentClientが生成され、データベースやコレクションの存在チェックをし、無ければ作成します。

 

それでは、デバッグしましょう。F5キーでデバッグを開始すると、TODOアプリがブラウザで表示されます。先ほど記載したとおり、アプリが起動時したタイミングで、データベースやコレクションがなければ作られます。
適当にTODOを入れてCreateボタンをクリックします。

f:id:beachside:20161205002804p:plain

     

Webアプリ上で登録されたことが確認できます。

f:id:beachside:20161205003130p:plain

     

では、Emulator側が正しく動作しているか見てみましょう。先ほど開いたEmulatorの画面(https://localhost:8081/)を開き、Explorerをクリックしてみましょう。画面が開いたままだった場合は、リフレッシュの矢印をクリックすると、データベース、コレクション、そして先ほど入力したドキュメントが登録されていることが確認できました。

f:id:beachside:20161205003342p:plain

idとか_tsとかの自動で生成されるインターナルフィールドも確認できますね。idは自分で入力こともできますが....それはさておき、アプリでEditなどして、正常に更新されることが確認できます。これで、DocumenDBの動作チェックがお手軽にできますね。

興味がでましたら是非是非DocumentDBを触って見ていただけると楽しいと思います。注意として、Azureで利用する際の料金体系は、改めてチェックしましょう。

最後に...

仕事で2015年の2月くらいからDocumentDBを使っていますが、当時は実務では使えそうもないサンプルプログラムしかなく動作確認も大変でした。その頃から比べSDKも安定したし、ローカル環境で利用できるエミュレーターやQuick Start用のプログラムもできて試しやすくないていい感じに進化してますね。

ただ、Emulator上からクエリで検索する機能はまだないっぽいですね。そんな時は、DocumentDB Studioを使ったりするといいかもしれません。

github.com

AzureのDocumentDBを実際に使う場合は、AzureのポータルからDocumentDBの中身をSQL文っぽいので検索することができます。クエリに興味がある方は、以前にさっとまとめてたりするので、興味があればご覧ください♪。

beachside.hatenablog.com

     

ということで、ちょっと時間が投稿時間が遅れましたが、アドベントカレンダーの5日目として登録です♪ qiita.com

余談...

ほんとは、Azure FunctionsをVSで開発するネタを掘り下げたかったんですが、warning出てたせいでネタ探したりゲームしたりして遅れました(という言い訳....)。
f:id:beachside:20161205004608p:plain

参考

azure.microsoft.com

docs.microsoft.com