つばろぐ

主に C#, .NET, Azure の備忘録です。たまに日記。

DocumentDB SDK for .NET Core(Preview)を試しつつ、ローカルなDocumentDB環境を作ってみた

この記事は .NET Core Advent Calendar 2016 5日目の記事です。

11月中旬にAzure DocumentDB .NET Core向けのSDKのプレビュー版の提供が始まりました。

Azure DocumentDBとは

Microsoft Azureが提供する フルマネージドなNoSQLデータベースサービス です。
これまでDocumentDBのSDKは下記の言語が提供されていました。

docs.microsoft.com

冒頭でも述べたようにこれらのSDKのラインナップに「.NET Core」が加わりました。

DocumentDB .NET Core Preview SDK available

私自身、待ち望んでいたところがあるので試してみました。

SDKのインストール

まずはVisual Studioで.NET Coreのプロジェクトを作成します。
作成したプロジェクトを右クリックして「NuGetパッケージの管理」をクリックします。
パッケージマネージャにて Microsoft.Azure.DocumentDB.Core を検索し、インストールを行います。

f:id:tech-tsubaki:20161203224842j:plain

もしくはパッケージマネージャーコンソールにてインストールコマンドを発行します。

PM> Install-Package Microsoft.Azure.DocumentDB.Core -Pre
'nuget.org' からパッケージ 'Microsoft.Azure.DocumentDB.Core 0.1.0-preview' を取得しています。
NuGet パッケージ Microsoft.Azure.DocumentDB.Core.0.1.0-preview をインストールしています。
'Microsoft.Azure.DocumentDB.Core 0.1.0-preview' が MyDocumentDB に正常にインストールされました
NuGet の操作の実行に 42.79 ms かかりました
経過した時間: 00:00:01.3186288

機能

プレビュー公開についての記事によれば、.NET向けのSDKと同一の機能を有しているそうです。
なのでアプリケーションでDocumentDBを使う上での必要な機能は既に揃っていることになります。

DocumentDB .NET Core Preview SDK available

The DocumentDB .NET Core Preview SDK has feature parity with the latest version of the DocumentDB .NET SDK

データベースの作成、コレクションの作成、JSONドキュメントの作成など、基本的な機能の使い方はドキュメントを読んだほうが分かると思います。

docs.microsoft.com


とまぁこれだけだと大したブログにならないですね。

(オマケ)DocumentDBの環境をローカルに作る方法を試してみる

エミュレータを使ってローカルにDocumentDBの環境が作れるというもの。いつ頃でてたんだろう?
どうしてもDocumentDBを使ったアプリだと、ローカルでデバッグする際もデータベースだけはAzureにアクセスしないといけなかったので、オフラインだと開発しづらかった面がありました。これは早くに知っておきたかったですね。
元ネタはこちらです。

docs.microsoft.com

使用するのは DocumentDB Emulator というものです。Microsoftが提供しています。
必要なスペック要件としては、OSはWindows Server 2012 R2以上、またはWindows10のようです。
また、メモリは2GB、ディスク空き容量は10GBとのこと。

f:id:tech-tsubaki:20161204133629j:plain

SDKを使用してDocumentDBにアクセスするには、エンドポイントとアクセスキーを用いた認証が必要となります。
エミュレータの場合、エンドポイントは https://localhost:8081/ 、アクセスキーはドキュメントに記載されています。

接続先をエミュレータに変えてしまえば、他のコードを変更する必要はありません。
エミュレータのDocumentDBに格納されているデータを確認する場合は、タスクトレイのアイコンをクリックし[Open Data Explorer...]をクリックすればよいです。

f:id:tech-tsubaki:20161204140016j:plain

f:id:tech-tsubaki:20161204140156j:plain

DocumentDB Emulatorの標準ポートは8081ですが、このポート番号だと都合が悪い場合、Emulatorのコマンドラインでの起動引数にて別ポートを指定できるようです。

インターネット接続が必要なクラウドサービスを使ったアプリケーションの開発が、ローカルかつオフラインでできるのは素晴らしいですね。

最後にこの記事を書くために使用したコード(リポジトリ)を置いときます。
デバッグ実行時はDocumentDB Emulatorに接続するようなコードにしています。

github.com


※追記

この記事を書いてたらScott HanselmanさんのブログにDocumentDB Emulatorの記事が公開されていた。なんとタイムリーなw

www.hanselman.com

先日出したAzure FunctionsのIssueが解決したようです

先日、Azure FunctionsについてのIssueを出したという記事を書きました。

tsubalog.hatenablog.com

要約すると、コピーボタンを使ってコピーしたテキストに余計な改行が含まれていました。
そこで勇気を振り絞ってIssueを出してみました。

github.com

Issueを出して数日後、bugというラベルが付けられました。やはりバグだったんですね。
更に数日後、修正が行われ、Issueはクローズとなりました。

修正箇所を見てみると、Azure FunctionsのポータルはTypeScriptが使われていることがわかります。
やはりMicrosoftのテクノロジーが使われているんですね。

github.com

なおこのIssueはまだリリースされていません。
rc というマイルストーンに分類されたため、次期リリース版に含まれる、といった感じでしょうか。

github.com

まだリリースされていないとはいえ、Azureの機能に少しでも貢献できたことは嬉しく思います。

Azure Functionsの情報コピー機能がとても使いづらいから Issueを出してみた

ふと思い立って、Azure Functionsのドキュメントを読みながら使ってみました。
ドキュメントに沿って進めた上で、おそらく不具合と思われる部分がありましたので、Issueを出してみました。

FacebookのJAZUG(Japan Azure Users Group)ページでフィードバック方法を教えて頂きました。ありがとうございます。

Azure Functions

Azure Functionsとは、サーバーレスな環境でコードを実行できるMicrosoft Azure上のサービスです。
似たようなサービスで、AWS Lambdaがあります。

azure.microsoft.com

プレビューリリースされた時にちょろっと使って以来、放置していましたが、復習がてらドキュメントを読みながら使ってみました。

azure.microsoft.com

Azure Functionsのトリガー

Azure Functionsは実行トリガーとして下記が提供されています。

  • cronライクなタイマー
  • HTTPやWebhook
  • Azureの他サービスとの連携(Event Hubsなど)

azure.microsoft.com

Github Webhookのサンプルを試してみた

azure.microsoft.com

このドキュメントではGithubのWebhookをトリガーとして、Azure Functionsを実行するというサンプルが紹介されています。

  1. Azure Functionsのアプリケーションを作成する。
  2. GitHub Webhookの新しい関数を作成する。
  3. 2の関数のURLとシークレットキーをコピーしておく。
  4. GitHubリポジトリに、Issueにコメントが投稿された際に動作するWebhookを作成し、3を貼り付ける。
  5. 4のリポジトリにIssueを作成し、コメントを投稿する。
  6. 5をトリガーとしてAzure Functionsが動作する。

ざっくりこのような手順ですが、なぜかWebhookが動作しません。
どうやらWebhookの疎通テストに失敗しているもよう。

f:id:tech-tsubaki:20161009120852j:plain

問題は3のコピー機能

関数のURLとシークレットキーをコピーしておく。

この操作を行った際、私はAzure Functionsのポータル画面のコピーボタンでコピーしました。

f:id:tech-tsubaki:20161009121218j:plain

コピーボタンでコピーされたURLやシークレットキーをテキストエディタに貼り付けてみると、余計な改行が含まれていました。


5pexxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

シークレットキーの文字列の前に2つの改行、後ろに1つの改行が含まれています。
このままGitHubに貼り付けていたため、本来のシークレットキーと異なってしまい、疎通を行うことができませんでした。

改行を取り除いてあげればGitHubからAzure Functionsへの疎通も行われるようになりました。

f:id:tech-tsubaki:20161009121838j:plain

まぁ、余計な改行が含まれるのはおそらく不具合でしょうから、上記の内容をIssueとして出してみました。初めてのIssueです。

github.com