こんにちは、サイオステクノロジー技術部 武井です。今回は、AzureのCosmos DBにPHPでアクセスしてみます。
Cosmos DBとは?
マイクロソフトが提供するグローバル分散型のマルチモデル データベース サービスになります。詳細は以下をご覧頂ければと思います。
https://docs.microsoft.com/ja-jp/azure/cosmos-db/introduction
今回はCosmos DBの詳細な解説は抜きにして、手っ取り早くJSONを入れて検索できるような簡単なPHPのアプリケーションを作成します。
Cosmos DBの作成
まず、Cosmos DBを作成します。ちなみにCosmos DBには、データベース、コレクション、ドキュメントというものがあり、それぞれのものを一般的なデータベースに当てはめると以下の通りとなります。
- データベース → データベース
- コレクション → テーブル
- ドキュメント → レコード
Azureのポータルを開いて、「すべてのサービス」をクリックして、「cosmos」と入力します。すると、サービスの一覧に「Azure Cosmos DB」が表示されますので、クリックします。
「+追加」をクリックします。
データベースを作成するための情報を入力します。
- ID:任意の名称(後の接続先ホスト名となります)
- API:SQL
後は必要に応じて、環境に適したものを入れて「作成」をクリックします。
しばらくすると、先程作成したものが一覧に表示されますので、クリックして下さい。
コレクションを作成します。「概要」→「+コレクションの追加」の順にクリックします。
コレクションの作成に必要な情報を入力します。「databese id」にはデータベース名、「Collection id」にはコレクション名を入力します。後はデフォルトでOKです。(とりあえず動かすだけなので)
ドキュメントを作成します。「データエクスプローラー」→「testdb」→「testcol」→「Documents」→「New Document」の順にクリックして下さい。
下記のようにJSONのデータを入力して、「Save」をクリックして下さい。IDと名前だけのシンプルなJSONです。これでドキュメントの作成は完了です。
Cosmos DBへの接続に必要な情報を事前に取得します。「キー」をクリックして、「URI」「プライマリキー」をメモしますφ(..)メモメモ
Cosmos DBにアクセスするPHPの作成
いよいよ、Cosmos DBにアクセスするPHPを作成します。CentOSを前提とします。Cosmos DBへのアクセスはRestインターフェースが用意されていますが、Restを一つづつ叩くのは少々面倒です。そこで、その辺をラッパーしたライブラリが以下のGitHubにあります。作成していただいた方に感謝です。
https://github.com/cocteau666/AzureDocumentDB-PHP
その前に、まずHTTPのライブラリ(https_request2)をインストールする必要があります。ただし、https_request2をインストールするためには、PHPのパッケージ管理システムpearが必要になるので、まずそちらをインストールします。
# yum install php-pear
次にhttps_request2をインストールします。
# pear install https_request2
先程ご紹介した、Cosmos DBに接続するためのライブラリをgitからcloneします。
# git clone https://github.com/cocteau666/AzureDocumentDB-PHP.git
しかしこのままでは、HTTPクライアントライブラリhttps_request2がSSL接続出来ません。証明書の検証に失敗してしまいます。なので、ここでは、一時的に証明書の検証を無効にします(本番環境では、このような設定にはせず、必ずSSL証明書の検証を行って下さい)。phpdocumentdb.phpを以下のように変更します。
private function request($path, $method, $headers, $body = NULL) { $request = new Http_Request2($this->host . $path); $request->setHeader($headers); if ($method === "GET") { $request->setMethod(HTTP_Request2::METHOD_GET); } else if ($method === "POST") { $request->setMethod(HTTP_Request2::METHOD_POST); } else if ($method === "PUT") { $request->setMethod(HTTP_Request2::METHOD_PUT); } else if ($method === "DELETE") { $request->setMethod(HTTP_Request2::METHOD_DELETE); } if ($body) { $request->setBody($body); } $request->setConfig(array( // これを追加 'ssl_verify_peer' => false // これを追加 )); // これを追加
そしていよいよ本題です。Cosmos DBへ接続するPHPを作成します。
<?php // Cosmos DBに接続するライブラリのパスを指定する require_once '/path/to/phpdocumentdb.php'; // DocmentDBのホスト名を指定する $host = '[「キー」の設定のところでメモしたURI]'; // DocumentDBのマスターキーを指定する $master_key = '[「キー」の設定のところでメモしたプライマリキー]'; // DocumentDBに接続する $documentdb = new DocumentDB($host, $master_key,$debug = true); // データベースを選択する $db = $documentdb->selectDB("testdb"); // コレクションを選択する $col = $db->selectCollection("testcol"); // クエリを実行する $result = $col->query("SELECT * FROM c"); // JSONをデコードする $result_json = json_decode($result); ?> <html> <head> <meta charset="UTF-8"> <title>CosmosDB</title> </head> <body> ID:<?php echo $result_json->Documents[0]->id; ?><br> Name:<?php echo $result_json->Documents[0]->name; ?> </body> </html>
上記をブラウザから実行すると・・・
(`・ω・´)シャキーン
Cosmos DBに登録したドキュメントが表示されました。