PHPでCosmos DB

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

こんにちは、サイオステクノロジー技術部 武井です。今回は、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」が表示されますので、クリックします。

Screen Shot 2018-03-06 at 7.11.51

 

「+追加」をクリックします。

Screen Shot 2018-03-06 at 7.12.08

 

データベースを作成するための情報を入力します。

  • ID:任意の名称(後の接続先ホスト名となります)
  • API:SQL

後は必要に応じて、環境に適したものを入れて「作成」をクリックします。

Screen Shot 2018-03-06 at 7.13.11

 

しばらくすると、先程作成したものが一覧に表示されますので、クリックして下さい。

Screen Shot 2018-03-06 at 7.17.15

 

コレクションを作成します。「概要」→「+コレクションの追加」の順にクリックします。

Screen Shot 2018-03-06 at 7.20.39

 

コレクションの作成に必要な情報を入力します。「databese id」にはデータベース名、「Collection id」にはコレクション名を入力します。後はデフォルトでOKです。(とりあえず動かすだけなので)

Screen Shot 2018-03-06 at 7.22.07

 

ドキュメントを作成します。「データエクスプローラー」→「testdb」→「testcol」→「Documents」→「New Document」の順にクリックして下さい。Screen Shot 2018-03-06 at 10.40.51

 

下記のようにJSONのデータを入力して、「Save」をクリックして下さい。IDと名前だけのシンプルなJSONです。これでドキュメントの作成は完了です。

Screen Shot 2018-03-06 at 7.25.00

 

Cosmos DBへの接続に必要な情報を事前に取得します。「キー」をクリックして、「URI」「プライマリキー」をメモしますφ(..)メモメモ

Screen Shot 2018-03-06 at 10.46.25

 

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>

上記をブラウザから実行すると・・・

Screen Shot 2018-03-06 at 11.51.14

(`・ω・´)シャキーン

Cosmos DBに登録したドキュメントが表示されました。

 

アバター画像
About 武井 宜行 269 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる