💻

Azure Cosmos DB Emulator がついに Linux 版に対応したので早速試してみた

2021/05/14に公開

この記事について

Microsoft Azure の NoSQL サービスである Azure Cosmos DB ですが、新しい Linux Emulator の情報が公開され、パブリックプレビュー扱いになりました!!!

https://youtu.be/NUfK6n8UXi8

これまで、Azure Cosmos DB のエミュレーターは Windows 環境でしか利用できず、Docker で作成する場合はWindows コンテナーでのみ作成可能という制約がありました。そのため、私のような macOS ユーザーにおいては、エミュレーターを使用してローカル環境だけで開発を行うことが難しく、Azure 上に 400 RU/s の無償枠環境を作成し、オンライン環境を維持することが必須となっていました。

今回、新しく Linux Emulator が登場したことによって、オフライン環境下でも Azure Cosmos DB を使用したアプリ開発ができることになり、開発環境の自由度があがり、さらにお財布に優しい環境が整ってきています。

というわけで、今回は、パブリックプレビュー公開された Azure Cosmos DB Linux Emulator 環境を早速構築していきます!

構築にあたっての制約など

詳しくは公式情報 (https://aka.ms/linux-emulator) を参照して欲しいのですが、2021/05/14 時点では、大きな部分としては以下の制約が案内されています。

  • エミュレーターの Data Explorer ペインは現在、SQL API のみを完全にサポート (MongoDB を次はサポートするよう対応予定とのこと)
  • 作成できるのはプロビジョニングされたスループットモードのアカウントのみであり、サーバレスモードはサポート外
  • Intel CPU 環境のみサポートしており、Apple M1 環境はサポート外
  • エミュレーターの環境は、常に Azure Cosmos DB サービスの最新状態と同期しているわけでは無い
  • エミュレーターは試用版という扱いになっており、利用可能期間が設定されている模様
  • コンテナーを動かすには、少なくとも 2 コアの CPU、3 GB 以上のメモリを割り当てること

エミュレーターを動かす際の制約についての詳細は、以下を参照してください。

https://aka.ms/linux-emulator

macOS で Linux Emulator を動かしてみる

では、実際に Linux エミュレーターを Docker 環境上に構築していきます。
いつものように、公式情報を参考に docker-compose.yaml を作成し、コンテナー環境を作成していきます。

環境情報

今回、検証に使用した環境のバージョン情報などは以下の通りです。

  • macOS Big Sur: 11.3.1
  • Docker Desktop: 3.3.3
    • Engine: 20.10.6
    • Compose: 1.29.1

ローカル環境の IP アドレスを取得

Azure Cosmos DB SDK for .NET/Java を使用してダイレクトモード設定を構成する際に必要となるローカル環境の IP アドレス情報を取得します。
ここで定義する$ipaddr変数については、後続の docker-compose.yaml ファイル内、およびコンテナー起動時に使用します。

ipaddr="`ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' | head -n 1`"

docker-compose.yaml 作成

コンテナー環境情報を定義する docker-compose.yaml ファイルを作成していきます。

docker-compose.yaml
version: '3.1'
# version: '2'

services:
  linux-emulator:
    image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
    container_name: azure-cosmos-emulator
    tty: true
    ports:
      - 8081:8081
      - 10251:10251
      - 10252:10252
      - 10253:10253
      - 10254:10254
      - 10255:10255
    environment:
      - AZURE_COSMOS_EMULATOR_PARTITION_COUNT=10
      - AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE=true
      - AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE=$ipaddr
    # cpus: "2.0" # Use this param at v2
    # mem_limit: 3g # Use this param at v2
    deploy: # Use these param at v3 & add `–compatibility` when compose up
      resources:
        limits:
          cpus: "2.0"
          memory: 3g

コンテナー起動

作成した docker-compose.yaml を使用して、コンテナーを起動します。
version 3.xdocker-compose.yaml を使用している場合は、コンテナー起動時のコマンドに注意してください。

# version: 3.x の場合
docker-compose --compatibility up -d
# version: 2 の場合
docker-compose up -d

実行後、コンテナーが Pull され、無事に起動できることを確認できるはずです。

docker-compose ps
        Name                       Command               State                                       Ports                                    
----------------------------------------------------------------------------------------------------------------------------------------------
azure-cosmos-emulator   /usr/local/bin/cosmos/start.sh   Up      0.0.0.0:10251->10251/tcp,:::10251->10251/tcp,                                
                                                                 0.0.0.0:10252->10252/tcp,:::10252->10252/tcp,                                
                                                                 0.0.0.0:10253->10253/tcp,:::10253->10253/tcp,                                
                                                                 0.0.0.0:10254->10254/tcp,:::10254->10254/tcp,                                
                                                                 0.0.0.0:10255->10255/tcp,:::10255->10255/tcp,
                                                                 0.0.0.0:8081->8081/tcp,:::8081->8081/tcp 

証明書のインストール

実際にコンテナー内にあるエミュレーター環境には、Web ブラウザを介してアクセスすることになります。
その際、HTTPS でアクセスすることになるので、証明書を Mac 端末にインポートしておく必要があります。

以下のコマンドを実行して、エミュレーター用の証明書をダウンロードします。

curl -k https://$ipaddr:8081/_explorer/emulator.pem > emulatorcert.crt

実行すると、emulatorcert.crt という名前のファイルが作成されるはずです。これは自己署名証明書(いわゆるオレオレ証明書)というやつです。
実際にブラウザ経由でエミュレーターの UI に接続する際は、この証明書を使いたいので、キーチェーンに登録していきます。

Launchpad からキーチェーンアクセスを選択して開きます。

画面左上のメニューからファイル -> 読み込む...を選択 (または Command + Shift + I を入力) し、証明書のインポート画面を表示します。

ファイル選択の画面で、先ほど作成した emulatorcert.crt ファイルを選択し、インポートを行います。

画面から、自己署名署名書がインポートされたことを確認してください。

証明書の信頼設定

証明書をインポートしても、証明書が信頼されていなければアクセスできないので、信頼するように設定を行います。
先ほどインポートを行った証明書をダブルクリックし、証明書情報の詳細を表示します。
信頼タブを開き、この証明書を使用するときのプルダウンで設定されている選択値を常に信頼に変更します。

設定を変更すると、以下のように、証明書が信頼状態に変更されるはずです。

Web UI にアクセス

これで、Azure Cosmos DB Linux Emulator の UI にアクセスできるようになったので、ブラウザを起動してアクセスしてみます。
URL は https://localhost:8081/_explorer/index.html です。

後は通常と同じように SDK から接続するだけ

あとは、これまで同様、Azure Cosmos DB の プライマリ/セカンダリ接続文字列などを使用して、Cosmos DB Linux Emulator に接続すれば、従来と同様の形で開発を始められます。

まとめ

今回は、新しく登場した Azure Cosmos DB Linux Emulator の環境構築方法についてみてみました。
Azure Cosmos DB は、本当に公式ドキュメントをはじめ、リリースされている内容が非常に丁寧なのですが、今回のリリース情報も非常に素晴らしかったです。
正直公式ドキュメント見れば誰でも構築が簡単にできるレベルでしたので、私のこの記事に有用性があるかはわかりませんが、英語苦手、という人向けに、公式の日本語訳ドキュメントがリリースされるまでの参考情報となれば幸いです。

Discussion